낙서장이자 오답 노트이자 컨닝 페이퍼
패스트캠퍼스 환급챌린지 5일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기 본문
패스트캠퍼스 환급챌린지 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 엔드포인트 자동 생성
- 입력 단계:
- 리소스 이름 (movie)
- API 타입 선택 (REST, GraphQL, Microservice, WebSocket 등)
- 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