“ 당신은 소프트웨어 품질을 추구할 수도 있고, 포인터 연산을 할 수도 있다. 그러나 두 개를 동시에 할 수는 없다. ”
NestJS는 모듈화와 의존성 주입을 통해 구조적으로 정리된 백엔드 애플리케이션을 구축하기 위한 현대적인 프레임워크입니다. TypeScript를 기반으로 하여 강력한 기능을 제공하며, Express와 비슷한 런타임을 사용합니다.
또한, NestJS는 Fastify 프레임워크를 래핑하여 동작할 수도 있어 뛰어난 성능을 유지하면서도 개발 생산성을 높일 수 있습니다. NestJS는 국내외에서 빠르게 인기를 얻고 있으며, 다양한 회사에서 프로젝트에 적용하고 있는 추세입니다.
이에 따라 저 또한 NestJS에 대해 공부하고, 기본 개념부터 천천히 탐구해보려 합니다.
[NestJS] 프로젝트 설치
Nest CLI 명령어를 실행하면 새 프로젝트 디렉토리가 생성되며, Nest 프로젝트 기본 구조가 생성됩니다.
처음 사용하는 사용자는 Nest CLI 명령어로 프로젝트를 시작하는것이 좋습니다.
Node.js 버전 16이상이 설치되어 있어야 합니다.
npm i -g @nestjs/cli
nest new project-name
1. 프로젝트 구조
Nest CLI 명령어로 프로젝트를 생성하면 아래와 같이 기본 구조가 생성됩니다.
- main.ts : 애플리케이션 진입점, NestJS 애플리케이션을 생성하면 이 파일에서 초기화하고 실행합니다.
- app.controller.ts : 컨트롤러 파일입니다. 각 컨트롤러는 요청을 받아 처리하고 응답을 반환합니다.
- app.module.ts : 모듈 파일입니다. 기능 별로 모듈을 생성 관리 할수 있습니다.
- app.service.ts : 서비스 파일입니다. 비즈니스 로직을 처리하며, 컨트롤러에서 사용됩니다.
- nest-cli.json : Nest 프로젝트에 특정한 설정을 할수있는 json 파일
- test 폴더 : 테스트 관련 파일들이 위치하는 폴더 입니다. 단위 테스트 및 통합 테스트를 작성할수있습니다.
[NestJS] Module - Controller - Service 아키텍쳐
NestJS는 Module - Controller - Service 아키텍쳐 패턴을 기반으로 Angular 프레임워크의 영향을 받아서 개발이 되었습니다.
--no-spec 명령어를 포함하여 spec 파일을 생성하지 않습니다.
1. Module 모듈
Module은 애플리케이션의 구성 단위로, 관련된 Controller와 Service등을 그룹화 합니다.
루트 경로에서 명령어로 boards 모듈 파일을 생성합니다.
nest g module boards //모듈 생성
// or
nest g mo boards
2. Controller 컨트롤러
Controller는 클라이언트의 요청을 처리하고 응답을 반환하는 역할을 합니다. Express에서 Router 부분 이라고 생각하시면 됩니다. 루트 경로에서 명령어로 board 컨트롤러 파일을 생성합니다.
nest g controller boards --no-spec// 컨트롤러 생성
// or
nest g co boards --no-spec
3. Service 서비스
Service는 비즈니스 로직을 처리하는 역할을 합니다. 여러 컨트롤러에서 재사용 되는 로직을 Service로 분리하여 중복을 피할수 있습니다. 루트 경로에서 명령어로 board 서비스 파일을 생성합니다.
nest g service boards --no-spec//서비스 생성
// or
nest g s boards --no-spec
4. 생성된 파일
명령어로 파일을 생성하면 파일명 폴더에서 각 파일이 생성됩니다.
명령어로 Module 파일부터 차례로 파일을 생성하고 모듈 파일을 보시면 아래와 같이 자동으로 그룹화 되어있는것을 확인할수있습니다.
[NestJS] 실행하기
Package.json을 보시면 아래와 같은 명령어를 볼수있습니다.
"start:dev": "nest start --watch",
npm run start:dev 명령어로 실행합니다.
이번 포스팅에서는 NestJS에 대해서 간단하게 알아보고, 프로젝트 설치방법 또는 Module , Controller, Service 에 대해서 생성 하는 방법에 대해서 알아보았습니다. NestJS Docs에 자세히 나와있지만 개인 공부겸 기록이라 생각해주시면 좋을거 같습니다. 아 그리고 인프런 john ahn님의 NestJS 강의 기반으로 기초에 대해서 정리를 하고, 추후에 따로 간단한 프로젝트 진행해볼까 합니다.