"나무위키" 에 짧게 정의된 글을 빌자면,
"Node.js 런타임 위에서 동작하는 TypeScript용 오픈 소스 백엔드 웹 프레임워크."
"공식 문서 페이지"에서는 아래와 같이 소개하고 있다.
"Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크입니다 . TypeScript 를 완벽하게 지원하며(순수 JavaScript로 코딩할 수도 있음) OOP(객체 지향 프로그래밍), FP(함수형 프로그래밍) 및 FRP(함수형 리액티브 프로그래밍) 요소를 결합합니다.
내부적으로 Nest는 Express (기본값) 와 같은 강력한 HTTP 서버 프레임워크를 사용하며 선택적으로 Fastify 도 사용하도록 구성할 수 있습니다!
Nest는 이러한 일반적인 Node.js 프레임워크(Express/Fastify)보다 높은 수준의 추상화를 제공하지만 해당 API를 개발자에게 직접 공개합니다. 이를 통해 개발자는 기본 플랫폼에서 사용할 수 있는 수많은 타사 모듈을 자유롭게 사용할 수 있습니다."
철학
"공식 문서 페이지" 에서는 아래와 같이 소개하고 있다.
"최근 몇 년 동안 Node.js 덕분에 JavaScript는 프런트엔드 애플리케이션과 백엔드 애플리케이션 모두에서 웹의 "언어"가 되었습니다. 이로 인해 개발자 생산성을 향상하고 빠르고 테스트 가능하며 확장 가능한 프런트엔드 애플리케이션을 생성할 수 있는 Angular , React 및 Vue 와 같은 멋진 프로젝트가 탄생했습니다 . 그러나 Node(및 서버측 JavaScript)를 위한 뛰어난 라이브러리, 도우미 및 도구가 많이 존재하지만 그 중 어느 것도 아키텍처 의 주요 문제를 효과적으로 해결하지 못합니다 .
Nest는 개발자와 팀이 고도로 테스트 가능하고 확장 가능하며 느슨하게 결합되고 유지 관리가 쉬운 애플리케이션을 만들 수 있는 즉시 사용 가능한 애플리케이션 아키텍처를 제공합니다. 아키텍처는 Angular에서 많은 영감을 받았습니다."
장점
- 확장성(Extensible)
모듈식 아키텍처를 채용하여 다른 라이브러리를 사용할 수 있어 진정한 유연성을 제공. - 유연성(Versatile)
모든 종류의 서버 측 애플리케이션을 위한 완전한 백본 역할을 하는 적응형 에코시스템. - 프로그레시브(Progressive)
최신 JavaScript 기능을 활용하여 Node.js 세계에 디자인 패턴과 성숙한 솔루션을 제공.
설치
Nest CLI를 사용하여 스캐폴드하거나 시작 프로젝트를 복제할 수 있다.
npm i -g @nest.js/cli
nest new {프로젝트명}
npm install
npm run start
또는 Git을 사용하여 TypeScript 시작 프로젝트를 만들 수 있다. git 기록없이 복제하려면 degit을 사용한다.
git clone https://github.com/nestjs/typescript-starter.git {프로젝트명}
cd {프로젝트명}
npm install
npm run start
"helloworld" 라는 이름으로 프로젝트를 생성했다.
브라우저를 열고 http://localhost:3000/ 으로 이동합니다. 아래와 같은 화면을 볼 수 있을 것이다.
src/ 디렉토리 및 소스 구조는 아래와 같다.
개별 소스를 설명하면 이렇다.
app.controller.ts | Route Path 가 하나 있는 기본 컨트롤러입니다. |
app.controller.spec.ts | 컨트롤러에 대한 단위 테스트입니다. |
app.module.ts | 애플리케이션의 루트 모듈입니다. |
app.service.ts | 샘플 메소드 하나 들어있는 기본 서비스 입니다. |
main.ts | NestFactory 핵심 기능을 사용하여 Nest 애플리케이션 인스턴스를 생성하는 파일입니다. |
main.ts 파일을 자세히 보자.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
NestFactory 클래스는 애플리케이션 인스턴스를 생성할 수 있는 몇 가지 정적 메서드를 노출한다. create() 메서드는 인터페이스를 충족하는 애플리케이션 INestApplication 개체를 반환하는데, 이 객체는 다음 장에서 설명할 메서드 세트를 제공합니다. 위의 예 에서는 main.ts애플리케이션이 인바운드 HTTP 요청을 기다릴 수 있도록 HTTP 수신기를 시작하기만 하면 된다.
Nest CLI로 스캐폴드된 프로젝트는 개발자가 각 모듈을 자체 권장되는 디렉토리 구조를 따르도록 프로젝트를 생성해 준다.
Platform
Nest는 플랫폼에 구애받지 않는 프레임워크를 목표로 한다. 플랫폼 독립성을 통해 개발자가 다양한 유형의 애플리케이션에서 활용할 수 있는 재사용 가능한 컴포넌트를 생성할 수 있으며, 기술적으로 Nest는 어댑터가 생성되면 모든 Node HTTP 프레임워크와 작동할 수 있다. 기본적으로 지원되는 두 가지 HTTP 플랫폼은 express 및 fastify 다. 기본은 express 이며, fastify 로 쉽게 바꿀 수 있다.
platform-express | Express 는 노드용으로 잘 알려진 미니멀리스트 웹 프레임워다. 커뮤니티에서 구현한 많은 리소스가 포함된 실전 테스트를 거쳐 프러덕션 가능한 라이브러리이다. @nestjs/platform-express 패키지는 기본적으로 사용된다. 워낙에나 유명해서 별다르게 기능, 호환성에서 고민할 게 없다. |
platform-fastify | Fastify 는 효율성과 속도에 중점을 둔 고성능 프레임워크입니다. 관심이 있다면 여기 를 참고하자. |
어떤 플랫폼을 사용하든 자체 애플리케이션 인터페이스를 노출한다. 이들은 각각 NestExpressApplication 및 NestFastifyApplication 로 로드된다.
NestFactory.create()아래 예제와 같이 메소드 에 유형을 전달하면 app객체는 해당 특정 플랫폼에서만 사용할 수 있는 메소드를 갖게 되지만, 실제로 기본 플랫폼 API에 액세스하려는 경우가 아니면 아래처럼 유형을 지정할 필요가 없다.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
어플리케이션 실행
npm run start
빌드 속도를 높이기(20배) 위해서 SWC 빌더를 사용할 수 있다.
npm run start -- -b swc .
이 명령은 파일에 정의된 포트에서 수신 대기하는 HTTP 서버로 앱을 시작합니다 src/main.ts. 애플리케이션이 실행되면 브라우저를 열고 http://localhost:3000/ 로 이동하고, Hello World!. 메시지가 브라우저에 출력된다.
소스 수정 시 서브를 다시 컴파일하고 기동하려면 아래와 같이 시작한다.
npm run start:dev
린팅 및 포매팅 지정
Nest CLI 는 대규모로 안정적인 개발 워크플로우를 지원하기 위해 Linter(elslint) 및 포매터(prettier) 가 모두 사전 설치되어 제공된다.
IDE가 관련되지 않은 헤드리스 환경(지속적 통합, Git 후크 등)의 경우 Nest 프로젝트에는 즉시 사용 가능한 npm스크립트가 제공된다.
# Lint and autofix with eslint
npm run lint
# Format with prettier
npm run format
이상, NestJS에 대한 소개와 기본적인 환경설정 및 구동 방법에 대해서 알아보았다.
다음 시간에는 컨틀롤러에 대해서 알아보자.
'Backend(Framework) > NestJS 개요(공식문서 번역)' 카테고리의 다른 글
6. Exception filters (0) | 2023.11.17 |
---|---|
5. Middleware (1) | 2023.11.16 |
4. Modules (1) | 2023.11.16 |
3. Provider (1) | 2023.11.16 |
2. Controller (0) | 2023.11.05 |