NestJS는 확장성, 효율성 및 안정성을 갖춘 서버 측 어플리케이션 구축을 위한 혁신적인 Node.js 프레임워크입니다.
NestJS는 복잡하게 얽힌 코드베이스를 해결하기 위해 탄생했습니다. 모듈 구조를 통해 코드를 여러 모듈로 쉽게 나눌 수 있습니다.
NestJS는 TypeScript를 기반으로 하며, 내부적으로 ExpressJS를 사용합니다. TypeScript의 강력한 타입 검사 기능을 활용하고자 하는 개발자들에게 선호됩니다. NestJS는 함수형 반응형 프로그래밍(FRP), 객체 지향 프로그래밍(OOP), 함수형 프로그래밍(FP)의 다양한 측면을 융합합니다.
NestJS를 선택해야 하는 이유
NestJS는 잘 구성되어 있고 사용하기 쉬운 CLI(명령줄 인터페이스) 도구를 제공하여 초보자도 쉽게 접근할 수 있습니다. 개발자들은 이 Node.js 프레임워크를 사용하여 단일 명령어로 새로운 기능을 빠르게 추가할 수 있습니다.
NestJS는 모듈, 서비스, 컨트롤러 및 테스트 파일을 기본적으로 제공합니다. 또한 개발 과정을 간소화하는 다양한 상용구 코드와 템플릿을 활용할 수 있습니다.
JavaScript 및 Angular의 반복문, 구문, 조건문에 익숙한 사용자라면 NestJS 학습 곡선이 매우 완만하게 느껴질 것입니다.
NestJS의 주요 특징
TypeScript 기반
NestJS는 JavaScript의 상위 집합인 TypeScript를 기반으로 합니다. TypeScript는 코드 변경 시마다 수동으로 오류를 확인해야 하는 번거로움을 줄여주므로 개발 환경을 개선합니다. TypeScript는 JavaScript의 모든 기능을 기본적으로 제공하면서도 추가적인 기능들을 제공합니다.
의존성 주입 컨테이너
의존성 주입(DI)은 클래스에서 사용하는 객체의 초기화를 클래스 자체에서 분리하는 설계 패턴입니다. 이 때 클래스를 ‘클라이언트’라고 하며, 클래스 의존성을 ‘서비스’라고 합니다. NestJS에 내장된 DI는 애플리케이션을 보다 효율적이고 모듈화되게 만듭니다.
강력한 명령줄 인터페이스 (CLI)
NestCLI를 사용하여 모든 NestJS 애플리케이션을 초기화, 개발 및 유지 관리할 수 있습니다. Nest CLI를 통해 다음과 같은 다양한 작업을 수행할 수 있습니다.
- 프로젝트 스캐폴딩
- 개발 모드에서 프로젝트 실행
- 프로덕션 배포를 위한 애플리케이션 빌드 및 번들링
모듈화
모든 NestJS 애플리케이션은 하나 이상의 모듈로 구성됩니다. ‘루트’ 모듈은 가장 기본적인 모듈입니다. 일반적인 NestJS 앱에서 애플리케이션의 모든 논리적 부분은 동일한 도메인 경계(모듈) 내에 위치합니다. 이러한 구조를 통해 애플리케이션은 기능별로 밀접하게 연관된 여러 모듈로 구성된 컴포넌트를 쉽게 관리할 수 있습니다.
단위 테스트
자동화된 테스트는 많은 이점을 제공하지만, 이러한 테스트를 설정하는 과정은 복잡할 수 있습니다. NestJS는 팀이 테스트를 구축하고 자동화하는 데 도움이 되는 다양한 기능을 제공합니다. NestJS의 강점은 다양한 테스트 도구와 호환된다는 점입니다. 또한 Nest의 의존성 주입 시스템은 테스트 중에 컴포넌트를 쉽게 모의(mock) 처리할 수 있도록 지원합니다.
데이터베이스 독립성
NestJS를 사용하면 필요한 사항이나 선호도에 따라 모든 SQL 또는 NoSQL 데이터베이스와 쉽게 통합할 수 있습니다. 적절한 Node.js 드라이버를 로드하기만 하면 NestJS를 데이터베이스에 연결하는 과정이 매우 간단해집니다.
다양한 라이브러리 지원
NestJS는 애플리케이션 개발을 지원하는 다양한 도구와 호환됩니다. 이 프레임워크는 추가 구성 없이 로깅, 유효성 검사, 캐싱, WebSockets, TypeORM, Mongoose 및 GraphQL을 지원합니다.
NestJS의 아키텍처 및 워크플로
NestJS는 컨트롤러, 공급자, 모듈로 구성된 3계층 아키텍처를 채택하고 있습니다. 이를 통해 개발자는 깔끔하고 중복되지 않는 코드를 작성할 수 있습니다.
이미지 출처: betterprogramming
컨트롤러
NestJS 컨트롤러는 클라이언트 요청과 응답 사이의 가교 역할을 합니다. 라우팅 메커니즘은 HTTP 요청이 발생할 때마다 해당 요청을 적절한 컨트롤러로 전달합니다. 프레임워크는 데코레이터와 클래스를 사용하여 컨트롤러를 생성합니다. 각 클래스 메서드는 특정 요청을 수신하기 위해 경로에 매핑됩니다.
공급자
공급자는 NestJS의 핵심 구성 요소로 볼 수 있습니다. 공급자는 의존성으로 주입되며 서로 다른 객체 간의 관계를 생성합니다. 도우미, 서비스 또는 리포지토리와 같은 NestJS 클래스는 `@Injectable()` 데코레이터가 추가되면 공급자로 취급될 수 있습니다. 이러한 공급자는 생성자를 통해 클래스에 주입될 수도 있으며, NestJS는 필요한 의존성을 자동으로 해결합니다.
모듈
NestJS의 모듈은 밀접하게 관련된 기능 집합을 한데 묶습니다. 모든 NestJS 앱에는 진입점 역할을 하는 루트 모듈이 있습니다. 체계적이고 읽기 쉬운 코드를 위해서는 여러 모듈을 사용하는 것이 권장됩니다. Nest의 `@Module()` 데코레이터는 모듈을 정의하고, 해당 모듈과 함께 사용할 의존성, 컨트롤러 및 공급자와 같은 정보를 제공합니다.
NestJS 시작하기
Node.js와 npm이 설치되어 있는지 확인하십시오. 런타임 환경이 필요하며, Node.js는 이 설정에 이상적입니다. v13을 제외하고 버전 >= 12가 필요합니다. 다음 명령을 통해 Node.js와 npm이 설치되어 있는지 확인할 수 있습니다.
node -v
npm -v
둘 다 설치되어 있다면, 다음과 유사한 결과를 얻을 수 있습니다.
만약 설치되어 있지 않다면, 공식 웹사이트를 통해 설치하십시오. Node.js와 npm은 함께 설치됩니다.
- Nest CLI를 설치합니다. 다음 명령을 사용하여 CLI 및 프로젝트를 설정합니다.
npm i -g @nestjs/cli
nest new project-name
예시를 위해 프로젝트 이름을 mynestapp으로 설정합니다. NestJS는 TypeScript 또는 Vanilla JavaScript로 작업할 수 있는 선택지를 제공합니다. 원하는 옵션을 선택하고 Enter 키를 누릅니다. 앱이 스캐폴딩되면, 파일 구조가 설정되고 ‘src’ 폴더에 다음과 같은 몇 가지 핵심 파일이 포함됩니다.
- 애플리케이션 실행/ 첫 번째 Hello World
설치가 완료되면 다음 명령을 실행하여 개발 서버를 시작하십시오.
cd mynestapp
npm run start
브라우저에 http://localhost:3000/을 입력하면 NestJS의 첫 번째 “Hello World” 메시지를 확인할 수 있습니다.
NestJS의 장점
- 학습 용이성: 특히 Angular를 사용해 보았거나 JavaScript에 대한 기본 지식이 있는 경우 NestJS를 쉽게 마스터할 수 있습니다. 자세한 공식 문서를 통해 이 강력한 프레임워크를 쉽게 배울 수 있습니다.
- 유연성: NestJS를 사용하여 다양한 종류의 어플리케이션을 만들 수 있습니다. 이 Node.js 프레임워크를 사용하여 MVC 어플리케이션, GraphQL 어플리케이션, RESTful API 및 웹 소켓을 개발할 수 있습니다.
- 풍부한 모듈 지원: 커뮤니티에서 제공하는 다양한 모듈을 활용하여 서버 측 어플리케이션을 개발하는 동안 다양한 기능을 쉽게 추가할 수 있습니다.
- 빠른 개발 속도와 우수한 아키텍처: NestJS를 사용하면 처음부터 모든 코드를 작성할 필요가 없습니다. 또한 이 프레임워크는 코드를 쉽게 이해할 수 있도록 견고한 아키텍처를 제공합니다.
NestJS의 단점
- TypeScript 및 Angular 배경 지식이 있는 사람에게 유리함: NestJS는 Angular 아키텍처에서 많은 부분을 가져왔으며, 이러한 지식이 없는 사용자는 구문과 구조를 이해하는 데 시간이 걸릴 수 있습니다.
- 일부 분야에서 부족함: NestJS는 비교적 새로운 프레임워크이며, Python 및 Go 기반의 기존 프레임워크와 경쟁하기에 아직 부족한 부분이 있을 수 있습니다.
NestJS를 사용하는 기업
#1. 아디다스
신발 제조 및 디자인 회사인 아디다스는 NestJS를 사용하는 회사 중 하나입니다. NestJS의 강력한 기능은 이 거대 신발 회사가 백엔드에 적용하도록 이끌었을 것입니다.
#2. 캡제미니
캡제미니는 컨설팅, 기술, 아웃소싱 및 전문 서비스를 제공하는 프랑스 다국적 기업입니다. 이 회사는 기술 스택에서 NestJS를 사용하고 있습니다.
#3. 로슈
로슈는 의약품 및 진단이라는 두 사업 부문을 가진 다국적 의료 회사입니다. 로슈는 메인 웹사이트의 기술 스택 중 하나로 NestJS를 사용하고 있습니다.
학습 자료
#1. NestJS 제로 투 히어로
NestJS 제로 투 히어로는 개발자들에게 TypeScript와 Node.js를 사용하여 엔터프라이즈급 백엔드 어플리케이션을 만들고 배포하는 방법을 가르쳐줍니다. 이 과정에서는 API 생성, 권한 부여 및 인증, Nest 어플리케이션 단위 테스트, 데이터베이스 상호 작용을 위한 TypeORM 사용법 등을 다룹니다.
#2. NestJS: 완전한 개발자 가이드
이 과정은 개발자에게 Nest, TypeScript 및 TypeORM을 사용하여 백엔드 API를 구축하는 방법을 알려줍니다. 이 가이드는 NestJS 앱 코딩, 테스트 및 배포 설정에 필요한 모든 것을 제공합니다. 또한 NestJS 웹 프레임워크에 대한 심층적인 이해를 제공합니다.
#3. 마스터 NestJS
마스터 NestJS는 TypeScript를 사용하여 엔터프라이즈급 Node.js 앱을 개발하는 방법을 가르쳐줍니다. 이 과정에서는 유효성 검사 및 데이터 직렬화, JWT 토큰 작동 방식, NestCLI 사용 방법, 최신 데이터베이스 추상화 등을 다룹니다.
#4. 실습으로 배우는 NestJS (MongoDB 사용)
실습으로 배우는 NestJS는 모듈, 컨트롤러, GuardsServices, 파이프 및 미들웨어를 포함한 NestJS의 핵심 개념을 학습하는 데 필요한 모든 것을 제공합니다. 이 과정은 각 섹션에 대한 다운로드 가능한 zip 파일을 사용하여 GitHub에서 코드를 코딩하고 호스팅하는 프로젝트 기반 접근 방식을 취합니다.
#5. Nest.js: 혁신적인 Node.js 프레임워크
이 책은 개발자에게 NestJS와 JavaScript 및 TypeScript를 활용하는 방법을 소개합니다. 이 책은 NestJS 앱을 즉시 설정하고 실행할 수 있도록 사용법 중심으로 구성되어 있습니다.
#6. 실용적인 Nest.js: 깔끔한 MVC 웹 어플리케이션 개발
실용적인 Nest.js 책은 프로젝트 기반 접근 방식을 사용하여 다양한 NestJS 기능을 활용하는 온라인 상점 애플리케이션을 개발합니다. 이 책에는 NestJS 앱을 만들 때 유용한 정보, 팁 및 문구들이 포함되어 있습니다.
결론
NestJS는 강력한 Node.js 프레임워크일 뿐만 아니라, 오늘날 서버 측 어플리케이션을 위한 가장 인기 있는 TypeScript 프레임워크 중 하나입니다. 코드 모범 사례와 표준 개발 아키텍처를 제공한다는 점은 어플리케이션을 구축할 때 비즈니스 로직 개발에 집중하려는 많은 엔지니어들에게 매력적으로 다가옵니다.