핵심 요약
카카오엔터테인먼트의 BFF 장애 대응 사례를 분석하고 프록시 경로와 GraphQL 처리의 성능 저하 원인을 파악해 KeepAlive 기반의 연결 재사용으로 안정성과 TPS를 향상시켰다.
구현 방법
- 구성 및 기술 스택: 쿠버네티스에서 Next.js SSR pod과 BFF(pod, Node.js Express + Apollo Server) 운영, GraphQL 엔드포인트와 REST 프록시 경로를 병행 확인
- 문제 원인 분석 절차: Ingress/서비스/포드 구성, 미들웨어 처리, 백엔드 API 응답 지연 여부, 워커 노드 CPU 부하 및 pod 수 적정성 점검
- 성능 테스트 및 비교: nGrinder로 백엔드 API 직접 호출, Express 프록시 경로, GraphQL 경로의 TPS 비교
- 인프라/미들웨어 최적화: 미들웨어에서 쿠키 파싱 및 로그용 객체 문자열화 로직 최적화, res.locals 캐시 활용으로 재처리 최소화
- GraphQL/프록시 이슈의 근본 원인 탐색: RESTDataSource의 HTTP 에이전트(https.Agent) 설정 확인
- TCP 연결 재활용 문제 해결: http(s) 에이전트의 keepAlive를 true로 설정, Node.js 기본 에이전트의 기본값 이슈 확인
- 최적 포드 수 시험: 8코어 서버 6대 환경에서 포드 수를 코어당 1개 근접 시 최적 TPS 도달, 코어 2배는 오히려 감소
주요 결과
- 프록시 경로 최대 TPS: 약 720에서 3600으로 증가
- GraphQL 경로 TPS: 약 560에서 1800으로 증가
- 운영 중 CPU와 응답 안정성 크게 개선, keepAlive 설정으로 부하 분산 및 재사용 효과 확인
- Mac 환경의 로컬 포트 고갈 이슈는 서버 측 설정 개선으로 완화되었으며, Node 19 이상에서 keepAlive 기본값이 개선되는 점도 확인



