성능 기본
성능의 주요 지표
성능을 측정하는 주요 지표는 다음과 같다.
사용자(Users): 서비스를 사용하는 사용자의 수
응답 시간(Response Time): 각 요청에 대한 응답 시간
초당 처리량(Transaction per Second, TPS): 초당 처리 가능한 트랜젝션의 수
리소스 사용량(Resource Usage): CPU, 메모리, 디스크, 네트워크 등의 사용량
사용자
사용자를 성능 테스트 관점에서 아래로 나눌 수 있다.
서비스에 요청을 하고 있는 사용자(Active User): 서버에 부하를 주는 사용자
서버에 요청을 보내고 결과를 기다리는 사용자
성능 테스트시 Virtual User와 동일한 개념
서비스에 접속한 사용자(Concurrent User): 서버에 접속한 사용자
서버에 부하를 주고 있거나, 부하를 줄 가능성이 있는 사용자
Active User를 포함한 상위 개념
성능 테스트 시 Active와 Concurrent 사용자의 비율을 고려해야 한다. Active와 Concurrent 사용자의 비율은 서비스마다 다르지만 일반적으로 5% 정도이며, 많게는 40%까지 증가할 수 있다.
응답 시간
시스템 관점의 응답시간은 크게 요청 시간(Request Time)과 응답 시간(Response Time)으로 나눌 수 있다. 사용자는 새로운 요청을 하기 전에 전의 시간(컨텐츠를 소비하는 시간)을 Think Time이라고 한다.
Request Time
Client: 웹에서 처리하는 시간
Network connect: 네트워크 연결 소요 시간
Request data send: 요청 데이터 전송 시간
Response Time
Server: 서버에서 처리하는 시간(Network + Application Server + DB + Cache 등에서 소요되는 시간의 합)
Response data receive: 응답 데이터 수신 시간
Network close: 네트워크 연결 종료 시간
병목 현상
병목 현상은 시스템의 성능이 지연되고 느려지는 현상을 의미하며, 아래의 요소들로 인해 발생한다.
Database
Server 리소스
연계 서버
Network
Client
Data format
이중 보통 가장 많이 발생하는 것은 Database에 의한 병목 현상이다.
Database
Database 병목 현상이 큰 이유는, 대부분의 서비스가 DB에 의존하여 데이터를 제공하고 처리 시간의 대부분이 DB에서 소요되기 때문이다. 이를 해결하고 방지하기 위해서 보통 아래와 같은 방법을 사용하고 고려하고 있다.
적절한 index 사용
ORM 사용 시 N+1 문제 방지
반드시 RDBMS를 사용해야 하는지 고려
Cache 사용
분산 클러스터 컴퓨팅(Spark) / 검색 서버 사용(Elasticsearch)
성능 측정 도구
성능 측정 도구는 크게 모니터링 도구 / 성능 분석 도구 / 성능 테스트 도구로 나눌 수 있다.
모니터링 도구: 서버 리소스 사용량을 모니터링 하는 도구(Grafana, Prometheus, Zabbix 등)
성능 분석 도구
Profiler: CPU / Memory / Thread 등을 세부적으로 분석하는 도구(측정시 리소스 사용량이 증가하기 때문에 보통 개발 환경에서만 사용)
APM: 서버의 사용자 수나 리소스에 대한 실시간 모니터링을 제공하는 도구(Pinpoint, Scouter 등)
성능 테스트 도구
BMT: 두 개 이상의 대상에 대한 성능을 비교하는 도구
성능 테스트 도구: 시뮬레이션을 통해 성능을 측정하는 도구(Gatling, JMeter, nGrinder 등)
측정 도구는 무료 / 유료 많은 것이 제공되지만 항상 같은 도구를 사용하는 것이 아니라, 상황에 맞게 적절한 도구를 선택하는 것이 중요하다.
Last updated
Was this helpful?