운영 로그는 어떻게 설계하고 봐야 하는가

운영 로그는 장애 대응과 실시간 관찰의 기본 도구였습니다. 문제는 로그를 많이 남기는 것 자체가 목적이 아니라, 필요할 때 해석 가능한 형태로 남기는 것이었습니다.
로그 품질은 “로그량”이 아니라 “문제 발생 시 원인 구간을 얼마나 빠르게 좁힐 수 있는가”로 평가해야 한다.
운영 로그는 디버깅 출력이 아니라 “운영자가 의사결정을 내리는 인터페이스”로 설계해야 한다.
로그를 설계한다는 것
운영 로그를 설계할 때는 서비스 단위로 로그 관점을 다르게 가져가야 했습니다. site, api, admin, omni처럼 역할이 다른 서비스는 애초에 관찰해야 할 지점이 달랐기 때문입니다. 고객 요청을 다루는 흐름과 운영자가 쓰는 관리자 기능은 같은 기준으로 보면 안 됐습니다.
로그를 설계할 때 중요했던 건 다음과 같습니다.
- 어디서 문제가 났는지 빠르게 좁힐 수 있는가
- 운영자가 요청 흐름을 따라갈 수 있는가
- 상시 로그량을 감당할 수 있는가
- 필요할 때 더 많은 단서를 확보할 수 있는가
즉 로그는 단순 텍스트 출력이 아니라 운영용 인터페이스였습니다.
로그를 나중에 읽는 사람은 대부분 로그를 남긴 사람이 아닙니다. 운영자이거나, 다른 개발자이거나, 몇 달 뒤의 미래의 나일 가능성이 큽니다. 그래서 로그는 “지금 내가 찍기 편한 문자열”보다 “나중에 누가 봐도 흐름이 이어지는 단서”가 되어야 했습니다.
로그 설계 절차
서비스 관점 분리
site/api/admin/batch별로 관찰 목적과 핵심 신호를 분리한다.
추적 키 표준화
요청/작업 단위 식별자를 고정해 흐름 추적 가능성을 확보한다.
상시-긴급 모드 분리
평시 로그량과 문제 발생 시 확장 로그 모드를 분리해 운영한다.
해석 가능성 검증
실제 장애 시나리오로 로그만 보고 원인 구간이 좁혀지는지 점검한다.
서비스별 로그 관점이 달랐던 이유
site는 사용자 경험과 직결되고, api는 시스템 간 호출과 연동 흐름이 중요하고, admin은 운영자 액션과 권한 흐름이 중요합니다. 같은 에러라도 어느 레이어에서 봤는지에 따라 의미가 달라집니다.
그래서 로그는 “모든 걸 한 군데에 많이 남기는 방식”보다, 서비스별 관점을 나누고 필요한 순간에 깊이를 조절하는 방식이 더 유효했습니다.
이 구분이 중요한 이유는, 문제를 좁히는 순서 자체가 달라지기 때문입니다. site에서 보이는 이상 징후가 꼭 site 레이어 문제라는 뜻은 아니고, api나 배치, 캐시, 연동 시스템의 문제일 수도 있습니다. 로그가 서비스별 관점으로 정리돼 있지 않으면 이런 흐름을 추적하기가 훨씬 어려워집니다.
서비스별 로그 관찰 포인트
| 서비스 축 | 우선 관찰 신호 | 로그 설계 포인트 |
|---|---|---|
site | 사용자 요청 오류/지연 | 요청 흐름 추적 키, 핵심 액션 결과 |
api | 내부/외부 연동 실패 | 호출 경계, 에러 코드, 재시도 맥락 |
admin | 운영자 액션 실패 | 권한/상태 전이/변경 이력 |
batch | 지연/누락/재처리 | 실행 단위 식별자, 단계별 처리 결과 |
운영 중 로그를 다루는 방식
상시로 디버그 로그를 많이 남기기는 어렵습니다. 그래서 필요한 순간에만 로그 레벨을 올려 더 많은 단서를 확보하는 방식이 중요해졌습니다. 이 지점은 다음 글에서 다룰 log4j 기반 런타임 동적 로그 레벨 조정 도구와 직접 연결됩니다.
결국 운영 로그 설계의 핵심은 두 가지 균형입니다.
- 평소에는 너무 무겁지 않게 유지할 것
- 필요할 때는 충분히 깊게 들어갈 수 있을 것
이 균형을 잡지 못하면 로그는 either 소음이 되거나, 반대로 아무 단서도 남기지 못하는 장식이 됩니다.
실제 운영을 돌리다 보면 TTL 적용 및 간헐적 발생 메모리 수정 같은 문제가 같이 따라옵니다. 운영 로그는 단지 에러를 기록하는 용도가 아니라, 메모리 문제나 세션 최적화처럼 당장 눈앞에서 재현되지 않는 문제를 다시 좁혀갈 수 있게 해주는 단서여야 했습니다. 그래서 로그 설계와 운영 도구화는 따로 떨어진 주제가 아니라 같은 축에 있었습니다.
다음 글에서는 어드민 세션 관리 기능이 왜 필요했는지를 통해 운영 도구화 관점을 이어서 정리합니다: 어드민 세션 관리 기능은 왜 필요했는가