
DynamoDB를 사용하는 Go 서비스의 응답 시간 최적화 #2 TLS Handshake
두줄요약
Go·DynamoDB 환경의 고지연 원인을 TLS Handshake와 짧은 타임아웃에 따른 커넥션 종료로 분석했습니다.\n타임아웃을 70ms로 조정해 재시도를 줄이고 커넥션 재활용을 유도했습니다.
문제 상황
- 트래픽 증가 후 일부 gRPC 요청과 DynamoDB 쿼리에서 100ms 이상의 높은 응답시간 발생
- 30ms 타임아웃·최대 3회 재시도 배포 후 연속 타임아웃 관측
원인 분석
- 타임아웃 뒤 신규 커넥션 생성 과정의 TLS Handshake가 100ms 이상 소요
- 짧은 context 타임아웃이 HTTP 커넥션 종료와 풀 미반납을 유발해 재시도마다 Handshake 발생
- DynamoDB의 IP 간 TLS Session Resumption 미지원으로 Handshake 회피 불가
해결 방법
- DynamoDB 응답 지연을 일부 허용하도록 요청 타임아웃을 70ms로 상향
- 재시도 빈도를 낮추고, 비동기 커넥션 생성 후 유휴 커넥션 풀 재활용 기대
트레이드오프
- 긴 응답의 대다수 개선과 일부 고지연 요청 포기 사이의 균형
- IdleConnTimeout 확대 및 더미 트래픽 기반 커넥션 유지 방안의 비합리성·코드 복잡도
