본문 바로가기
Tech-BYOD

로그를 남겼는데 아무도 읽지 않는 회사의 슬픈 관측 가능성

by simhead-peterkim 2026. 8. 20.

로그를 남겼는데 아무도 읽지 않는 회사의 슬픈 관측 가능성

unread-logs-sad-observability

소개

많은 회사가 로그를 남깁니다. 애플리케이션 로그도 있고, 접근 로그도 있고, 오류 로그도 있고, 배포 로그도 있습니다. 대시보드는 화려하고, 그래프는 열심히 움직이며, 검색창에는 수많은 기록이 쌓입니다. 겉으로 보면 관측 가능성이 잘 갖춰진 것 같습니다. 그런데 장애가 나면 누군가 조용히 묻습니다. “어느 로그를 봐야 하죠?” 그 순간 회사의 관측 가능성은 살짝 슬퍼집니다.

로그를 남기는 것과 로그를 읽을 수 있는 것은 다릅니다. 더 정확히 말하면, 로그를 읽을 수 있는 것과 로그로 문제를 해결할 수 있는 것도 다릅니다. 시스템이 무언가를 많이 기록한다고 해서 운영자가 원인을 빠르게 찾을 수 있는 것은 아닙니다. 필요한 정보가 빠져 있거나, 너무 많은 정보가 섞여 있거나, 검색 기준이 없거나, 누구도 로그를 책임지고 관리하지 않으면 로그는 증거가 아니라 소음이 됩니다. 소음도 기록은 기록이지만, 장애 중에는 참으로 피곤한 기록입니다.

이 글에서는 “로그는 있는데 아무도 읽지 않는 회사”가 왜 생기는지, 그리고 관측 가능성을 실제 운영 능력으로 바꾸려면 무엇을 정리해야 하는지 이야기하겠습니다. 로그, 지표, 추적, 알림, 대시보드, 대응 문서까지 연결해 보겠습니다. 목표는 더 많은 로그를 남기는 것이 아닙니다. 필요한 순간에 필요한 질문에 답할 수 있는 시스템을 만드는 것입니다.

로그가 많다고 관측 가능성이 높은 것은 아닙니다

관측 가능성은 시스템 내부에서 무슨 일이 일어나는지 외부 신호로 이해할 수 있는 능력입니다. 여기에는 로그, 지표, 분산 추적, 이벤트, 알림, 대시보드가 포함됩니다. 그런데 많은 팀이 관측 가능성을 “일단 로그를 많이 남기는 것”으로 오해합니다. 그래서 모든 함수에 로그를 넣고, 모든 요청과 응답을 출력하고, 모든 실패를 길게 기록합니다. 처음에는 든든해 보입니다. 하지만 며칠 지나면 검색 결과가 너무 많아져서 정작 중요한 기록이 묻힙니다.

로그가 많아도 질문에 답하지 못하면 관측 가능성은 낮습니다. 예를 들어 장애 상황에서 우리가 알고 싶은 것은 보통 이런 것입니다. 언제부터 문제가 시작됐는가, 어떤 요청이 실패했는가, 어느 사용자나 기능에 영향이 있는가, 최근 배포와 관련이 있는가, 외부 서비스나 데이터베이스가 느려졌는가, 다시 실행해도 되는가. 로그가 이 질문에 답하지 못하면 기록량은 많아도 실무 가치는 낮습니다.

로그는 일기장이 아니라 증거 자료에 가깝습니다. 일기장은 길어도 괜찮지만, 증거 자료는 찾을 수 있어야 합니다. 장애 중에 10만 줄짜리 로그를 열고 “어딘가에 답이 있겠지”라고 생각하는 순간, 사람은 검색어보다 먼저 한숨을 입력하게 됩니다.

아무도 읽지 않는 로그가 생기는 이유

