낙서장이자 오답 노트이자 컨닝 페이퍼

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

NestJS

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

NangIn 2025. 4. 5. 11:07

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

 

강의 내용 정리                                                                                                                   

 

Module 개념 공부 및 CLI 사용해서 생성해보기

 

모듈(@Module) 구성 요소

  • imports:
    • 다른 모듈을 현재 모듈로 불러올 때 사용
    • 예: UserModule, AuthModule 등을 import
  • controllers:
    • 이 모듈에서 사용하는 컨트롤러들 등록
  • providers:
    • NestJS의 IoC 컨테이너가 관리할 서비스 등록
    • @Injectable()이 붙은 클래스만 등록 가능
  • exports:
    • 현재 모듈에서 외부 모듈로 노출할 provider 지정
    • 다른 모듈에서 imports만 해도 해당 provider 사용 가능

 

모듈이 필요한 이유

  • 영화, 사용자 등 도메인 단위로 책임을 분리
  • 관련된 컨트롤러, 서비스, 모델들을 하나의 모듈로 묶기
  • 하나의 컨트롤러에서 여러 도메인을 다루면 유지보수성 저하
    • → 도메인마다 별도 모듈 생성 권장

 

CLI로 모듈/리소스 자동 생성

  • nest g resource
    • resource는 REST API + CRUD 엔드포인트 자동 생성
    • 입력 단계:
      1. 리소스 이름 (movie)
      2. API 타입 선택 (REST, GraphQL, Microservice, WebSocket 등)
      3. CRUD 엔드포인트 생성 여부 (Y/n)
  • 생성되는 폴더 및 파일
    • movie.controller.ts
    • movie.service.ts
    • movie.module.ts
    • dto/ (데이터 전송 객체, e.g., CreateMovieDto)
    • entities/ (데이터 구조 정의, e.g., Movie 엔티티)

 

자동 생성되는 컨트롤러 예시

// movie.controller.ts
@Post()
create(@Body() createMovieDto: CreateMovieDto) { ... }

@Get()
findAll() { ... }

@Get(':id')
findOne(@Param('id') id: string) { ... }

@Patch(':id')
update(@Param('id') id: string, @Body() updateMovieDto: UpdateMovieDto) { ... }

@Delete(':id')
remove(@Param('id') id: string) { ... }

 

자동 등록 확인

  • app.module.ts에 생성한 MovieModule이 자동으로 imports에 등록됨
  • 모듈 간 의존성 없이 구조적으로 연결 완료

 

dto, entities의 역할

  • dto/:
    • 요청 바디의 스키마 정의
    • 컨트롤러에서 바디 전체를 객체 형태로 받기 위해 사용
  • entities/:
    • 실제 데이터 구조나 DB 모델을 정의
    • 일반적으로 서비스/DB 작업 시 사용

 

Movie 모듈로 엔드포인트 이전하기

 

비즈니스 로직 이전

  • 기존 AppService의 메서드를 모두 MovieService로 이전 (get, post, patch, delete 등)

 

컨트롤러 이전

  • 기존 AppController의 모든 엔드포인트를 MovieController로 이동

 

모듈 정리

  • AppService, AppController는 삭제
  • AppModule은 MovieModule만 import → 중앙 통합 역할만 담당

 

테스트 결과

  • 모든 API (GET, POST, PATCH, DELETE) 정상 동작 확인

 

구조적 장점

  • 도메인 단위로 기능이 나뉘어 유지보수성 향상
  • CLI (nest g resource)로 모듈/컨트롤러/서비스 자동 생성 가능

 

Debugger가 왜 필요한가

 

디버깅이란?

  • 코드에서 발생한 예상치 못한 오류(버그) 를 찾아내는 과정

 

console.log() 방식의 한계

  • 로그를 여러 군데 심고, 코드 수정 후 매번 서버 재시작 필요
  • 프로젝트가 복잡해질수록 비효율시간 낭비 심화

 

Debugger의 필요성

  • 브레이크포인트를 이용해 코드를 한 줄씩 실행하며 확인
  • 변수 값, 흐름을 실시간으로 추적 가능
  • 복잡한 로직을 더 정확하고 빠르게 디버깅 가능

 

결론

  • 단순 로그보다 훨씬 효과적이고 전문적인 문제 해결 방식 제공
  • 디버거는 초보 개발자를 ‘좋은 개발자’로 성장시킬 핵심 도구

 

Debugger 세팅하고 사용해보기

 

