>> 아래 글과 코드가 보이지 않는다면 우측 하단의 달 모양을 클릭해주시기 바랍니다. <<
어제 처음 접하게 되어, 이 NestJS 를 공부하며 블로그에 정리를 하기 시작하였습니다.
부정확한 내용이 확인이 된다면 댓글 부탁드립니다.
NestJS 란?
제 생각에 Java + Spring / Python + Django 라면 NodeJS + NestJS 라고 생각합니다.
NodeJS 하면 ExpressJS 가 연상이 되는데 개인적으로 ExpressJS 보다는 NestJS 가 더 효율이 좋다고 생각합니다.
Express 의 경우 대부분의 사람들이 다 다르게 Controller 와 Service 등 개개인이 다 다르게 구조를 결정하게 되는데
Nest의 경우에는 정해진 구조를 따르게 됩니다.
추가로, Typescript로 빌드되지만 순수 Javascript 를 사용할 수 있고 OOP, FP, FRP 요소를 결합하게 됩니다.
- OOP : Object Oriented Programming (객체 지향 프로그래밍)
- FP : Functional Programming ( 함수형 프로그래밍 )
- FRP : Functional Reactive Programming (함수형 반응형 프로그래밍)
ExpressJS 와 차이점
ExpressJS 와의 간단한 차이는 위에 설명드린 내용과 같이 개개인이 다 다른 프로젝트 구조를 가지게 되지만, NestJS 를 사용하게 된다면 정해진 구조를 따르게 되기 때문에 프로젝트 구조 설계 속도에 있어서 차이점이 있습니다.
라우팅의 차이
//ExpressJS
app.use('/user', require('./userRouter'))
app.use('/board', require('./boardRouter'))
//NestJS
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
위 코드처럼 ExpressJS 는 라우팅을 할 때 app.use 처럼 등록을 해서 사용을 합니다.
하지만, NestJS 는 Module별로 나누어 라우팅을 하게 됩니다.
컨트롤러의 차이
//ExpressJS
router.route('/')
.get((req,res) => {
})
//NestJS
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
이렇게 보았을때는 분명 Exrpess 쪽이 더 편해보이기는 합니다.
Exrpess는 간결해 보이기는 하지만, Nest 쪽은 구조가 좀 명확하다고 생각합니다.
서비스의 차이
//ExpressJS
router.route('/')
.get((req,res) => {
// 서비스 코드
})
//NestJS
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
Exrpess 쪽은 거의 주석처리한곳에 대부분 코드를 작성하거나 다른 함수에서 작업을 하기도 합니다.
하지만, Nest 의 경우는 복잡한 동작과정의 경우 class 안에서 여러 함수를 만들어 컨트롤러별로 기능을 구현해놓습니다.
모양새가 Java의 메서드 선언방식과 비슷해보입니다.
그래서 뭐가 좋다는건데?
ExpressJS의 장점으로는 서비스를 빠르게 구현하는데 최적화가 되어있어 그에 맞게 자유도가 높으며 자유로운 프로젝트의 구조, 툴 등을사용할 수 있습니다. 이 프레임워크는 한 회사에서도 팀마다 구조가 각기 다르다는 단점도 있습니다.
NestJS는 Module, Controller, Service별로 각각의 역할이 따로 정해져있어 프로젝트의 구조가 딱 정해져 있다는 장점이 있습니다.
하지만, 같이 작업하는 팀원들간의 흐름제어에 관한 디자인패턴을 도입하지 않으면 개발하기가 힘든 구조이긴 하지만, 이러한 점이 개발의 통일성을 가져오기 때문에 단점이자 장점이 된다고 보입니다.
결론
각 프레임워크별로 장점과 단점이 명확히 보이기는 합니다.
어떤 프로젝트를 진행하느냐에 따라서 달라지긴 하겠지만, 개인적으로 프로젝트의 크기가 크든 작든 NestJS를 사용하여 버릇을 잡아놓는게 좋다고 생각합니다. 만약 나중에 Spring 을 할 경우가 생기게 되었을 때 NestJS 의 구조는 정말 많은 도움을 줄것으로 보입니다.
한번 큰 프로젝트를 하고나니 제가 구조를 설계했지만, 나중에 지나서 보면 다시 파악하기 어려웟던적이 있었습니다. Exrpess 로 이 구조적인 문제를 어떻게 해결할지, 어떻게 해야 효율적일지 찾던 중, NestJS를 접하게 되었고, 현재 공부를 하며 블로그에 작성을 하고 있었습니다.
앞으로 apiTestServer 는 NestJS 로 다시 제작을 하려고 합니다.
'JavaScript > NestJS' 카테고리의 다른 글
[NestJS] 기본 프로젝트 구조 생성 및 CRUD (0) | 2021.09.08 |
---|