1. 개요
이번 포스팅은 노드 진영의 백엔드 프레임워크 중 하나인 NestJS 에 대해 알아보고자 한다.
상세한 명칭 설명보다는 러프하게 적어볼 예정이기 때문에 모르는 단어의 경우 검색해보면 자세한 내용이 많이니 참고해주길 바란다.
(비동기 논블로킹, 이벤트드리븐 등은 Node.js 특징에 더 가깝기에 이 부분은 따로 포스팅을 진행해볼 예정이다.)
2. NestJS?
NestJS 는 Node.js 런타임 위에서 동작하는 TypeScript용 오픈소스 백엔드 애플리케이션 프레임워크이다.
프로그레시브 JavaScript를 사용하고 TypeScript 로 구축되어 완벽하게 지원하며(순수 JavaScript로도 개발 가능) OOP(객체 지향 프로그래밍), FP(기능 프로그래밍) 및 FRP(기능 반응 프로그래밍) 요소를 결합한다.
기존 많이 사용되던 자유로운 방식의 Express에 비해 MVC 패턴을 정형화 시키고 제어역전(IoC), 의존성 주입(DI) 등 Java 진영의 Spring에서 제공되는 기능과 유사한 모습을 보여주고 있다.
내부적으로는 Express를 사용하고 있으며 선택적으로 Fastify도 사용하도록 구성할수 있다.
3. 설치
NestJS는 CLI 를 제공하기 때문에 npm(Node Package Manager) 으로 설치해준다.
새로운 프로젝트를 만들때는 'nest new [project-name]' 으로 만들게 되는데
$ npm i -g @nestjs/cli
$ nest new project-name
처음에 Package Manager 를 선택하게끔 되어있기에 주로 사용하는걸 선택해주면 된다.
요즘은 빌드 속도 측면에서 yarn이 npm 더 빨라 더 많이 사용하는 추세로 보여지는데 바꾸는데 그저 Package 관리툴을 뭘 쓰는지에 대한 차이 정도이지 선택하는데 너무 고민하기보다는 일단 써보고 주로 쓰는걸 결정해도 되지 않을까 한다.
다른 블로거 분이 차이점에 대한 내용을 정리해준신 내용이 있어 아래에 링크 첨부하였다.
NPM vs Yarn | Cracking Vue.js
npm과 yarn npm과 yarn은 자바스크립트 런타임 환경인 노드(Node.js)의 패키지 관리자입니다. 전 세계의 개발자들이 자바스크립트로 만든 다양한 패키지를 npm 온라인 데이터베이스 (opens new window)에 올
joshua1988.github.io
4. 프로젝트 구조
프로젝트가 생성이되면 아래 이미지와 같이 필요 파일과 소스가 만들어지게 된다.
처음 실행에 관한 내용은 README.md 파일에 적혀있으니 바로 실행해볼수 있다.
만들어진 프로젝트 내 src 폴더를 보면
개발자가 주로 작업할 구조가 보이게 된다.
- app.controller.spec.ts : 컨트롤러 유닛 테스트 담당
- app.controller.ts : 라우트 담당
- app.module.ts : 의존성 관련 내용 작성
- app.service.ts : 비지니스 로직을 담당
- main.ts : 애플리케이션 시작 파일 (ex, npm start 시)
새로 Domain을 만들게 되면 해당 구조를 자주 보게 되는데
명칭에 spec 이 들어가면 테스트를 위한 파일로 보면 되고, module의 경우 의존성 관리를 위한 파일로 보면 된다.
a. Module
모듈의 경우 컨트롤러(controllers) 지정과 의존성 주입하고자 하는 클래스 파일(providers) 그리고 등록하고자 하는 모듈을 정의하는 파일(imports) 를 정의할 수 있다.
예를 들면,
다른 도메인의 모듈등록 또는 ORM 모듈 정보 입력과 등록 등, imports 부분에 작성하게 된다.
'왜 app.module.ts 에 등록을 해야하는가?'
이 이유는 main.ts 파일을 보면 알수 있는데,
처음 Nest Application 을 실행할 때,
app.module 의 내용을 등록하고 실행하기 때문에 해당 위치에 추가로 생성된 모듈을 등록해두면 연결되어 등록이 되는 형태인 것이다.
쉽게 말하자면 이런 순서가 될수 있겠다.
main.js(NestFactory AppModule) -> AppModule imports -> Each Module
b. 새 Domain 생성
새 도메인을 만들때는 직접 연관 파일을 만들어도 되지만
컨트롤러, 서비스, 모듈, 테스트 등 만들어야할 파일이 여간 많은게 아니다.
이런 부분을 NestJS는 쉽게 해주는 기능을 제공해주는데
$ nest g resource domain-name
이 명령어를 적어주면 아래와 같이 몇가지 질문 후 해당 구조에 필요한 파일들을 자동 생성해주고,
app.module.ts 파일에 자동으로 등록해준다.
예시에서는 CRUD entry points 지문에서 Yes를 골랐는데
No인 경우 dto, entity, crud method 등이 빠진 상태로 만들어진다고 보면 된다.
(바로 만들어주는건 좋긴한데 막상 작업하면 그대로 사용되는 경우가 그리 많지 않기 때문에 없는게 편한듯 하다.)
만들고 나면 app.module.ts 파일에 자동으로 import된 모습도 볼수 있다.
물론 잘 작동하는지는 테스트 해봐야겠지만 어느정도 번거로운 작업을 해소해 주는 기능이다.
4. Request Life Cycle
NestJS에서 동작하는 요청에 대한 라이프 사이클이다.
앞으로 공부해보면서 어떤 식으로 작동하고 활용 가능한지 알아볼 예정이다.
5. 마무리
Express와 SpringBoot 모두 사용해본 입장에서
NestJS는 Express에서 구조적으로 생각해야할 부분을 SpringBoot 처럼 만들어주는 점이 좋은 점이었다.
다만 Lombok 을 통해 쉽게 의존성 주입을 하던 SpringBoot 와 달리 직접 주입 내용을 정리해줘야하는게 귀찮은점이긴 했다.
언어적 사용 특징도 있겠지만
처음에 컴파일 시 Annotation에 따라 만들어내는 Java와 달리 인터프리터인 JS의 특징도 한몫하지 않나 싶다.
언어 사용법과 프레임워크에 익숙해지면 또 그거대로 쓰기 편하지 않을까? 한다.
(공홈 문서도 잘 정리되어있는 편이라 공부하기 수월할듯 하다)
현재 NestJS 공부할 겸
'[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core' 강의를 참고하고 있다.
강의 공부 내용이나 추가적으로 검색해본 내용에 대해 올려볼 생각이다.
아직 정리된 내용이 많지는 않지만 아래 깃허브 참고!
6. GitHub
https://github.com/mk1-p/nestjs-practice
GitHub - mk1-p/nestjs-practice: NestJS Practice Project.
NestJS Practice Project. Contribute to mk1-p/nestjs-practice development by creating an account on GitHub.
github.com
7. 참고 문서
NestJS - A progressive Node.js framework
NestJS is a framework for building efficient, scalable Node.js web applications. It uses modern JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Progr
nestjs.com
'DEV > Node' 카테고리의 다른 글
[Node] class-validator decorator 목록 (1) | 2024.11.18 |
---|---|
[Node] Passport 활용하기 (with. NestJS) (0) | 2024.11.10 |
[Node] Custom Validate Decorator 적용하기 (with. NestJS) (0) | 2024.11.07 |