디버거 설정

  • VSCode 왼쪽 재생(실행) 아이콘 클릭
  • launch.json 생성 → Node.js 선택
  • .vscode/launch.json 내부 내용 전부 삭제 후, 다음 설정 추가:
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug Nest Framework",
      "runtimeExecutable": "pnpm",
      "runtimeArgs": ["run", "start:debug", "--", "--inspect-brk"],
      "autoAttachChildProcesses": true,
      "restart": true,
      "sourceMaps": true,
      "stopOnEntry": false,
      "console": "integratedTerminal"
    }
  ]
}

  • package.json에 "start:debug" 스크립트가 있어야 함:
"scripts": {
  "start:debug": "nest start --debug --watch"
}

 

실행 전 서버 종료

  • 기존 서버가 포트(3000번)를 점유하고 있을 수 있으므로 Ctrl+C로 종료

 

디버그 실행

  • 실행 메뉴에서 Debug Nest Framework 선택 후 ▶️ 실행 버튼 클릭
  • 디버그 서버가 자동으로 Nest 프로젝트 실행

 

브레이크포인트 사용

  • 확인하고 싶은 코드 줄 왼쪽 번호 클릭 → 🔴 브레이크포인트 설정
  • 요청이 해당 라인에 도달하면 자동으로 일시정지됨

 

디버그 중 가능한 동작

  • Variables 탭에서 현재 변수 상태 실시간 확인
  • Call Stack: 현재 실행 흐름 트레이스 가능
  • Step Over (F10): 다음 줄로 한 줄씩 실행
  • Step Into (F11): 함수 내부로 진입해 세부 로직 확인
  • Continue (F5): 다음 브레이크포인트까지 실행 계속

 

디버거의 장점

  • 콘솔 로그 없이 한 번의 요청으로 흐름 추적 가능
  • 실시간으로 변수 값 추적 → 빠르고 정확한 디버깅
  • NestJS 같은 구조적인 프레임워크에 특히 유용

 

학습 후기                                                                                                                                       

NestJS의 모듈 시스템을 학습하면서 느낀 가장 큰 인사이트는 “복잡한 시스템일수록 구조가 중요하다”는 점이었습니다. NestJS는 모든 기능을 도메인 단위로 모듈화할 수 있도록 설계되어 있는데, 이 덕분에 로직이 분산되지 않고 자연스럽게 관심사 분리가 가능했습니다. 특히 nest g resource CLI 명령어를 통해 controller, service, module 파일을 자동 생성할 수 있다는 점은 실무에서도 빠른 초기 구성과 협업 효율에 큰 도움이 될 거라 느꼈습니다.

 

강의를 통해 배운 또 하나의 중요한 개념은 모듈 내부 구성의 역할 구분입니다. imports, controllers, providers, exports 각각의 의미를 명확히 이해하니, Nest의 IoC 컨테이너 구조와 DI 흐름도 함께 자연스럽게 정리됐습니다. 단순히 Service를 만든다고 끝이 아니라, 이 Service를 providers로 등록하고 필요한 곳에 DI로 주입하여 쓰는 구조가 매우 직관적이면서도 강력하다고 느꼈습니다.

 

추가로 VSCode 디버거 세팅은 정말 실무적으로도 큰 수확이었습니다. 이전까지는 console.log만으로 문제를 추적하곤 했는데, 복잡한 코드에서는 그마저도 효율이 급격히 떨어졌습니다. 하지만 디버거를 활용하면 요청 한 번으로 흐름을 따라가며 변수 상태를 실시간으로 확인할 수 있어, 에러 원인을 빠르고 정확하게 파악할 수 있었습니다. 브레이크포인트 설정, Step Over, Step Into 등 디버깅 방식은 개발자로서의 생산성과 정확도를 모두 끌어올려주는 중요한 기술임을 체감했습니다.

 

이 강의를 통해 단순히 NestJS의 문법을 배운 것이 아니라, 구조적으로 코드를 관리하고 문제를 해결하는 개발자적인 사고 방식을 익혔다고 생각합니다. 앞으로 어떤 프로젝트를 진행하더라도, 모듈화와 디버깅은 가장 중요한 기반 기술이 될 것입니다.

 

학습 인증샷       

수강 인증 사진

                         

학습 인증샷

                                                                                                 

공부 시작 시간
공부 종료 시간

https://abit.ly/lisbva

 

Abit.ly 다운받기

 

abit.ly