TIL

Console vs Winston

하얀잔디 2025. 7. 4. 21:08

Node.js에서 로그를 출력할 때 가장 흔하게 접하는 방법은 단연 console.log()일 것이다. 하지만 실무에서는 console만으로는 부족한 경우가 많고, 이럴 때 등장하는 것이 바로 winston 같은 로그 라이브러리다. 이번 글에서는 console과 winston의 차이를 비교하고, 실무에서 왜 winston을 쓰는지 정리해보자.

 

1. 기본 사용법 비교

console

 
console.log("로그 출력"); console.error("에러 출력"); console.warn("경고 출력");

간단하고 직관적이다. Node.js 내장 기능이기 때문에 따로 설치할 필요도 없다.

 


2. winston

 
 
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'error.log', level: 'error' }), ], });
logger.
info('정보 로그입니다');
logger.
error('에러 로그입니다');
 
 

winston은 설정이 좀 복잡하지만, 다양한 옵션을 제공한다.


주요 차이점

출력 대상 표준 출력(stdout)만 콘솔, 파일, 원격 서버 등
로그 레벨 log, error, warn 정도 info, warn, error, debug 등 세분화 가능
포맷팅 불가능 (직접 구현 필요) JSON, timestamp 등 다양한 포맷 지원
로그 분리 불가능 레벨별 파일 분리 가능 (예: error.log)
프로덕션 사용 제한적 추천
로테이션 지원 없음 별도 모듈로 로그 파일 자동 분할/삭제 가능
색상 출력 있음 (콘솔 한정) 있음 (winston.format.colorize)
 

3. 실무에서의 활용

console의 단점

  • 로그가 너무 많아지면 보기 힘들다.
  • 로그 저장이 안 된다. (남기려면 따로 리다이렉션 필요)
  • 로그 레벨을 조절할 수 없어 디버깅 시 불편하다.

winston의 장점

  • 로그를 레벨별로 구분하고, 파일로 저장 가능
  • 프로덕션 환경에서는 에러만 파일로 저장하고, 디버깅은 콘솔로 볼 수 있음
  • 날짜 기반 로그 로테이션 (예: winston-daily-rotate-file)
  • 다양한 포맷과 필터 지원 (ex. JSON, timestamp 추가)

 

 

Node.js에서 console은 빠르고 간편하지만, 실무에서는 winston과 같은 로깅 라이브러리가 거의 필수다.

특히 에러 추적, 서버 상태 모니터링, 로그 저장 및 분석이 필요한 경우라면 winston을 도입하는 것이 훨씬 효율적이다.

'TIL' 카테고리의 다른 글

VI 있어보이게 써보자..  (0) 2025.07.04
모르는 서버 접근 후 프로세스 확인방법  (0) 2025.07.04
JS의 동작원리  (0) 2025.06.29
DB 차이점 정리  (0) 2025.06.29
소켓에서 레디스를 왜 쓸까?  (0) 2025.06.29