로깅을 위한 Express, Morgan 및 Winston 사용법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Node.js/Express 앱 개발자(중간 이상 수준)
핵심 요약
- Morgan은 HTTP 요청 로깅에 최적화된 경량 라이브러리로, 개발 중 요청 추적에 사용 (예:
npm install morgan
) - Winston은 애플리케이션 레벨 로깅을 위한 강력한 도구로, 파일/콘솔/외부 서비스로 로그 전송 가능 (예:
npm install winston
) - Morgan과 Winston을 결합하여 HTTP 요청과 애플리케이션 이벤트를 동시에 모니터링 가능
섹션별 세부 요약
1. Morgan 설치 및 사용
npm install morgan
으로 설치app.use(morgan('dev'))
로 개발용 간단한 로깅 설정 (예:GET / 200 8.104 ms - 11
)combined
,short
등 사전 정의된 포맷 또는 커스텀 포맷 사용 가능 (예::method :url :status :response-time ms
)
2. Winston 설치 및 구성
npm install winston
으로 설치level
,format
,transports
옵션으로 로그 레벨/포맷/출력 경로 설정 (예:console
,error.log
,combined.log
)logger.info()
및logger.error()
로 로그 기록 (예:/health
라우트에서logger.info('Health check route hit')
)
3. Morgan과 Winston 연동
stream
객체를 통해 Morgan 로그를 Winston으로 전달 (예:const stream = { write: (message) => logger.info(message.trim()) }
)app.use(morgan('combined', { stream }))
로 HTTP 요청 로그를 Winston에 통합
4. 툴 비교 및 사용 권장사항
- Morgan → 개발 중 HTTP 요청 추적 (예:
dev
preset) - Winston → 프로덕션에서 오류 추적 및 파일 기록 (예:
error.log
,combined.log
) - 결합 사용 → 전반적인 애플리케이션 모니터링 (예: 요청/오류/커스텀 이벤트 동시 로깅)
결론
- Morgan은 개발 단계에서 HTTP 요청 로깅에, Winston은 프로덕션에서 오류 및 이벤트 추적에 적합
- 두 도구를 결합하여 HTTP 요청과 애플리케이션 레벨 로그를 통합 관리하고, 로그 포맷을 JSON 또는 커스텀 형식으로 설정 가능
npm install morgan winston
으로 설치 후morgan('combined', { stream })
과winston.createLogger()
를 통해 실무에 적용