로그가 방치되는 이유는 단순히 팀원이 게으르기 때문이 아닙니다. 대부분은 구조의 문제입니다. 로그를 남기는 기준이 없고, 읽는 방법이 공유되지 않았고, 알림과 연결되지 않았고, 문제 해결 흐름에 포함되지 않았기 때문입니다.

가장 흔한 문제는 로그의 주인이 없다는 점입니다. 개발자는 디버깅을 위해 로그를 추가하고, 운영자는 장애 대응 때 로그를 보며, 보안 담당자는 감사 목적으로 로그를 필요로 합니다. 각자 목적이 다르지만 기준이 하나로 정리되지 않으면 로그는 서로 다른 의도가 섞인 창고가 됩니다. 창고가 넓어도 물건 위치를 모르면 필요한 순간에 도움이 되지 않습니다.

두 번째 문제는 로그가 행동과 연결되지 않는 것입니다. 어떤 오류 로그가 발생했을 때 누가 봐야 하는지, 어느 수준부터 알림을 받아야 하는지, 반복되면 어떤 조치를 해야 하는지 정리되어 있지 않으면 로그는 조용히 쌓입니다. 조용히 쌓인 로그는 어느 날 비용 청구서나 장애 보고서에서 존재감을 드러냅니다. 평소에는 말이 없다가 중요한 순간에 아주 무겁게 등장하는 편입니다.

좋은 로그는 질문에 답합니다

좋은 로그는 예쁘게 긴 문장이 아닙니다. 좋은 로그는 운영 질문에 답할 수 있는 구조를 갖습니다. 특히 운영 로그에는 시간, 요청 식별자, 사용자나 세션을 추적할 수 있는 안전한 식별자, 서비스 이름, 처리 단계, 상태 코드, 실패 사유, 소요 시간, 관련 리소스 정보가 있어야 합니다. 물론 민감한 정보는 제거해야 합니다. 로그가 문제를 찾으려다가 개인정보 문제를 만들면, 그것은 해결이 아니라 새로운 업무 생성입니다.

로그를 설계할 때는 먼저 어떤 질문에 답하고 싶은지 정해야 합니다. 결제 실패를 추적하고 싶은지, 로그인 오류를 분석하고 싶은지, 배치 작업 지연을 확인하고 싶은지, 외부 API 장애를 분리하고 싶은지에 따라 필요한 필드가 달라집니다.

운영 질문 필요한 로그 정보 부족하면 생기는 문제
어떤 요청이 실패했나요? 요청 식별자, 경로, 상태 코드, 오류 단계 실패한 흐름을 재구성하기 어렵습니다.
언제부터 문제가 시작됐나요? 정확한 시간, 배포 시점, 오류 증가 시점 원인 후보를 좁히기 어렵습니다.
누가 영향을 받았나요? 익명화된 사용자 식별자, 테넌트, 리전 영향 범위를 과소평가하거나 과대평가할 수 있습니다.
외부 서비스 문제인가요? 외부 호출 이름, 응답 코드, 소요 시간, 재시도 여부 내부 문제와 외부 문제를 구분하기 어렵습니다.
다시 실행해도 되나요? 작업 식별자, 처리 상태, 중복 실행 여부 같은 작업을 두 번 처리할 위험이 생깁니다.

로그를 작성할 때 “나중에 누군가 보겠지”라고 생각하면 안 됩니다. 그 누군가는 대개 미래의 나입니다. 그리고 미래의 나는 장애 알림을 받고 잠이 덜 깬 상태일 수 있습니다. 미래의 나에게 친절하려면 지금의 로그가 구체적이어야 합니다.

로그 수준을 정하지 않으면 모두가 중요해집니다

로그에는 수준이 필요합니다. 보통 디버그, 정보, 경고, 오류 같은 수준을 사용합니다. 문제는 모든 로그가 오류처럼 보이거나, 모든 로그가 정보처럼 묻히는 경우입니다. 그러면 어떤 로그를 봐야 할지 모릅니다. 모든 것이 중요하면 아무것도 중요하지 않은 상태가 됩니다.

정보 로그는 정상 흐름을 이해하기 위한 기록입니다. 경고 로그는 지금 당장 장애는 아니지만 확인이 필요한 신호입니다. 오류 로그는 요청 실패, 작업 실패, 데이터 손상 가능성처럼 대응이 필요한 상황을 나타내야 합니다. 디버그 로그는 개발과 임시 분석에 도움을 주되, 운영 환경에서는 수집 범위와 보관 기간을 조심해야 합니다.

  • 정보 로그는 정상적인 주요 이벤트에 사용합니다.
  • 경고 로그는 반복되면 문제가 될 수 있는 상태에 사용합니다.
  • 오류 로그는 실제 실패나 사용자 영향이 있는 상황에 사용합니다.
  • 디버그 로그는 임시 분석이나 개발 환경 중심으로 제한합니다.
  • 치명적 오류는 즉시 알림과 대응 절차로 연결합니다.

로그 수준을 정리하면 알림 품질도 좋아집니다. 경고와 오류의 기준이 모호하면 알림이 너무 많이 울리거나, 정작 중요한 알림을 놓칩니다. 알림이 너무 자주 울리면 사람은 알림을 무시하게 됩니다. 그러면 시스템은 열심히 외치고 있는데 사람은 조용히 무음 모드로 들어갑니다. 매우 인간적인 방어기제이지만 운영에는 좋지 않습니다.

대시보드는 감상용이 아니라 의사결정용이어야 합니다

대시보드는 멋있을수록 뭔가 잘하고 있는 느낌을 줍니다. 그래프가 많고, 색깔이 다양하고, 숫자가 실시간으로 움직이면 운영실 분위기가 살아납니다. 하지만 대시보드의 목적은 분위기가 아니라 판단입니다. 지금 정상인가요? 문제가 있다면 어디인가요? 사용자 영향이 있나요? 최근 배포와 관련이 있나요? 다음 행동은 무엇인가요? 이 질문에 답하지 못하면 대시보드는 감상용 화면에 가까워집니다.

좋은 대시보드는 역할별로 나뉩니다. 서비스 전체 상태를 보는 대시보드, 특정 기능을 보는 대시보드, 데이터베이스와 인프라를 보는 대시보드, 배포 후 확인용 대시보드가 다를 수 있습니다. 모든 그래프를 한 화면에 넣으면 아무것도 읽히지 않습니다. 대시보드는 벽지가 아니라 지도여야 합니다.

대시보드 종류 주요 지표 목적
서비스 상태 요청 수, 오류율, 응답 시간, 성공률 사용자 영향 여부를 빠르게 확인합니다.
배포 확인 배포 시점, 오류 변화, 성능 변화 새 버전이 문제를 만들었는지 봅니다.
데이터베이스 연결 수, 느린 쿼리, 잠금, 처리량 저장소 병목을 확인합니다.
비동기 작업 큐 길이, 처리 지연, 실패율, 재시도 수 백그라운드 작업의 밀림을 확인합니다.
비용과 사용량 로그 수집량, 저장량, 호출량, 데이터 전송량 관측 도구 자체의 비용을 관리합니다.

대시보드가 너무 많으면 대시보드 목록을 찾는 데 시간이 걸립니다. 이쯤 되면 관측 가능성의 대상이 서비스가 아니라 대시보드 관리 체계가 됩니다. 그래서 대시보드는 적을수록 좋다는 뜻이 아니라, 목적이 분명해야 한다는 뜻입니다.

로그만으로는 부족합니다

로그는 중요하지만 관측 가능성의 전부는 아닙니다. 로그는 사건의 맥락을 보여 주는 데 강합니다. 지표는 전체 추세와 상태 변화를 빠르게 보여 줍니다. 분산 추적은 요청이 여러 서비스와 시스템을 지나가는 흐름을 보여 줍니다. 이 세 가지가 연결되어야 운영자가 빠르게 판단할 수 있습니다.

