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 |