티스토리 뷰
지난 글에서는 NestJS와 Fastify에 대한 소개와 기본적인 설정을 마쳤다.
이번 글에서는 postgreSQL을 이용한 데이터베이스 연동 파트를 역시 간단하게 살펴볼 예정이다.
postgreSQL에 대한 소개는 아래 글에서 확인할 수 있으며,
이 글에서는 postgres 도커 이미지는 이미 받아 가지고 있다 가정하고 진행하겠다.
추가로 이 글의 설정을 마치고 나면 프로젝트 구조는 다음과 같이 바뀌게 된다.
docker run
먼저 터미널에 다음과 같이 입력해 도커 컨테이너를 띄운다.
docker run --name postgres_nest -e POSTGRES_USER=test -e POSTGRES_PASSWORD=test1234 -e POSTGRES_DB=test_postgres -p 5432:5432 -d --restart unless-stopped postgres
여기서 유저 네임(test)과 비밀번호(test1234), 디비 이름(test_postgres)을 사용하고 싶은 값으로 바꾸면 된다.
포트는 5432이며, -d 명령어를 이용해 백그라운드에서 실행시켰다.
또한 --restart unless-stopped를 이용해 시스템 시작 시 자동으로 컨테이너를 띄우도록 했는데,
필요에 따라 적절히 잘라서 사용하면 된다.
.env
이어서 프로젝트 루트 디렉토리에 .env 파일을 만들고 아래와 같이 구성한다.
STAGE=dev
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=test
DB_PASSWORD=test1234
DB_NAME=test_postgres
개발환경임을 나타내는 STAGE 변수와 방금 구성한 컨테이너의 정보를 입력하는 것이다.
사족으로 .env파일은 .gitignore에 지정해 주는 것이 안전하다.
/src/config/typeorm.config.ts
계속해서 터미널에 아래와 같이 입력해 TypeORM을 설치한다.
npm install @nestjs/typeorm typeorm pg
여기서 TypeORM이란 이름 그대로 타입스크립트를 위한 ORM 라이브러리이다.
다양한 데이터베이스를 지원하며, 모델을 바탕으로 스키마를 자동생성해 주고
쿼리 빌더를 지원하는 등 여러모로 강력한 녀석이라고 한다.
설치가 끝나면 src폴더 아래에 config 폴더를 만들고 그 아래에 typeorm.config.ts를 만들어 아래와 같이 구성한다.
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
export const typeOrmConfigAsync = {
useFactory: async (
configService: ConfigService,
): Promise<TypeOrmModuleOptions> => ({
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_NAME'),
entities: [__dirname + '/../**/*.entity.{js,ts}'],
synchronize: configService.get('STAGE') === 'dev', // 예를 들어, 'STAGE' 환경 변수를 사용하여 개발 환경인지 확인
}),
inject: [ConfigService],
};
디비 연결을 위한 기본적인 설정이라고 보면 되며,
맨 아랫줄의 synchronize조건은 STAGE 환경변수가 dev일 경우 true가 되고,
이 true는 스프링으로 치면 ddl-auto: update라고 보면 된다.
app.module.ts
이어서 아래와 같이 입력해 ConfigModule을 사용할 준비를 한다.
npm install @nestjs/config
여기서 ConfigModule이란 환경 변수를 읽고 관리하기 위해 설계된 NestJS의 모듈이다.
내부적으로 dotenv를 기반으로 한다.
이어서 app.module.ts 파일을 아래와 같이 구성한다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfigAsync } from './config/typeorm.config';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRootAsync(typeOrmConfigAsync),
],
})
export class AppModule {}
코드의 import문 내부에 대해 잠깐 설명하자면
- ConfigModule.forRoot({ isGlobal: true })
ConfigModule을 전역 모듈로 설정한다. 이를 통해 애플리케이션의 모든 곳에서 환경 변수에 접근할 수 있게 된다. - TypeOrmModule.forRootAsync(typeOrmConfigAsync)
비동기로 TypeORM 설정을 로드한다. 이 설정은 typeorm.config.ts파일에서 정의된 typeOrmConfigAsync 객체에 따라 데이터베이스 연결을 설정한다.
이 구성을 통해, NestJS 애플리케이션은 환경 변수를 관리하고, 데이터베이스 연결을 설정할 수 있게 되며,
여기까지 하면 기본적인 디비 연결 작업이 마무리된다.
다음 글부터 본격적으로 각종 CRUD를 구현해 보도록 하자.
끝!
'JavaScript > Node.js' 카테고리의 다른 글
[Node.js]NestJS+Express.js로 게시판 만들기-(1)Hello World! (0) | 2023.12.11 |
---|---|
[Node.js]NestJS (0) | 2023.12.04 |
[Node.js]TS, Express, MongoDB, MVC로 게시판 만들기(9) - 이미지 리사이징, S3 버킷에 이미지 업로드 (0) | 2023.08.13 |
[Node.js]TS, Express, MongoDB, MVC로 게시판 만들기(8) - AWS, Github Actions, NGINX를 이용한 자동배포(2/2) (0) | 2023.08.09 |
[Node.js]TS, Express, MongoDB, MVC로 게시판 만들기(8) - AWS, Github Actions, NGINX를 이용한 자동배포(1/2) (0) | 2023.08.04 |
[Node.js]TS, Express, MongoDB, MVC로 게시판 만들기(7.5) - 페이지네이션 (0) | 2023.07.31 |
- Total
- Today
- Yesterday
- 칼이사
- java
- 여행
- BOJ
- Backjoon
- 맛집
- 자바
- 면접 준비
- 지지
- 스트림
- 파이썬
- Python
- a6000
- 알고리즘
- 야경
- 기술면접
- 스프링
- spring
- 유럽여행
- RX100M5
- 남미
- 유럽
- 중남미
- Algorithm
- 세계일주
- 리스트
- 세계여행
- 백준
- 동적계획법
- 세모
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |