성능

성능과 관련한 용어

지연시간 (Latency)

  • Client 가 요청을 보낸 후 응답을 받기까지 걸린 시간을 말합니다. (주로 ms, s 단위)

처리량 (Throughput)

  • 단위 시간동안 몇건의 요청을 처리할 수 있는지에 대한 정보입니다.
  • 주로 1초동안 몇건의 요청을 처리할 수 있는지를 의미하는 TPS(Transaction Per Second) 단위로 사용합니다.
  • 웹 어플리케이션에서 말하는 하나의 Transaction 은 하나의 Http 요청과 그에 대한 응답을 의미합니다.

대역폭

  • 네트워크가 단위 시간동안 전송할 수 있는 최대한의 처리량을 의미합니다.
  • 처리량을 증가시키며 부하테스트를 하다보면 결국 대역폭에 가까워집니다.

성능 테스트의 목표

성능을 측정할 때는 처리량과 지연시간을 모두 측정해야 합니다.

초당 3000개의 요청(처리량) 이 들어올 때 99% 의 요청이 100ms 미만(지연시간)으로 처리되어야 합니다.

작업별 사용하는 자원

CPU

  • 계산 작업. 이미지, 영상 인코딩, 암호화, 해시화 와 같은 작업에 CPU 자원을 많이 사용합니다.

RAM

  • CPU 를 많이 쓰는 경우 함께 많이 쓰는 경우가 많습니다.
  • ex) 인스턴스 대량 생성, 캐싱, 컬렉션 객체 등

Disk

  • 파일 입출력, 로그 대량 발생시 많이 사용됩니다.
  • ex) 데이터베이스에서 대량의 데이터를 입출력

지연시간, 처리량과의 관계

  1. Client 가 다수의 요청을 보내어 처리량이 증가 합니다.
  2. 서버 자원의 사용량이 증가합니다.
  3. 프로세스, 스레드 간 자원 사용을 위한 대기시간이 길어집니다.
    • Race Condition 이 발생합니다.
    • 처리량이 기대 이상으로 낮아질 수 있습니다.
  4. 지연시간이 길어집니다.
  5. 처리되지 못한 요청이 쌓입니다.
  6. 요청 중 일부가 실패합니다.

데이터베이스

지연시간이 길어지는 상황

  1. 많은 요청이 들어올 때
  2. 많은 데이터 중 필요한 데이터를 찾아야 할 때
  3. 한번에 많은 데이터를 응답으로 줘야할 때
  4. 락이 너무 자주 걸리는 경우
    1. 트랜잭션을 지원하기 위해 데이터에 락이 걸립니다.
    2. 락이 걸리는 만큼 지연시간이 발생합니다.
    3. 때로는 데드락이 발생하여 응답이 처리되지 않기도 합니다.

실무가 아닌 환경에서의 성능 테스트

  1. 우선 한건씩 요청을 보내서 지연시간을 테스트합니다.
  2. 처리량을 점점 높이면서 지연시간이 치솟는 지점을 차아봅니다.
  3. 어떤 부분이 병목이 되는건지 가설을 세워보고 서버 자원 모니터링, 로그 등을 통해 병목 지점을 탐색합니다.
  4. 병목을 해결할 수 있는 방법을 적용합니다. (인프라 자원을 추가 등)