Skip to content

Logging

Seungheon Han edited this page Dec 3, 2024 · 1 revision

로그

로그는 프로그램 개발이나 운영 중 발생하는 문제를 추적하거나, 애플리케이션 상태를 모니터링하기 위한 기록이다. 개발자는 로그를 통해 애플리케이션의 흐름, 상태, 문제점을 파악할 수 있으며, 특히 문제가 발생했을 때 디버깅에 중요한 정보를 제공한다.


로깅

로깅은 로그를 기록하고 관리하는 프로세스이다. 이는 단순히 텍스트를 파일에 기록하는 것뿐만 아니라, 적절한 형식으로 로그를 분류하고, 필요에 따라 분석하거나 저장소에 전송하는 등 다양한 작업을 포함한다.

로깅의 주요 목적은 다음과 같다:

  1. 문제 진단: 오류를 빠르게 찾아내고 해결하기 위해.
  2. 운영 모니터링: 애플리케이션의 상태를 파악하고, 비정상적인 동작을 사전에 탐지.
  3. 보안 및 감사: 데이터 접근이나 변경, 중요한 시스템 이벤트를 기록하여 보안을 강화.
  4. 성능 분석: 애플리케이션 성능 병목 지점을 확인하고 최적화.

로그는 무조건 다 기록하나?

결론적으로 모든 로그를 기록하는 것은 권장되지 않는다. 로그는 필요할 때 빠르게 찾아 문제를 해결해야 하는 도구이기 때문에, 불필요한 로그가 많으면 유용한 로그를 찾는 데 방해가 된다. 또한, 과도한 로깅은 다음과 같은 문제를 야기할 수 있다:

  • 성능 저하: 로그 기록은 I/O 작업이므로, 너무 많은 로그는 애플리케이션의 성능을 저하시킬 수 있다.
  • 저장소 낭비: 모든 로그를 저장하면 디스크 공간을 빠르게 소진할 수 있다.
  • 가독성 저하: 너무 많은 로그는 중요한 정보를 찾기 어렵게 만든다.

따라서 적절한 로깅 전략과 로그 레벨을 설정하여 효율적으로 로그를 관리해야 한다.


적절한 로그 레벨

로그 메시지를 상황에 따라 분류하기 위해 로그 레벨을 사용한다. 각 로그 레벨은 메시지의 중요도와 우선순위를 나타내며, 일반적으로 아래와 같은 기준으로 사용된다:

1. DEBUG

  • 용도: 상세한 디버깅 정보를 기록.
  • 대상: 개발 환경에서 주로 활성화.
  • 예시: 함수 호출, 변수 값, 알고리즘의 상태 변화 등.
  • 사용 예:
DEBUG: Fetching user data for userId=123
DEBUG: Calculated result: total=45, discount=5

2. INFO

  • 용도: 애플리케이션의 정상적인 동작을 기록.
  • 대상: 운영 상태를 추적하고 모니터링할 때 사용.
  • 예시: 시스템 시작/종료, 주요 이벤트, 상태 변화.
  • 사용 예:
INFO: User login successful, userId=123
INFO: Order processed, orderId=789

3. WARN

  • 용도: 주의가 필요한 잠재적인 문제를 기록.
  • 대상: 애플리케이션이 정상 동작은 하지만, 조치가 필요할 수 있는 상황.
  • 예시: 비정상적인 응답 시간, 한계에 근접한 리소스 사용량.
  • 사용 예:
WARN: High memory usage detected: 85%
WARN: API response time exceeded threshold: 1500ms

4. ERROR

  • 용도: 오류가 발생하여 특정 작업이나 기능이 실패한 경우를 기록.
  • 대상: 사용자가 알 수 없는 내부 오류나 예외 발생 시.
  • 예시: 데이터베이스 연결 실패, 파일 저장 실패.
  • 사용 예:
ERROR: Failed to connect to database: timeout exceeded
ERROR: Unable to save file, disk full

5. FATAL

  • 용도: 시스템 전체에 치명적인 영향을 미치는 오류를 기록.
  • 대상: 즉각적인 조치가 필요한 상황에서 사용.
  • 예시: 데이터 손실, 시스템 다운, 중요한 리소스 부족.
  • 사용 예:
FATAL: Critical system resource unavailable, shutting down
FATAL: Data corruption detected, terminating application

적절한 로깅 전략

1. 필요한 정보만 기록

  • 모든 로그를 기록하기보다는, 가장 중요한 정보만 선택적으로 기록한다.
  • 예: 디버깅 중에는 DEBUG 로그를 활성화하고, 운영 중에는 INFO 이상만 기록.

2. 로그 저장 기간 및 크기 관리

  • 로그는 일정 기간(예: 7일, 30일) 후 삭제하거나 압축 저장.
  • 디스크 공간 부족을 방지하기 위해 로그 크기를 제한.

3. 구조화된 로그

  • 로그 데이터를 JSON과 같은 구조화된 형식으로 기록하면 분석 및 검색이 용이.
  • 예:
{
  "level": "INFO",
  "timestamp": "2024-12-03T08:22:49Z",
  "message": "User login successful",
  "userId": 123
}

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally