Nest.js란 무엇인가?
- Nest.js: Node.js 프레임워크로 대규모 애플리케이션 개발에 적합합니다.
- Express: Nest.js에 내장되어 있으며, 주로 작은 규모의 애플리케이션에 사용됩니다.
- DI(Dependency Injection): 대규모 애플리케이션에서는 DI를 지원해주는 프레임워크가 필요합니다. Nest.js는 DI를 지원합니다.
Nest.js 설치 방법
1. @nestjs/cli 설치
- Yarn으로 설치: yarn add @nestjs/cli
- NPX로 설치:
npx @nestjs/cli new 프로젝트명
2. 새 프로젝트 생성
@nestjs/cli new 프로젝트명
설치 시 관리자 권한 필요: sudo를 붙여서 실행할 수 있습니다
sudo npx @nestjs/cli new 프로젝트명
3. 설치 후 기본 폴더 구조
Nest.js 설치 후 자동으로 생성되는 파일 구조는 다음과 같습니다:(moduel, controller, service)
초기 폴더구조를 보일러 플레이트라고한다.
프로젝트 루트
├── src
│ ├── app.controller.ts
│ ├── app.controller.spec.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
├── test
│ └── app.e2e-spec.ts
│ └── jest-e2e.json
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── nest-cli.json
├── package.json
├── README.md
├── tsconfig.build.json
├── tsconfig.json
└── yarn.lock
주요 파일 및 폴더 설명
- src: 소스 코드 (API)
- test: 테스트 코드
- .eslintrc.js: 코딩 규칙 설정 파일
- .gitignore: Git에서 제외할 파일 목록
- .pretierrc: 코드 포맷 설정 파일
- nest-cli.json: Nest.js 설정 파일
- package.json: 프로젝트 메타데이터 및 종속성 관리 파일
- README.md: 프로젝트 설명서
- tsconfig.build.json: TypeScript 빌드 설정 파일
- tsconfig.json: TypeScript 기본 설정 파일
Git 설정 주의 사항
- nest.js 설치하면 .git 폴더가 자동으로 설치됩니다. 상위 폴더에서 git init 후 올릴 때 충돌을 방지하기 위해 삭제해야 할 수도 있습니다.
rm -rf .git
Package.json 주요 스크립트
- build: 배포 시 최적화하는 과정
- prebuild: 빌드 명령어 실행 전에 실행됨
- yarn build 실행 시 dist 폴더가 생성되며, 이는 최적화된 파일들을 포함합니다.
API 개발 순서
- 기능 개발
- Swagger 문서 작성
- 테스트 코드 작성
package.json에 있음
- Jest: 가장 유명한 테스트 프레임워크
- ESLint: 가장 유명한 린터
package.json 정리
start 명령어와 다양한 스크립트
1. 서버 시작 (start)
- yarn start: 서버를 켭니다.
2. 소스 코드 수정 시 자동 리프레시 (start)
- 소스 코드를 수정할 때 서버를 자동으로 리프레시 하기 위해 nodemon을 사용합니다.
- --watch 옵션을 사용하면 파일 변경을 감지하여 서버를 자동으로 재시작합니다.
- yarn start:dev: 개발 모드에서 서버를 시작합니다.
3. 디버깅 모드 (start)
- yarn start:debug: 버그를 찾아 수정할 때 사용합니다.
4. 프로덕션 모드 (start)
- yarn start:prod: 배포 및 운영 환경에서 서버를 시작합니다.
dist 폴더
- yarn start:dev로 서버를 실행시켜도 dist 폴더가 생성됩니다.
- dist 폴더에는 TypeScript로 작성된 코드가 JavaScript로 변환되어 저장됩니다.
- 개발 모드와 배포 모드에서 생성되는 dist 폴더는 약간의 차이가 있을 수 있지만, 둘 다 변환된 JavaScript 코드를 포함합니다.
package.json 파일의 dependencies와 devDependencies
- dependencies: 실행할 때 필요한 패키지들.
- devDependencies: 개발할 때 필요한 패키지들.
예시
- const aaa: string = 3: 이 코드에서는 TypeScript가 오류를 발생시키지만, 이는 주로 개발 환경에서만 유효합니다.
- TypeScript는 개발 중에만 사용되고, 실행 시 JavaScript로 변환되므로 devDependencies에 포함됩니다.
정리된 내용
{
"scripts": {
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug",
"start:prod": "nest start --prod"
},
"dependencies": {
"nestjs": "^7.0.0",
"express": "^4.17.1",
...
},
"devDependencies": {
"typescript": "^4.0.0",
"eslint": "^7.0.0",
"prettier": "^2.0.0",
...
}
}
정리
Nest.js는 TypeScript로 코드를 작성하지만, 실행할 때는 JavaScript로 변환하여 실행합니다. 이 변환 과정에서 dist 폴더가 생성되며, 이 폴더에는 변환된 JavaScript 파일이 저장됩니다.
이 과정에서 package.json의 dependencies와 devDependencies의 차이점을 이해하는 것이 중요합니다.
- dependencies: 애플리케이션이 실행될 때 필요한 의존성입니다. 예를 들어, Nest.js 프레임워크나 Express와 같은 라이브러리들이 여기에 포함됩니다.
- devDependencies: 개발할 때 필요한 의존성입니다. 예를 들어, TypeScript, ESLint, Prettier와 같은 도구들이 여기에 포함됩니다. 이들은 개발 중에 코드의 품질을 유지하고 개발 편의성을 높이기 위해 사용되지만, 실제 애플리케이션이 실행될 때는 필요하지 않습니다.
둘을 나누는 이유는 코드 작성이 완료된 후 실행 시 devDependencies는 불필요하기 때문입니다. 따라서, 배포 시 devDependencies를 설치하지 않음으로써 설치 시간과 디스크 공간을 절약할 수 있습니다.
정리된 내용:
- Nest.js: TypeScript로 작성된 코드를 JavaScript로 변환하여 실행.
- dist 폴더: 변환된 JavaScript 파일들이 저장되는 위치.
- dependencies: 애플리케이션 실행 시 필요한 라이브러리들.
- devDependencies: 개발 시 필요한 도구들, 실행 시에는 불필요.
'nest.js' 카테고리의 다른 글
Nest.js API 구조 정리파일 구조 (2024.05.30) (0) | 2024.05.30 |
---|---|
Nest.js ESLint, Prettier (2024.05.29) (0) | 2024.05.29 |
nest.js 접근제어자 (2024.05.29) (0) | 2024.05.29 |
Typescript-decorator (2024.05.29) (0) | 2024.05.29 |
Typescript 란? (2024.05.29) (0) | 2024.05.29 |