Nest.js + TypeORM 개발 환경 구축하기 ⚙️
간단하게 nest.js와 typeORM 개념을 알아보면서 개발 환경 세팅을 해볼게요!
Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버측 (server-side application)을 구축하기 위한 프레임워크이다. Typescript를 지원하며 Typescript 기반으로 프로젝트를 진행할 수 있다. 또한 OOP(객체 지향 프로그래밍), FP(함수형 프로그래밍), FRP(기능적 반응형 프로그래밍) 지원한다.
내부적으로 Nest는 Express(기본값)와 같은 강력한 HTTP 서버 프레임워크를 사용하며, 선택적으로 Fastify도 사용하도록 구성할 수 있다!
아래 명령어를 실행 해주면 Nest CLI로 프로젝트를 스캐폴딩 해준다.
npx @nestjs/cli new project-name
새 프로젝트 디렉토리가 생성되고 초기 Nest 파일 및 지원 모듈로 디렉토리가 채워져 프로젝트 기본 구조가 생성된다.
app.controller.ts : 라우트의 컨트롤러
app.controller.spec.ts: 컨트롤러 단위 테스트 코드
app.module.ts : 앱의 루트 모듈
app.service.ts: 여러 로직을 담는 파일
main.ts : 앱의 시작 파일
main.ts
- create 메소드는 INestApplication interface에서 application object를 반환한다.
- 내장 http listener 코드를 활용하여 application object가 inbound http request를 받을 수 있도록 한다.
TypeORM은 NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, Electron 플랫폼에서 실행할 수 있으며 TypeScript 및 JavaScript(ES5, ES6, ES7, ES8)와 함께 사용할 수 있는 ORM이다.
TypeORM은 현재 존재하는 다른 모든 JavaScript ORM과 달리 액티브 레코드 및 데이터 매퍼 패턴을 모두 지원하므로, 느슨하게 결합되고 확장 가능하며 유지 관리가 용이한 고품질 애플리케이션을 가장 생산적인 방식으로 작성할 수 있다.
아래 명령어를 실행하여 필요한 모든 종속성을 설치한다.
npm install --save typeorm mysql2
명령어 실행 후 app.module.ts에서 TypeOrmModule을 import한다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
프로덕션 환경에서 synchronize: true를 설정하면 개발에 따라 데이터베이스를 업데이트 하기 때문에 프로덕션 데이터가 손실될 수 있으므로 사용하면 안된다.
추가 옵션 설정
Properties | Description |
---|---|
retryAttempts | 데이터베이스 연결 시도 횟수 (default: 10) |
retryAttempts | 재연결 시도 간 딜레이(대기 시간) (default: 3000ms) |
autoLoadEntities | True로 선언되면 엔티티들이 자동으로 로드 됩니다. (default: false) |
더 많은 설정 옵션은 공식문서를 통해 확인할 수 있다.