T
TechInsights
목록으로
BackEnd•2025. 11. 26.

한계에 도달한 전시 서버, 그리고 우리의 해답

11번가
11번가 Engineering Team
한계에 도달한 전시 서버, 그리고 우리의 해답

핵심요약

원문 보기

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 응답 품질을 향상시켰습니다.
#BackEnd#Infra#Architecture
11번가
11번가

11번가 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기