안녕하세요 개발자 정씨입니다.
최근 ExpressJS 프레임워크 만큼이나 NestJS 프레임워크가 주목 받고 있습니다.
해당 카테고리는 NestJS를 공부하며 알게된 내용을 정리하고자합니다.
1. 설치
- 공식 docs(https://docs.nestjs.com)를 참조하여 다음과 같은 명령어로 설치 및 프로젝트를 생성할 수 있습니다.
npm i -g @nestjs/cli
nest new project-name
- 아래와 같이 어떤 package manager를 사용할지 선택하라는 내용의 메세지가 나옵니다. 저는 npm으로 진행해보겠습니다.

- 프로젝트 생성이 완료되면 아래와 같은 창을 확인하실 수 있습니다.

- 생성된 프로젝트로 이동하여 "npm start"명령어를 입력하여 서버를 띄우고 "localhost:3000"으로 이동하면 아래와 같은 화면을 확인 할 수 있습니다.

2. 프로젝트 구조
- 프로젝트를 열어보면 src에 아래와 같은 파일들을 확인 할 수 있는데, 각각의 파일들은 다음과 같은 역할을 수행합니다.

main.ts | 이 파일은 Nest.js 애플리케이션의 시작점입니다. 여기에서 웹 서버를 설정하고 실행합니다. |
app.module.ts | 애플리케이션의 구성 요소를 그룹화하고, 의존성 주입을 관리합니다. |
app.controller.ts | 클라이언트의 요청을 처리하고 응답을 생성하는 역할을 합니다. |
app.service.ts | 데이터베이스와 통신하거나 다른 비즈니스 로직을 처리합니다. |
- 실제로 controller와 service파일을 살펴보면, service에서 비지니스 로직을 처리하고, 이를 기반으로 controller에서 응답해주는 방식으로 이루어져 있습니다.

- 현재 get 방식으로 통신이 가능한데, 아래와 같이 코드를 작성한다면, 다른 방식으로도 통신이 가능합니다.

3. nestjs-cli
- nestjs의 또 하나의 장점이라고 한다면 cli를 통해 프로젝트의 아키텍처를 쉽게 구성 할 수 있다는 점 입니다.
- "nest -h"라는 명령어를 입력하면, 사용할 수 있는 명령어들을 볼 수 있습니다.

- 위의 화면에서도 알 수 있듯 cli 명령어를 통해서 원하는 파일을 생성할 수 있습니다.
nest generate [생성할파일] [이름]
4. TypeScript 특징 - build
- NestJS의 구성언어인 TypeScript 특징 중 하나라면 빌드 과정이 있는데, 이는 TypeScript 코드를 JavaScript로 변환하고, 필요한 리소스를 번들링하여 프로덕션 환경에서 실행 가능한 형태로 만드는 과정입니다.
- 이 과정을 통해 TypeScript로 개발한 코드를 최적화하고 오류를 사전에 발견할 수 있으며, 애플리케이션의 성능을 향상시키고 배포를 간편하게 할 수 있는 장점이 있습니다.
- NestJS 프로젝트 생성시 자동으로 만들어진 package.json을 보면 script에 다양한 명령어가 존재합니다. 실제로 build 명령어를 확인 할 수 있으며, nest start 명령어에는 build과정이 포함되어 있습니다.
- build 과정을 마치고 나면 dist 디렉토리가 생성된 것을 볼 수 있는데, 이 dist가 변환된 JavaScript 결과 입니다.

- build여부에 따른 차이점을 나름대로 정리해보았습니다.
[build X] - ts-node를 사용하여 TypeScript 코드를 런타임에서 직접 실행합니다. - 따라서 TypeScript 파일(.ts)을 직접 실행하므로 빌드 과정 없이 코드를 수정하고 서버를 다시 시작할 수 있습니다. - 일반적으로 이 방식으로 개발 환경에서 코드를 빠르게 테스트하고 디버깅할 때 사용합니다. [build O] - 빌드된 JavaScript 코드(.js)를 실행합니다. - 미리 컴파일된 코드를 실행하므로 런타임에서 TypeScript를 처리하지 않습니다. - 일반적으로 이 방식으로 배포 및 프로덕션 환경에서 사용합니다. |
'NestJS' 카테고리의 다른 글
Chapter3 - DB 연결(TypeORM) (0) | 2023.12.08 |
---|---|
Chapter2 - Module 구성 (0) | 2023.12.07 |