Migraion?
데이터베이스 스키마의 변경 사항을 추적하고 적용
TypeORM에서 synchronize: true 로 entity와 DB의 싱크를 맞출 수 있지만 자칫 데이터 유실이 있을 수 있기 때문에 production 레벨에서는 안전하지 않다.
TypeORM 0.3에서 migration 진행하기
1. entity 생성
간단히 만들고 싶은 user entity를 생성했다.

2. package.json script에 아래 TypeORM 관련 스크립트 추가
각자 파일의 경로에 맞추어 스크립트 작성
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --dataSource ./data-source.ts",
"migration:create": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:create ./src/db/migrations/Migration",
"migration:generate": "npm run typeorm migration:generate ./src/db/migrations/Migration",
"migration:run": "npm run typeorm migration:run",
"migration:revert": "npm run typeorm migration:revert"
ts-node로 절대경로 인식시킴
3. migration 진행 할 data-source 코드 작성
data-source.ts
import { ConfigService } from '@nestjs/config';
import { config } from 'dotenv';
import { DataSource } from 'typeorm';
config();
const configService = new ConfigService();
export default new DataSource({
type: 'postgres',
host: configService.get('DB_HOST'),
port: 5432,
username: configService.get('DB_USERNAME'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_DATABASE'),
synchronize: false,
entities: ['src/**/*.entity.ts'],
migrations: ['src/db/migrations/*.ts'],
migrationsTableName: 'migrations',
});
4. migration 하기
드디어 migraion 시작
npm run migration:generate
성공적!

그럼 이제 내가 설정해준 migration 경로에 migraion 파일이 생긴다. 나의 경우 src/db/migrations 폴더

이제 생성된 migration 파일로 db에 테이블을 생성해주자.
npm run migration:run
쿼리 실행중

명령어 실행이 완료되면 이렇게 연결된 데이터베이스에 테이블이 추가되었다!

📎 참고
'💛Backend' 카테고리의 다른 글
REST API에 대하여 (feat. 로이 필딩 논문) (1) | 2023.07.19 |
---|---|
Nest.js Passport 없이 로그인 Authorization Guard 만들기 (JWT Service) (0) | 2023.06.27 |
OAuth 2.0이란? 동작 방식은? (0) | 2023.01.25 |
Migraion?
데이터베이스 스키마의 변경 사항을 추적하고 적용
TypeORM에서 synchronize: true 로 entity와 DB의 싱크를 맞출 수 있지만 자칫 데이터 유실이 있을 수 있기 때문에 production 레벨에서는 안전하지 않다.
TypeORM 0.3에서 migration 진행하기
1. entity 생성
간단히 만들고 싶은 user entity를 생성했다.

2. package.json script에 아래 TypeORM 관련 스크립트 추가
각자 파일의 경로에 맞추어 스크립트 작성
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --dataSource ./data-source.ts",
"migration:create": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:create ./src/db/migrations/Migration",
"migration:generate": "npm run typeorm migration:generate ./src/db/migrations/Migration",
"migration:run": "npm run typeorm migration:run",
"migration:revert": "npm run typeorm migration:revert"
ts-node로 절대경로 인식시킴
3. migration 진행 할 data-source 코드 작성
data-source.ts
import { ConfigService } from '@nestjs/config';
import { config } from 'dotenv';
import { DataSource } from 'typeorm';
config();
const configService = new ConfigService();
export default new DataSource({
type: 'postgres',
host: configService.get('DB_HOST'),
port: 5432,
username: configService.get('DB_USERNAME'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_DATABASE'),
synchronize: false,
entities: ['src/**/*.entity.ts'],
migrations: ['src/db/migrations/*.ts'],
migrationsTableName: 'migrations',
});
4. migration 하기
드디어 migraion 시작
npm run migration:generate
성공적!

그럼 이제 내가 설정해준 migration 경로에 migraion 파일이 생긴다. 나의 경우 src/db/migrations 폴더

이제 생성된 migration 파일로 db에 테이블을 생성해주자.
npm run migration:run
쿼리 실행중

명령어 실행이 완료되면 이렇게 연결된 데이터베이스에 테이블이 추가되었다!

📎 참고
'💛Backend' 카테고리의 다른 글
REST API에 대하여 (feat. 로이 필딩 논문) (1) | 2023.07.19 |
---|---|
Nest.js Passport 없이 로그인 Authorization Guard 만들기 (JWT Service) (0) | 2023.06.27 |
OAuth 2.0이란? 동작 방식은? (0) | 2023.01.25 |