지난 프로젝트를 진행할 때 express를 이용했고, 이번엔 nest.js를 사용해보게 되어 두 개의 차이점에 대해 짚고 넘어가고싶어 포스트를 작성해봅니다. 스스로 공부해보고 작성한 글이기 때문에 정확하지 않을 수 있습니다. 잘못된 정보가 있다면 댓글로 알려주세용😌
node js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. node js의 등장으로 JavaScript를 브라우저뿐만 아니라 서버에서도 사용할 수 있게 되었습니다.
*런타임 : 특정 언어로 만든 프로그램을 실행할 수 있는 환경
node js는 웹 서버와 같이 확장성 있는 네트워크 프로그램을 개발하기 위해 만들어졌습니다. 또한 HTTP 서버 라이브러리 등을 포함하고 있어 아파치 등의 별도의 프로그램 없이 동작할 수 있습니다.
express는 웹 및 모바일 어플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 node js 프레임워크 입니다. HTTP 메소드 및 미들웨어를 통해 쉽게 API를 만들 수 있습니다.
express는 현재 가장 많이 사용되고 있는 node js 프레임워크입니다. 가장 많이 사용되는 프레임워크인만큼 구글링을 통한 레퍼런스 서치가 용이합니다. 또한 서버를 빠르게 구현하기 위해 개발 시 구조의 자유도가 높습니다. typescript를 지원하긴 하지만 json파일을 따로 만들고 세팅해줘야한다는 번거로움이 있습니다.
nest js는 효율적이고 확장 가능한 node js 서버를 구축하기 위한 프레임워크입니다. Progressive Javascript를 사용하며, 기본적으로 Typescript를 지원하고 빌드됩니다. 또한, OOP(Object Oriented Programming), FP(Functional Programming) 및 FRP(Functional Reactive Programming) 요소를 결합합니다.
*Reactive Programming : 비동기 데이터 스트림으로 프로그래밍을 하는 것
nest.js는 기본 언어로 타입스크립트를 채택하고 있으며 Express를 래핑하여 동작하는 node js 프레임워크입니다. IoC(Inversion of Control, 제어 역전), DI(Dependency Injection, 의존성 주입) 및 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)와 같은 객체 지향 개념을 도입하고 있습니다.
express는 개발의 자유도가 높아 사람마다, 혹은 팀마다 아키텍처 디자인 스타일이 다르다면 커뮤니케이션 비용이 커집니다. 반면에 nest js는 프레임워크 자체에서 어느정도 아키텍처 디자인을 제공하기 때문에 정해진 양식에 맞게 개발을 하게 됩니다.
app.use('/employee', require('./employeeRouter'))
app.use('/company', require('./companyRouter'))
@Module({
imports: [
TypeOrmModule.forFeature([EmployeesRepository])
],
exports: [TypeOrmModule],
providers: [EmployeesService],
controllers: [EmployeesController],
})
export class EmployeesModule {}
express는 app.use 함수를 이용해 라우터를 등록하지만, nest.js는 각 모듈별로 라우팅을 해서 사용합니다.
router.route('/').get((req,res) => {
// 로직.
});
// controller
export class EmployeesController {
constructor(private readonly employeesService: EmployeesService) {}
@Get()
findAll() {
return this.employeesService.findAll();
}
}
// service
@Injectable()
export class EmployeesService {
constructor(
@InjectRepository(Employees)
private readonly employeeRepository: Repository<Employees>) {}
findAll(): Promise<Employees[]> {
return this.employeeRepository.findAll();
}
}
제가 글을 쓰고 정리해보며 느낀 점에 대해 정리해보겠습니다.
우선 express는 개발자 마음대로 구조를 설계할 수 있고, nest.js는 아키텍처를 어느 정도 정의해준다는 점이 가장 큰 차이점인것 같습니다. 또한 TypeScript를 사용하기엔 기본적으로 TypeScript를 빌드 언어로 지원하는 nest.js가 적합할 것 같다고 느꼈습니다.
너무 당연한 이야기지만 좋고 나쁜 프레임워크를 찾는 것 보다, 자신이 진행할 프로젝트에 맞는 프레임워크를 적절하게 사용하는 것이 좋아보이네용🤗