Node.js/nestjs

[nestjs] - nestjs 소개

Labhong 2020. 11. 3. 00:57
반응형

Nestjs란

Nest.js는 nodejs에서 새로 떠오르는 프레임워크입니다. 공식 페이지를 가보면 Nestjs를 다음과 같이 소개하고 있습니다.

Nestjs는 효율적이고, 안정적이며, 확장에 용이한 서버 어플리케이션을 구축하기 위한 진보된 nodejs 프레임워크입니다.

효율성

개인적으로 써보면서 nestjs가 효율적이라고 느꼈던 점은 규모가 있는 프로젝트에서의 생산성이라고 생각합니다.

nestjs 문서의 Nestjs 프레임워크의 철학 구문을 보면 나타나 있습니다.

nestjs는 typescript의 적극적인 도입, DI(Dependency Injection), IoC(Inversion of Control), Module을 통한 구조화 등의 기술을 통해 생산적인 개발이 용이합니다.

안정적

Nestjs는 typescript를 적극적으로 도입함으로서 서버 어플리케이션 개발 시 발생할 수 있는 오류들을 사전에 방지할 수 있도록 했습니다. 또한 모듈로 감싸는 형태로 개발하기 때문에 모듈 별로 테스트 코드를 쉽게 작성할 수 있도록 구현되어 있습니다.

또한 개인적으로 사용하면서 프레임워크 때문에 발생한 오류는 없었습니다.

확장성

Nestjs는 module을 통해 확장이 용이하도록 설계되어 있습니다. 실제로 사용해보면 module을 통해 코드적으로, 논리적으로 구분한다는 장점을 크게 느끼실 수 있습니다.

또한 nestjs는 기본적으로 마이크로서비스 아키텍처 개발 스타일을 제공합니다. (문서)

nestjs vs express

Nodejs에는 이미 유명한 웹 어플리케이션 프레임워크인 express.js가 있고, 많은 회사가 서버를 개발하기 위해 express.js를 사용하고 있습니다. 같은 nodejs의 프레임워크이지만 두 프레임워크의 스타일이 많이 다릅니다.

nestjs와 express를 간단하게 비교해 보자면 다음과 같습니다.

구조

express.js는 웹 어플리케이션 서버를 빠르게 구현하기 위해 최적화 되어있습니다. 그래서 그 구조도 간단하고 따라서 개발 시 구조에 대한 자유도도 높습니다. 장점이라면 개발자들이 express를 사용하면서 여러 툴, 기술, 미들웨어 등을 마음껏 선택할 수 있습니다. 하지만 그런 선택의 자유로움이 독이 될 수 있습니다. 규모가 큰 개발의 경우 개발자들 서로 좋아하는 툴, 기술 등이 다를 수 있습니다. 그리고 그 자유로움은 같은 express를 개발해도 팀마다 express 구조가 달라지게 됩니다.

하지만 nestjs의 경우는 조금 다릅니다. controller, service, module 클래스들은 각각 역할을 가지고 있습니다. middleware, guard, filter 등의 클래스들 또한 다 그들의 역할을 가지고 있습니다. IoC와 DI 같은 디자인 패턴들을 도입해서 그것들에 맞추지 않으면 개발하기 힘든 구조입니다. 하지만 그런 제한이 오히려 개발의 통일성을 가져옵니다.

대표적으로 Java 진영은 걸출한 Spring 프레임워크가 있고 잘 정립된 spring 철학을 바탕으로 모든 개발자들은 개발의 통일성을 바탕으로 프로젝트를 시작할 때 구조를 잡지 않고 바로 개발을 시작할 수 있고, 개발 중간에 인원이 투입되어도 개발 구조는 같기 때문에 빠르게 개발할 수 있습니다. Nestjs를 유심히 보면 spring과 유사한 점이 많아 spring 개발자들이 nestjs를 개발한다면 쉽게 이해할 것 같습니다.

Typescript 지원

Nestjs는 설계부터 typescript를 지원하게끔 개발되어 있습니다. 문서를 봐도 typescript를 사용하라고 권장합니다. 이로써 nestjs는 typescript의 장점 또한 가지게 됩니다. typescript의 대표적인 장점은 컴파일 단계에서의 오류를 포착할 수 있다는 점입니다. 이는 어플리케이션의 안정성을 가져옵니다.

물론 express 또한 typescript를 이용해 개발할 수 있습니다. 하지만 typescript를 적용하려면 직접 세팅해야 하며 Typescript를 제대로 활용하기 어렵습니다.

모듈

Nestjs는 module 클래스를 지원합니다. module은 비슷한 기능 및 개념들을 module 클래스에 한 곳에 담아 캡슐화합니다. 그리고 Module들은 서로 import가 가능합니다. 이는 아키텍쳐를 조직적(Organize)으로 가져가게 하고 느슨한 결합(Loose Coupling)을 가능하게 만들어 확장성(Extensible)테스트 가능성(Testable)을 높입니다.

Standalone Application

Nestjs는 웹 어플리케이션만 만들 수 있는 것이 아닙니다. 문서를 보면 DIIoC 등의 핵심 기능만 가져가는 core 라이브러리를 통해 웹 서버 뿐만 아니라 여러 어플리케이션을 구현할 수 있습니다. 예를 들어 주기적으로 프로그램을 실행하는 cron 어플리케이션이나 batch 작업을 위한 어플리케이션을 구현할 수 있습니다.

하지만 express의 경우 웹 프레임워크이기 때문에 웹 어플리케이션을 구현하는 것이 아니라면 express를 사용하기가 어렵습니다.

결론

개인적으로 Nestjs를 사용하면서 장점이 상당히 많은 프레임워크라고 느꼈습니다. 규모가 큰 프로젝트에서는 오히려 이 프레임워크를 사용하는 게 맞다고 생각할 정도로 큰 규모에서 갖는 장점을 많이 갖추었습니다.

nestjs를 사용하는 개발자로서 nestjs가 많은 사람들에게 알려져 nodejs도 큰 프로젝트에서 사용할 날이 생겼으면 좋겠습니다. 한국에서 많은 회사들이 nestjs를, nodejs를 선택해 좋은 문화가 만들어졌으면 합니다

반응형