
핵심요약
11번가 전시서비스는 증가하는 트래픽에 대응하기 위해 서버 Scale-in과 함께 애플리케이션 최적화를 진행했습니다. MongoDB 커넥션 부하 분산, 지연 트랜잭션 개선, 리소스 관리를 통해 최대 TPS 87.9K를 안정적으로 처리할 수 있게 되었습니다.
전시 API 서버 성능 최적화 및 Scale-in 전략
MongoDB 커넥션 부하 분산으로 CPU Spike 해결
- 문제 진단: 전시 API 서버에서 MongoDB 커넥션 풀의
MaintenanceTimer스레드가 2분 주기로 대량의 커넥션을 재생성하며 CPU Spike를 유발했습니다. - 원인 분석:
maxConnectionIdleTime이 1분으로 동일하게 설정된 4개 MongoDB 인스턴스에서 유휴 커넥션 재생성이 동시 다발적으로 발생하며 CPU 자원 집중 현상을 초래했습니다. - 해결 방안: 각 MongoDB 인스턴스별
maxConnectionIdleTime을 5분 단위로 분산 설정하여 커넥션 재생성 부하를 완화하고,minPoolSize와maxPoolSize를 동일하게 유지하여 즉각적인 트래픽 처리를 보장했습니다. - 기술적 효과: 노후 장비 서버에서 CPU Spike가 25%에서 9%로, 신규 장비 서버에서는 8%에서 2-3%로 감소하며 시스템 안정성이 크게 향상되었습니다.
지연 트랜잭션 최소화 및 자원 효율화
- 커넥션 풀 확장: Scale-in 환경에서 증가한 서버당 트래픽을 처리하기 위해 클라이언트-사이드 및 DBA 협의를 통해 서버-사이드 커넥션 풀 사이즈를 10K까지 확장했습니다.
- 재시도 기능 제어: MongoDB Java Driver의 재시도 기능을 **비활성화(Fast-Fail 전략)**하여 버스트 트래픽 시
SocketReadTimeout예외로 인한 불필요한 트랜잭션 지연을 방지하고 빠른 자원 반납을 유도했습니다. - 대량 조회 분할:
DataAccessResourceFailureException의 원인인command부하를 줄이기 위해 대량의Bulk Find-query를 적절한 크기로 분할 처리하여 MongoDB Sharded Cluster의 CPU 및 메모리 부담을 경감시켰습니다.
서버 리소스 관리 및 전반적인 성능 최적화
- 로컬 캐시 최적화: 로컬 캐시의 최대 사이즈를 설정하여 캐시 오브젝트의 과도한 증가를 방지하고 힙 메모리 압박 및 잠재적 OOM(Out Of Memory) 발생 가능성을 차단했습니다.
- 캐시키 정렬 처리: Top-Traffic Endpoint API의 캐시키 생성 시 정렬 로직을 추가하여 동일 요청에 대한 캐시 키 다양화 문제를 해결하고 캐시 효율성을 개선했습니다.
- API 로직 개선: Slow Query로 기록된 대량 데이터 호출 로직을 분할 처리하고, 트랜잭션 처리 시간이 긴 API들의 쿼리 및 도메인 로직을 최적화하여 전반적인 API 응답 품질을 향상시켰습니다.