배경
- 실제 환경에서 짧은 시간 동안 동시에 요청이 들어왔을 경우
- 테스트 결과 → 300명부터
DB Connection Pool Timeout 인해 에러 발생
문제 사항 & 고려 사항
- Connection Pool 늘리는 방법은 최후 수단으로 생각하고 진행 → 비용
- 회원 탈퇴에 외부 API 2개가 존재하여 비동기 논블로킹 사용을 고려
- 개선 전 테스트 결과
해결 방안 1
- 기존 코드
- 개선 코드
- 외부 API 호출 메서드를 분리하여 비동기 메서드로 생성
- Self-invocation 때문에
withdraw() 메서드를 헬퍼 클래스로 분리
- 외부 API 호출은 비동기 논블로킹으로 수행 → 이후 검증부터는 동기 - 블로킹으로 처리
| 동시 사용자 수 |
에러율 (비동기 적용 전) |
에러율 (비동기 적용 후) |
| 100명 |
0% |
0% |
| 300명 |
≥20% |
0% |
| 500명 |
~80% |
0% |
- 테스트 도구 : JMeter
- 서버 환경 : localhost
- 클라이언트 환경 : JMeter 클라이언트
- 모니터링 : Grafana 사용