인프런의 '백엔드 애플리케이션 성능 테스트하기'를 보면서 내용을 정리한다.
일반 사용자에게 서비스를 오픈했을 때 서비스가 대박이 났다면?
트래픽이 폭주할 것이다.
이에 서버의 부하가 증가할 것이다.
이 트래픽을 감당하려면 얼마나 많은 서버가 있어야 할까?
(물론, 모든 트래픽을 감당하기 위해서 서버를 무한대로 증설할 수는 없다.)
성능 테스트는 사용자가 많아졌을 때를 가정해서 연습해볼 수 있게 도와준다.
성능 테스트 툴로 트래픽을 생성 --> 요청수를 계산해서 서버가 얼마나 필요할지 계산
추가록, 비효율적인 로직을 개선(메모리 정리가 안돼서 자꾸 GC가 발생하는 등)
지연시간은 요청 한 건 한건의 처리 시간을 말한다.
클라이언트 입장에서는 api를 호출하고 응답이 와야 그 다음 작업을 수행할 수 있다.
사용자가 체감하는 중요한 성능 지표다.
처리량은 단위 시간동안 얼마나 많은 작업을 처리할 수 있는지에 대한 지표다.
일 초에 몇 건? 이런 느낌
성능을 측정할 때는 지연시간과 처리량을 모두 측정해야 한다.
일반적으로 처리량이 낮으면 지연시간도 낮다. 처리량이 많아질수록 지연시간도 함께 늘어나게 된다.
프로그램을 시작하면, 이 프로그램은 메모리 위에 올라온다. 이걸 프로세스라고 부른다.
cpu는 프로세스에 정의된 코드를 실행한다.
이러한 네트워크 통신은 많은 자원을 사용한다.
거리가 멀어질수록 시간이 더 오래 걸림
대역폭을 넘어서면 그만큼 전송 시간이 늦어짐
데이터베이스도 일종의 애플리케이션이다. 운영체제가 실행하는 프로그램.
디스크가 느리면 CPU와 메모리도 이에 맞춰서 느려짐
성능이 정말 중요한 DB라면 SSD를 쓸 수 있음. 다만 비싸다.
둘 사이의 데이터를 동기화(갱신)이 중요하다. 네트워크 회선의 대역폭도 커야 함. 오가는 데이터도 많음. 다른 서버에 영향을 줄 수 있어서,
이 둘만 사용하는 전용회선을 붙이면 좀 더 빨라짐
모든 스레드가 사용되는 상황이면 일부 요청이 큐에 저장됨. 큐가 꽉차면 요청이 버려짐
그렇다고 해서 스레드를 무작정 늘리면 서버자원이 이를 감당하지 못함
커넥션풀도 마찬가지임
-많은 처리량을 감당할 수 있는 인프라를 구축할 수 있음
실무가 아닌 경우
-한건씩 요청을 봰서 지연시간이 어느정도 나오는지 확인한다.
-처리량을 점점 높이면서 현재 인프라 구성에서 지연시간이 치솟는 지점이 어딘지 찾아보기
-어떤 부분이 병목이 되는지 가설을 세워보고, 서버 자원 모니터링/로그 등을 통해 병목 지점 탐색
-병목을 해결하는 방법을 적용