예를 들어 사용자가 결제 실패를 겪었다고 가정해 보겠습니다. 지표는 결제 실패율이 갑자기 증가했음을 보여 줍니다. 추적은 요청이 결제 서비스에서 외부 승인 API를 호출한 뒤 지연되고 있음을 보여 줍니다. 로그는 특정 응답 코드와 재시도 실패 사유를 보여 줍니다. 이렇게 연결되면 원인을 좁힐 수 있습니다. 반대로 로그만 있으면 검색부터 시작해야 하고, 지표만 있으면 원인을 모르며, 추적만 있으면 세부 실패 사유가 부족할 수 있습니다.

관측 가능성은 도구 묶음이 아니라 질문의 연결입니다. “무슨 일이 일어났나?”는 지표가 잘 답합니다. “어디서 느려졌나?”는 추적이 잘 답합니다. “왜 실패했나?”는 로그가 잘 답합니다. 이 세 질문이 이어져야 장애 대응 시간이 줄어듭니다.

읽히는 로그를 만드는 실무 원칙

로그를 실제로 읽히게 만들려면 몇 가지 원칙이 필요합니다. 가장 먼저 구조화된 로그를 사용하는 것이 좋습니다. 자유로운 문장형 로그도 사람이 읽기에는 편할 수 있지만, 검색과 집계에는 구조화된 필드가 훨씬 유리합니다. 서비스 이름, 요청 식별자, 사용자 식별자, 상태 코드, 오류 코드, 처리 시간, 관련 리소스 같은 필드를 일관되게 남겨야 합니다.

두 번째는 민감한 정보를 남기지 않는 것입니다. 비밀번호, 토큰, API 키, 주민등록번호, 카드 정보, 원문 개인정보는 로그에 남기면 안 됩니다. 디버깅이 편해 보인다고 요청 전체를 출력하는 습관은 위험합니다. 운영 로그는 문제 해결 도구이면서 동시에 보안 관리 대상입니다.

세 번째는 로그를 대응 문서와 연결하는 것입니다. 특정 오류 코드가 나오면 어떤 문서를 봐야 하는지, 어떤 대시보드를 확인해야 하는지, 재시도해도 되는지, 누구에게 알려야 하는지 정리해야 합니다. 로그가 행동으로 이어질 때 비로소 가치가 생깁니다.

  1. 서비스별 로그 필드 표준을 정합니다.
  2. 요청 식별자를 모든 서비스에 전달합니다.
  3. 민감한 정보는 마스킹하거나 남기지 않습니다.
  4. 오류 코드와 실패 사유를 사람이 이해할 수 있게 정리합니다.
  5. 중요 로그는 알림과 대시보드에 연결합니다.
  6. 장애 대응 문서에 로그 검색 예시를 포함합니다.
  7. 주기적으로 실제 장애 사례로 로그 품질을 점검합니다.

특히 마지막 항목이 중요합니다. 로그 품질은 회의실에서만 판단하기 어렵습니다. 실제 장애나 실제 문의를 기준으로 “이 로그가 도움이 되었는가?”를 물어야 합니다. 도움이 되지 않았다면 로그를 더 늘릴지, 줄일지, 구조를 바꿀지 결정해야 합니다. 관측 가능성은 한 번 구축하고 끝나는 장식이 아니라 운영 습관입니다.

조직 문화가 관측 가능성을 결정합니다

관측 가능성은 기술 문제처럼 보이지만 조직 문화와 깊게 연결되어 있습니다. 장애가 나면 원인을 찾기보다 책임자를 찾는 문화에서는 좋은 로그가 자라기 어렵습니다. 사람들은 방어적인 로그를 남기거나, 위험한 정보를 숨기거나, 문제를 조용히 넘기려 할 수 있습니다. 반대로 원인을 함께 찾고 시스템을 개선하는 문화에서는 로그와 대시보드가 학습 도구가 됩니다.

