이전 글에서 이어집니다
이번 글은 적절한 connection 수를 찾기 위한 과정에 대해 살펴보겠습니다.
여러 요인을 고려하여 적절한 연결(Connection) 수를 결정하는 과정은 복잡하고 중요한 과제입니다. 아래에서 그 과정을 살펴보겠습니다.
모니터링 환경 구축
서버 리소스, 서버 스레드 수, 데이터베이스 커넥션 풀(DBCP) 등을 모니터링하기 위한 환경을 구축합니다.
부하 테스트
백엔드 시스템의 부하를 테스트합니다. 초당 요청 수(request per second)와 평균 응답 시간(avg response time)을 확인하여 시스템 성능을 측정합니다.
리소스 확인
백엔드 서버 및 데이터베이스 서버의 CPU, 메모리 등 리소스 사용량을 확인합니다.
서버 추가 확장
백엔드 서버의 CPU나 메모리 사용량이 일정 수준을 초과한다면, 새로운 서버를 추가로 띄워 문제를 해결할 수 있습니다.
DB 리소스 최적화
백엔드 서버의 리소스가 적절하더라도 데이터베이스 서버의 CPU나 메모리 사용량이 높다면, secondary 추가, 캐시 레이어 도입, 샤딩(sharding) 등의 방법으로 데이터베이스 리소스 사용량을 최적화합니다.
요청 지표 확인
리소스 사용량이 적절하더라도 초당 요청 수와 평균 응답 시간 지표가 좋지 않다면, 서버의 스레드 관리 모델을 살펴봅니다.
Thread per request 모델을 사용하는 경우, 활성 스레드 수를 확인하여 병목 현상 여부를 판단합니다.
예를 들어, thread pool의 전체 thread 수가 5인데, 지표가 안좋은 지점에서 active thread 수가 5라면, thread pool의 thread의 개수가 적어 병목현상이 발생해 성능이 안좋을 수 있습니다.
DBCP Connection 확인
thread pool의 개수 문제가 아니라면 다른 각도에서 생각을 해봐야합니다.
DBCP의 활성 연결(active connection) 수를 검토합니다. 만약 maximumPoolSize와 active connection이 같다면, 커넥션 수가 부족한 것일 수 있습니다. maximumPoolSize 값을 늘려 부하 테스트를 진행해보면 도움이 됩니다.
백엔드 서버 수 고려
사용할 백엔드 서버의 수를 고려하여 DBCP의 max pool size를 결정합니다.
위의 과정을 통해 모든 지표와 리소스 사용량을 종합적으로 고려하면서, 서버와 데이터베이스 리소스를 효율적으로 사용하고 최적의 성능을 달성할 수 있습니다.