설치을 공부하면서 이해한 흐름을 정리한 글입니다.
개인 메모를 그대로 옮기기보다, 코드와 주석을 따라가며 어떤 개념을 이해했는지에 초점을 맞췄습니다.
이번에 이해하려는 것
먼저 원문에 남긴 코드와 주석을 기준으로, 각 줄이 어떤 역할을 하는지 정리합니다.
기본 확인
node -v
npm -v
yarn -v
nest --version
Yarn 설치
npm install -g yarn
설치 확인:
yarn -v
NestJS CLI 설치
npm install -g @nestjs/cli
설치 확인:
nest --version
프로젝트 생성
nest new project-name
예시:
nest new nest-basic
패키지 매니저 선택 화면에서 yarn 선택.
프로젝트 이동:
cd nest-basic
실행
yarn start
yarn start:dev
yarn start:debug
yarn start:prod
용도:
yarn start: 일반 실행yarn start:dev: 개발 모드, 파일 변경 감지yarn start:debug: 디버그 모드yarn start:prod: 빌드된 결과 실행
기본 접속:
http://localhost:3000
확인:
curl http://localhost:3000
빌드
yarn build
빌드 결과:
dist/
빌드 후 실행:
yarn start:prod
테스트
yarn test
yarn test:watch
yarn test:cov
yarn test:e2e
용도:
yarn test: 단위 테스트 실행yarn test:watch: 테스트 watch 모드yarn test:cov: 테스트 커버리지 확인yarn test:e2e: e2e 테스트 실행
생성 명령어 기본형
nest generate <schematic> <name>
nest g <schematic> <name>
예시:
nest generate controller users
nest g controller users
generate는 g로 줄여 쓸 수 있다.
Module 생성
nest g module users
생성 파일:
src/users/users.module.ts
Controller 생성
nest g controller users
생성 파일:
src/users/users.controller.ts
src/users/users.controller.spec.ts
테스트 파일 없이 생성:
nest g controller users --no-spec
Service 생성
nest g service users
생성 파일:
src/users/users.service.ts
src/users/users.service.spec.ts
테스트 파일 없이 생성:
nest g service users --no-spec
Resource 생성
resource는 CRUD 기본 구조를 한 번에 생성한다.
nest g resource users
생성 과정에서 선택하는 항목:
What transport layer do you use?
> REST API
GraphQL (code first)
GraphQL (schema first)
Microservice
WebSockets
Would you like to generate CRUD entry points?
> Yes
No
REST API + CRUD 선택 시 생성되는 기본 구조:
src/users/users.module.ts
src/users/users.controller.ts
src/users/users.controller.spec.ts
src/users/users.service.ts
src/users/users.service.spec.ts
src/users/dto/create-user.dto.ts
src/users/dto/update-user.dto.ts
src/users/entities/user.entity.ts
app.module.ts에도 자동 등록된다.
테스트 파일 없이 생성:
nest g resource users --no-spec
Provider 생성
nest g provider users
일반적으로 직접 많이 쓰기보다 service를 더 자주 사용한다.
Pipe 생성
nest g pipe common/pipes/validation
생성 예:
src/common/pipes/validation.pipe.ts
Guard 생성
nest g guard auth
생성 예:
src/auth/auth.guard.ts
Interceptor 생성
nest g interceptor logging
생성 예:
src/logging/logging.interceptor.ts
Filter 생성
nest g filter http-exception
생성 예:
src/http-exception/http-exception.filter.ts
Middleware 생성
nest g middleware logger
생성 예:
src/logger/logger.middleware.ts
Gateway 생성
WebSocket Gateway 생성:
nest g gateway events
Resolver 생성
GraphQL Resolver 생성:
nest g resolver users
DTO 생성
Nest CLI에 DTO 전용 schematic을 따로 쓰기보다 파일을 직접 만들거나 resource 생성 결과를 사용한다.
src/users/dto/create-user.dto.ts
src/users/dto/update-user.dto.ts
Entity 생성
Entity도 보통 직접 만들거나 resource 생성 결과를 사용한다.
src/users/entities/user.entity.ts
생성 옵션
--no-spec
테스트 파일을 생성하지 않음.
nest g controller users --no-spec
nest g service users --no-spec
nest g resource users --no-spec
--flat
폴더를 만들지 않고 현재 경로에 파일 생성.
nest g controller users --flat
--dry-run
실제로 파일을 만들지 않고 생성 결과만 미리 확인.
nest g resource users --dry-run
--project
모노레포나 여러 앱이 있는 workspace에서 대상 프로젝트 지정.
nest g module users --project api
자주 쓰는 조합
기능 단위로 직접 생성
nest g module users
nest g controller users
nest g service users
테스트 파일 없이:
nest g module users
nest g controller users --no-spec
nest g service users --no-spec
CRUD 기본 구조 생성
nest g resource users
테스트 파일 없이:
nest g resource users --no-spec
패키지 설치
일반 패키지:
yarn add package-name
개발 의존성:
yarn add -D package-name
예시:
yarn add @nestjs/config
yarn add class-validator class-transformer
yarn add -D @types/node
환경 설정 관련 패키지
yarn add @nestjs/config
Validation 관련 패키지
yarn add class-validator class-transformer
TypeORM 관련 패키지
yarn add @nestjs/typeorm typeorm
DB 드라이버는 사용하는 DB에 맞춰 추가 설치.
PostgreSQL:
yarn add pg
MySQL:
yarn add mysql2
SQLite:
yarn add sqlite3
Prisma 관련 패키지
yarn add prisma @prisma/client
yarn prisma init
Prisma 개발 의존성으로 설치하는 방식:
yarn add -D prisma
yarn add @prisma/client
명령어 요약
# 설치
npm install -g yarn
npm install -g @nestjs/cli
# 프로젝트
nest new nest-basic
cd nest-basic
# 실행
yarn start:dev
# 생성
nest g module users
nest g controller users
nest g service users
nest g resource users
# 테스트 파일 없이 생성
nest g controller users --no-spec
nest g service users --no-spec
nest g resource users --no-spec
# 확인
curl http://localhost:3000
관련 노트
- [[📗 NestJS를 사용한 기초적인 동작 구현]]
마무리
정리하면, 원문 코드에서 확인한 개념을 작은 단위로 나누어 보면 전체 흐름을 훨씬 쉽게 이해할 수 있습니다.