좋은 조직은 장애 후에 이런 질문을 합니다. 어떤 신호를 더 빨리 봤어야 했나요? 어떤 로그가 부족했나요? 어떤 알림이 너무 늦었나요? 대응 문서에서 빠진 내용은 무엇인가요? 같은 문제가 다시 생기면 더 빨리 알 수 있나요? 이 질문들은 사람을 탓하기보다 시스템을 개선합니다.

로그를 읽는 사람에게 보상도 필요합니다. 장애 후 원인 분석을 꼼꼼히 하고, 대시보드를 개선하고, 알림 품질을 높이는 일은 눈에 잘 띄지 않을 수 있습니다. 하지만 이런 일이 쌓여야 서비스가 안정됩니다. 버튼 하나를 새로 만드는 일만큼, 문제를 빨리 발견하게 만드는 일도 중요합니다.

자주 묻는 질문

로그는 많이 남길수록 좋은가요?

그렇지 않습니다. 필요한 정보를 찾을 수 있어야 좋은 로그입니다. 너무 많은 로그는 검색 비용과 저장 비용을 늘리고, 중요한 신호를 묻히게 만들 수 있습니다. 양보다 구조와 목적이 중요합니다.

관측 가능성을 시작할 때 가장 먼저 해야 할 일은 무엇인가요?

가장 중요한 사용자 흐름 하나를 정하고, 그 흐름에서 성공률, 오류율, 응답 시간, 요청 식별자, 주요 실패 로그를 연결해 보는 것이 좋습니다. 처음부터 모든 시스템을 완벽하게 보려 하기보다, 실제 비즈니스 영향이 큰 흐름부터 시작하세요.

로그와 알림은 어떻게 연결해야 하나요?

모든 오류 로그를 알림으로 보내면 금방 무시됩니다. 사용자 영향이 있거나 반복되거나, 복구 조치가 필요한 로그만 알림과 연결하는 것이 좋습니다. 알림에는 원인 후보, 확인할 대시보드, 대응 문서 링크가 함께 있어야 합니다.

개발팀과 운영팀 중 누가 로그를 책임져야 하나요?

둘 다 책임이 있습니다. 개발팀은 의미 있는 로그를 남기고, 운영팀은 그 로그가 장애 대응에 실제로 도움이 되는지 피드백해야 합니다. 중요한 것은 소유권을 나누되, 기준은 함께 정하는 것입니다.

마무리

로그를 남기는 회사는 많습니다. 하지만 로그를 읽고, 해석하고, 행동으로 연결하는 회사는 그보다 적습니다. 관측 가능성은 도구를 설치하는 순간 완성되지 않습니다. 어떤 질문에 답할 것인지, 어떤 신호를 중요하게 볼 것인지, 누가 읽고 어떤 조치를 할 것인지 정해야 합니다.

로그는 시스템이 남긴 말입니다. 그런데 아무도 읽지 않으면 그 말은 운영 개선으로 이어지지 않습니다. 더 많은 로그를 남기기 전에, 지금 있는 로그가 장애 상황에서 어떤 질문에 답하는지 확인해 보세요. 필요한 정보가 없으면 추가하고, 불필요한 소음은 줄이고, 중요한 신호는 알림과 대시보드에 연결해야 합니다.

좋은 관측 가능성은 슬픈 기록 보관소가 아니라 빠른 이해의 도구입니다. 장애가 났을 때 모두가 검색창 앞에서 조용해지는 대신, 어디를 보고 무엇을 확인해야 하는지 아는 상태가 되어야 합니다. 그때 로그는 비로소 읽히기 시작합니다. 그리고 읽히는 로그는 회사의 운영 실력을 조용히, 하지만 꽤 든든하게 키워 줍니다.