본문 바로가기

엔지니어링(TA, AA, SA)/성능과 튜닝

[시스템성능] 시스템 성능 최적화(1) - 성능이란?

성능 개선과 관련하여 데이터베이스 SQL 튜닝을 다룬 것은 보다 찾기 쉽습니다. 데이터베이스 최적화 전문가 시장도 상당히 큰 편입니다. 하지만 실제 업무 로직이 수행되는 애플리케이션 코드 측면에서 성능을 분석하고, 데이터베이스에 접근하는 자료는 거의 없을 뿐 아니라 시장에서 애플리케이션 최적화 인력은 상대적으로 희소합니다. 애플리케이션 최적화 전문가는 서버와 데이터베이스로부터 업무 로직까지 복합적인 지식이 필요하기 때문에 진정한 시스템 최적화 전문가라고 할 수 있습니다.


시스템 성능은 서버, 애플리케이션, 데이터베이스, 네트워크에 관한 개별 지식만으로는 분석하는데 한계가 있습니다. 성능 개선을 위해서는 각 기술 요소의 특성과 동작 방식을 전체 시스템 관점에서 이해하고 분석할 수 있는 능력이 필요하므로 새로운 신기술보다는 프로그램 동작을 정확히 분석할 수 있는 기초 지식에 대한 이해도가 높아야 합니다. 운영체제, 네크워크 같은 부분에 대한 기초 지식으로 시스템에 대한 이해도를 높일 수 있습니다. 기술 영역은 HTTP, 자바, 오라클 데이터베이스, 유닉스, TCP/IP로 분류될 수 있습니다. 


성능을 개선할 때는 서비스를 처리하는 각 구성 요소의 처리 시간을 세분화해서 성능 분석을 해야합니다. 그러나 구성이 복잡한 시스템을 효과적으로 세분화해서 측정한다는 것은 쉬운 과정이 아닙니다. 그래서 효율적으로 시스템의 동작 방식과 구성을 이해하고 분석할 수 있게 지원하는 적절한 모니터링 도구의 선정이 무엇보다 중요합니다.


Scouter, Pinpoint, NELO2, APM, grafana... (2018년 6월 추가)


성능 개선은 대상 시스템이 어떤 기능을 수행하는 데 시간과 자원을 많이 사용하는지 파악하는 것에서 출발합니다. 이 연장선 상에서 성능을 이해하는 데 각 도구를 어떤 용도로 활용할 수 있는지 생각 하는 것이 중요합니다.



성능 이란?


파이프의 성능에 영향을 미치는 요소는 물의 흐르는 속도와 파이프의 직경에 있습니다. 파이프의 직경이 동일하다면, 10M(대략 10,000,000)/sec 속도로 보내는 파이프가 5M(5,000,000:5백만)/sec로 보내는 파이프에 비해 시간당 보내는 물의 양이 2배 많으므로 성능이 2배 좋다고 말할 수 있습니다.


결과적으로 시스템 성능은 시간당 처리량이며, 영향을 미치는 요소는 응답시간과 동시에 처리할 수 있는 프로세스 수입니다. 동일한 파이프라고 하더라도 어떤 내용물을 보내느냐에 따라 성능이 달라집니다. 시스템 역시 업무 특성과 아키텍처에 따라 응답시간에 차이가 나타나고 성능도 달라집니다.


응답시간은 사용자의 특성과 환경에 따라 요구하는 수준이 다르므로 동일한 응답시간에 대해 고객마다 만족도는 다르게 나타납니다. 모든 시스템과 사용자에게 일률적으로 적용할 수 있는 응답시간의 기준은 없습니다.



1.1. 동시 사용자

성능 테스트나 운영시스템에 발생하는 부하(Load)의 의미로 많이 사용되는 용어가 바로 동시 사용자(Concurrent User)입니다. 일반적으로 "시스템과 접속을 유지하고 있는 사용자 수"로 해석되나 일부는 "동시(일정 시점)에 시스템에 트랜잭션을 유발시키는 사용자 (동시 사용자가 동시 부하를 발생)"로 해석하기도 합니다. 


성능 분석이나 테스트시 공식적으로 적용되는 동시 사용자라는 의미는 대상 서버에 접속하고 있는 사용자로 정의합니다. 웹기반 시스템의 경우 비연결 상태로 서버와 접속 및 인증상태가 유지되는데, 이 경우에도 사용자가 화면을 보고 있거나 입력하고 있다면 동시 사용자에 포함됩니다.


동시 사용자는 아래와 같이 다시 두 유형으로 나뉘며, "동시 사용자 수 = 요청 사용자 수 + 비요청 사용자 수"라는 공식이 성립합니다.




 1. 요청 사용자(Active user): 대상 서버에 부하를 발생시키고 있는 사용자로서 서버에 서비스를 요청한 후 응답을 기다리고 있는 사용자

 2. 비요청 사용자(Inactive user): 대상 서버에 접속해 화면 내용을 읽고 있거나 화면에 값을 입력하는 중이라서 현재 서버에 서비스 요청을 보내고 있지 않는 사용자



1.2. 처리량

처리량(throughput)은 서버가 일정 시간 내에 처리한 트랜잭션의 양입니다. 그런데 서버가 인식하는 트랜잭션과 사용자가 인식하는 트랜잭션은 다릅니다. 성능에서 중요한 것은 DB가 데이터를 몇건 처리하고, 웹 서버가 이미지나 CSS 콘텐츠를 몇 건 처리했는가가 아니라 고객의 업무를 얼마나 빨리 처리할 수 있는가입니다. 따라서 처리량의 평가 단위로서 TPS(Transaction Per Second)의 "T"는 고객의 업무 처리 건수가 되는 것이 보다 업무 시스템을 평가하는데 적합합니다.


시스템을 설계하고 분석하는 엔지니어 입장에서는 서버가 인식하는 트랜잭션 또한 시스템을 이해하고 개선 방향을 수립하는데 중요한 의미를 지닙니다. TPS 이외의 처리량 평가 단위로 PPS와 HPS가 있습니다.


PPS(Page Per Second)

웹 성능을 분석할 때는 화면 단위를 트랜잭션 평가 단위로 사용하기도 합니다. 


HPS(Hit Per Second)

웹서버에서 이미지, 스크립트 파일, 스타일 파일, JSP, ASP 등 모든 컴포넌트는 별개의 요청으로 구성되며, 각각이 1개의 Hit가 됩니다. 따라서 HPS를 측정 단위로 삼는다면 TPS나 PPS에 비해 세분화된 것으로 볼 수 있습니다.


대부분의 시스템은 최대 500TPS 이내인 것이 일반적입니다. 은행의 뱅킹 시스템이나 통신사의 고객정보시스템과 과금시스템 같은 시스템 정도가 돼야 1,000TPS가 넘습니다



1.3. 응답 시간

응답시간은 요청(Request)한 후부터 응답(Response)을 받을 때까지 소요된 시간으로, 측정하는 위치에 따라 여러 유형으로 나뉩니다.


1. 클라이언트 응답 시간