사이드프로젝트로 nestjs로 배우는 방법
· 약 4분
1. NestJS란? (https://docs.nestjs.com/)
NestJS는 Node.js(서버)를 위한 프레임워크로, Angular의 구조와 문법을 따르는 프레임워크입니다. NestJS는 TypeScript로 작성되어 있으며, TypeScript의 장점을 최대한 활용할 수 있도록 설계되어 있습니다. NestJS는 Express와 함께 사용할 수 있으며, Express의 기능을 그대로 사용할 수 있습니다.
2. NestJS의 철학 기본 구조
Nest는 개발자와 팀이 테스트하기 쉽고, 확장 가능하고, 느슨하게 결합되고, 쉽게 유지 관리할 수 있는 애플리케이션을 만들 수 있는 즉시 사용 가능한 애플리케이션 아키텍처를 제공합니다.
src
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts
app.controller.ts
: 컨트롤러 파일로, 라우팅을 담당합니다.app.module.ts
: 모듈 파일로, 모듈을 정의합니다.app.service.ts
: 서비스 파일로, 비즈니스 로직을 담당합니다.main.ts
: 메인 파일로, 애플리케이션을 실행합니다.
3. NestJS 시작하기
$ npm i -g @nestjs/cli # NestJS CLI 설치
$ nest new project-name # 프로젝트 생성
$ cd project-name # 프로젝트 폴더로 이동
$ npm run start # 프로젝트 실행
4. NestJS 자주 사용되는 라이브러리 설명 및 설치
- TypeORM: ORM(Object-Relational Mapping) 라이브러리로, 데이터베이스와의 상호작용을 쉽게 할 수 있습니다.
- Passport: 인증 미들웨어로, 다양한 인증 방식을 사용할 수 있습니다.
- Swagger: API 문서를 자동으로 생성해주는 라이브러리입니다.
- nestjs/config: 환경 변수를 쉽게 사용할 수 있도록 도와주는 라이브러리입니다.
- pg: PostgreSQL을 사용할 수 있도록 도와주는 라이브러리입니다.
$ yarn add @nestjs/config
$ yarn add @nestjs/typeorm typeorm pg
$ yarn add @nestjs/passport passport passport-local
$ yarn add @nestjs/swagger swagger-ui-express
5. environment 설정
app.module.ts에서 ConfigModule을 import하고, isGlobal 옵션을 true로 설정하면 어디서나 ConfigService를 사용할 수 있습니다.
// src/app.module.ts
import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, // 어디서나 ConfigService를 사용할 수 있게 함
}),
// 추후 TypeORMModule 등 추가 예정
],
})
export class AppModule {}
6. TypeORM 설정
TypeORM을 사용하기 위해서는 TypeORMModule.forRoot()를 사용하여 설정을 해주어야 합니다.
// src/app.module.ts
import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { TypeOrmModule } from "@nestjs/typeorm";
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: "postgres",
host: configService.get("DB_HOST"),
port: configService.get("DB_PORT"),
username: configService.get("DB_USERNAME"),
password: configService.get("DB_PASSWORD"),
database: configService.get("DB_DATABASE"),
entities: [__dirname + "/**/*.entity{.ts,.js}"],
synchronize: true,
}),
}),
],
})
export class AppModule {}
env 파일에 DB 정보를 설정해주고, ConfigService를 사용하여 DB 정보를 가져옵니다.
# .env
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres_user
DB_PASSWORD=postgres_password
DB_DATABASE=nestjs_db