로그 관리

Daniel_Yang·2025년 1월 31일
0

로그를 남긴다는 것은 모니터링과 바로 직결되는 이야기이기 때문에 무엇을 남길지는 직접 생각해야한다.
"이 로그가 없다면 문제 발생 시 원인을 파악할 수 있는가?"를 기준 삼기

고려 사항

보안, 민감 정보

  • 반드시 로그로 남겨야 하는가?
    • 시스템 분석이나 트러블슈팅에 필요한 정보인가?
    • 법적 보존 의무가 있는 정보인가?
    • 불필요한 정보까지 무조건 남기면 오히려 보안 위험이나 디버깅 방해 요소가 될 수 있다.
  • 로그 마스킹 정책
    • 민감한 정보는 평문 저장 금지
  • 대상
    • 고객 정보: 개인정보보호법 등 법적 이슈 → 반드시 마스킹
    • 애플리케이션 로직: 파라미터, 조건문 분기 확인용
    • SQL 쿼리: 성능 튜닝 또는 디버깅 목적으로 기록 가능하지만, 바인딩 값까지 노출할 경우 주의
  • 중요성
    • 단순 error 레벨로 남겨선 안 되는 실시간 대응 필요한 이벤트는 별도로 알림을 보낼 수 있다. (ex) Slack, 이메일, PagerDuty 등과 연동)

가독성, 디버깅

  • 로그 메시지는 누가 보더라도 빠르게 상황을 파악할 수 있도록 작성해야 한다.
  • 로그 Convention => 팀원들과 상의
    • 분쟁 point
      • 사용자 식별자
      • RequestBody
      • StackTrace
      • Info level 몰아주기
      • 로그 필드 표준화
        • pros: JSON 형식은 키-값으로 구조화 => 로그 집계 시스템 연동 유리
        • cons: 가독성, 속도 저하

추천 방식

로그 대상포맷목적
파일 로그 (logs/app.log)사람이 보기 쉬운 형식CLI, 실시간 tail, 긴급 디버깅
시스템 로그 (stdout or logs/structured.json)JSON수집 시스템 연동, 검색, 대시보드

기계가 처리할 로그는 JSON, 사람이 읽을 로그는 단순 텍스트로 구분하는 것이 실무에서 가장 안정적인 전략


로그 파일 Size

  • 불필요한 로그를 제외
  • 로그 설정
    • 로그가 일정 크기를 넘기면 새 파일로 교체 ex) 100MB 단위
    • 일정 기간 이상된 로그는 자동 삭제 ex) 7~30일

대상

  • request, response
  • error, exception
  • 사용자 활동 로그(보안 감사 추적. 주로 법적)
  • 시스템 상태 로그
  • 보안 로그
  • Debug(local, dev 환경)

흐름

  • Request가 들어오는 Flow는 Filter -> DispatcherServlet -> HandlerInterceptor -> controller 순으로 들어온다.
  • Controller로 넘어가기 전에 Interceptor 같은데서 로그?

로그 레벨

Debug

  • 상세한 내부 흐름 확인 (운영 환경에는 출력 X)

설정

스프링부트 기준

logback(로깅 프레임워크)

  • Appender 분리: 콘솔 vs. 파일 vs. JSON
  • RollingPolicy: 파일 사이즈/날짜 기반 로테이션
  • Pattern: 로그 포맷 구성 (환경별 다르게)

MDC

  • 요청 단위의 traceId, userId 등을 로그마다 자동으로 남기기 위한 ThreadLocal 기반 컨텍스트
    ex) Filter, Interceptor, AOP에서 활용

Log Filter / Interceptor

  • 모든 HTTP 요청/응답/Exception 등에 대한 로그 필터링 및 MDC 설정

로그 마스킹 / 필터링

  • AOP + Regex, 또는 logback 필터에서 직접 처리
    => 개인정보, 패스워드, 토큰 등이 로그에 노출되지 않도록 처리

그 외

  • tomcat war 배포 시
    • 톰캣은 기본적으로 catalina.out에 System.out/err 로그를 저장
    • Spring Boot를 WAR로 배포하면 톰캣의 로깅과 Spring의 로깅이 혼합될 수 있음 → 경계 명확히
  • Log Format 및 구조화 (JSON 등)
  • 중앙 Logging 시스템 연동

도구

  • ELK Stack (Elasticsearch + Logstash + Kibana)
  • Prometheus + Grafana + Loki
  • CloudWatch / Stackdriver / Datadog / Sentry 등 외부 SaaS

기타

  • CheckedException(예외 처리 강제) vs UncheckedException(강제 x)
    • UnCheckException 추천. Checked는 throws 지옥...

Reference

0개의 댓글