핵심 요약
무신사에서 관측성과 가용성을 동시에 확보하기 위해, 로그 비동기 처리로 trace_id 손실을 막는 커스텀 TraceAwareAsyncAppender를 구현했습니다.
주요 경험
- AsyncAppender를 제거하면 가용성은 회복되지만 trace_id 누락 문제가 남아 전사 표준의 한계를 드러냈습니다.
- 해결으로 caller 스레드에서 trace_id를 미리 캡처하여 TraceStampedEvent 래퍼에 저장하고 워커가 이를 출력하도록 하는 방식을 채택했습니다.
- 부하 테스트에서 초당 1만 5천 줄 로그까지 허용하되 neverBlock 드롭 정책으로 일부 로그를 버리고, p95 지연을 29ms 수준으로 유지하는 성과를 확인했습니다.
얻은 인사이트
- trace_id 보존과 비동기 로깅은 캡처 시점을 바꾸는 간단한 변경으로 함께 달성될 수 있습니다.
- 전사 표준의 제약은 현장 상황에 맞춰 재해석할 수 있어야 하며, 로그 관리량의 균형이 여전히 중요합니다.
