-
Notifications
You must be signed in to change notification settings - Fork 1
Logging
Seungheon Han edited this page Dec 3, 2024
·
1 revision
로그는 프로그램 개발이나 운영 중 발생하는 문제를 추적하거나, 애플리케이션 상태를 모니터링하기 위한 기록이다. 개발자는 로그를 통해 애플리케이션의 흐름, 상태, 문제점을 파악할 수 있으며, 특히 문제가 발생했을 때 디버깅에 중요한 정보를 제공한다.
로깅은 로그를 기록하고 관리하는 프로세스이다. 이는 단순히 텍스트를 파일에 기록하는 것뿐만 아니라, 적절한 형식으로 로그를 분류하고, 필요에 따라 분석하거나 저장소에 전송하는 등 다양한 작업을 포함한다.
로깅의 주요 목적은 다음과 같다:
- 문제 진단: 오류를 빠르게 찾아내고 해결하기 위해.
- 운영 모니터링: 애플리케이션의 상태를 파악하고, 비정상적인 동작을 사전에 탐지.
- 보안 및 감사: 데이터 접근이나 변경, 중요한 시스템 이벤트를 기록하여 보안을 강화.
- 성능 분석: 애플리케이션 성능 병목 지점을 확인하고 최적화.
결론적으로 모든 로그를 기록하는 것은 권장되지 않는다. 로그는 필요할 때 빠르게 찾아 문제를 해결해야 하는 도구이기 때문에, 불필요한 로그가 많으면 유용한 로그를 찾는 데 방해가 된다. 또한, 과도한 로깅은 다음과 같은 문제를 야기할 수 있다:
- 성능 저하: 로그 기록은 I/O 작업이므로, 너무 많은 로그는 애플리케이션의 성능을 저하시킬 수 있다.
- 저장소 낭비: 모든 로그를 저장하면 디스크 공간을 빠르게 소진할 수 있다.
- 가독성 저하: 너무 많은 로그는 중요한 정보를 찾기 어렵게 만든다.
따라서 적절한 로깅 전략과 로그 레벨을 설정하여 효율적으로 로그를 관리해야 한다.
로그 메시지를 상황에 따라 분류하기 위해 로그 레벨을 사용한다. 각 로그 레벨은 메시지의 중요도와 우선순위를 나타내며, 일반적으로 아래와 같은 기준으로 사용된다:
- 용도: 상세한 디버깅 정보를 기록.
- 대상: 개발 환경에서 주로 활성화.
- 예시: 함수 호출, 변수 값, 알고리즘의 상태 변화 등.
- 사용 예:
DEBUG: Fetching user data for userId=123
DEBUG: Calculated result: total=45, discount=5
- 용도: 애플리케이션의 정상적인 동작을 기록.
- 대상: 운영 상태를 추적하고 모니터링할 때 사용.
- 예시: 시스템 시작/종료, 주요 이벤트, 상태 변화.
- 사용 예:
INFO: User login successful, userId=123
INFO: Order processed, orderId=789
- 용도: 주의가 필요한 잠재적인 문제를 기록.
- 대상: 애플리케이션이 정상 동작은 하지만, 조치가 필요할 수 있는 상황.
- 예시: 비정상적인 응답 시간, 한계에 근접한 리소스 사용량.
- 사용 예:
WARN: High memory usage detected: 85%
WARN: API response time exceeded threshold: 1500ms
- 용도: 오류가 발생하여 특정 작업이나 기능이 실패한 경우를 기록.
- 대상: 사용자가 알 수 없는 내부 오류나 예외 발생 시.
- 예시: 데이터베이스 연결 실패, 파일 저장 실패.
- 사용 예:
ERROR: Failed to connect to database: timeout exceeded
ERROR: Unable to save file, disk full
- 용도: 시스템 전체에 치명적인 영향을 미치는 오류를 기록.
- 대상: 즉각적인 조치가 필요한 상황에서 사용.
- 예시: 데이터 손실, 시스템 다운, 중요한 리소스 부족.
- 사용 예:
FATAL: Critical system resource unavailable, shutting down
FATAL: Data corruption detected, terminating application
- 모든 로그를 기록하기보다는, 가장 중요한 정보만 선택적으로 기록한다.
- 예: 디버깅 중에는 DEBUG 로그를 활성화하고, 운영 중에는 INFO 이상만 기록.
- 로그는 일정 기간(예: 7일, 30일) 후 삭제하거나 압축 저장.
- 디스크 공간 부족을 방지하기 위해 로그 크기를 제한.
- 로그 데이터를 JSON과 같은 구조화된 형식으로 기록하면 분석 및 검색이 용이.
- 예:
{
"level": "INFO",
"timestamp": "2024-12-03T08:22:49Z",
"message": "User login successful",
"userId": 123
}
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios