본문 바로가기
패스트캠퍼스 환급챌린지

패스트캠퍼스 환급챌린지 52일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기

by 논문보관함 2025. 4. 25.

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/4hTSJNB

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

0425 금

학습 내용 정리

Custom Logger 제작하기

default.logger.ts

import { ConsoleLogger, Injectable } from "@nestjs/common";

@Injectable()
export class DefaultLogger extends ConsoleLogger{
    warn(message: unknown, ...rest: unknown[]): void {
        console.log('---- WARN LOG ----')
        super.warn(message, ...rest);

    }

    error(message: unknown, ...rest: unknown[]): void {
        console.log('---- ERROR LOG ----')
        super.error(message, ...rest);
    }
}

Winston 사용하기

    WinstonModule.forRoot({
      level: 'debug',
      transports: [
        new winston.transports.Console({
          format: winston.format.combine(
            winston.format.colorize({
              all: true,
            }),

            winston.format.timestamp(),
            winston.format.printf(info => `${info.timestamp} [${info.context}] ${info.level} ${info.message}`)
          ),
        }),
        new winston.transports.File({
          dirname: join(process.cwd(), 'logs'),
          filename: 'logs.log',
          format: winston.format.combine(
            // winston.format.colorize({
            //   all: true,
            // }),

            winston.format.timestamp(),
            winston.format.printf(info => `${info.timestamp} [${info.context}] ${info.level} ${info.message}`)
          ),
        })
      ]
    }),

수강후기

0425 금요일 수업에서는 NestJS에서의 커스텀 로거(Custom Logger)Winston 로거 통합에 대해 실습하고 학습하는 시간을 가졌습니다. 먼저 ConsoleLogger를 상속하여 기본 로거의 기능을 확장한 DefaultLogger를 만들어 보았고, 특히 warn과 error 로그를 오버라이딩하여 로그가 출력될 때 커스텀 메시지를 함께 보여주는 방식으로 로그 출력을 커스터마이징할 수 있다는 점을 배웠습니다. 이 과정을 통해 NestJS 로깅 시스템의 유연성과 확장성을 실제로 체감할 수 있었습니다.

이어지는 시간에는 실무에서 많이 활용되는 Winston 로거를 NestJS에 통합하는 방법을 배웠습니다. WinstonModule.forRoot()를 통해 로그의 최소 출력 레벨을 debug로 설정하고, 두 개의 주요 트랜스포트(출력 경로)를 구성하였습니다. 하나는 콘솔에 컬러로 로그를 출력하도록 설정했고, 다른 하나는 logs 폴더에 logs.log 파일로 로그를 저장하는 설정이었습니다. 특히 winston.format.combine, colorize, timestamp, printf 등 다양한 포맷터 조합을 통해 로그의 출력 포맷을 자유롭게 제어할 수 있다는 점이 흥미로웠습니다.

이 수업을 통해 NestJS 로깅 시스템을 기본 제공되는 기능으로만 사용하는 것이 아닌, 프로젝트 상황에 맞게 직접 확장하거나 외부 라이브러리를 연동하여 고도화할 수 있다는 점을 알게 되었습니다. 실제 운영 환경에서 로그의 중요성은 아무리 강조해도 지나치지 않기 때문에, 오늘 배운 내용은 향후 프로젝트에 큰 도움이 될 것 같습니다. 특히 File 트랜스포트를 통해 로그를 파일로 저장해두면, 디버깅이나 장애 이력 추적에도 매우 유용하다는 점을 실감했습니다.

이번 수업은 NestJS의 로깅 시스템을 한 단계 더 깊이 이해할 수 있는 시간이었고, 단순한 출력이 아닌, 운영과 유지보수까지 고려한 로깅 설계의 중요성을 배우는 의미 있는 시간이었습니다.

 

사진

시작/종료
수강클립/결과물