마이그레이션은 데이터베이스 스키마의 변경을 관리하고 적용하는 과정이다. NestJS에서는 주로 TypeORM을 사용하여 데이터베이스 마이그레이션을 처리한다고 한다. 데이터베이스 스키마를 버전 관리하고 변경 사항을 추적할 수 있게 되는 것!
- 데이터베이스 스키마: 데이터베이스에서 테이블, 열, 제약 조건 등의 구조를 정의한 것
- 마이그레이션 파일: 마이그레이션 작업을 수행하는 TypeScript 또는 JavaScript 파일. 이 파일에는 스키마 변경에 대한 명령어와 로직이 포함.
- 마이그레이션 작업: 데이터베이스 스키마를 변경하거나 업데이트하는 작업. 예를 들어, 새로운 테이블 생성, 열 추가, 제약 조건 변경 등
변경된 요구 사항에 대응하고 데이터의 무결성을 보장하기 위해! 그리고 버전 관리와 다중 개발자 간의 협업을 지원하여 개발 프로세스를 향상시키고 배포 관리를 간편하게 하기 위해.
스크립트를 정의하는 데 사용되며, 여기서 마이그레이션 실행을 위한 명령어를 정의한다.
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d src/ormdatasource.ts",
"db:drop": "yarn typeorm schema:drop",
"db:create": "yarn typeorm migration:generate",
"db:migrate": "yarn typeorm migration:run"
참고) 절대경로
위의
typeorm
에는 절대경로 설정을 위한 설정이 포함되어 있다! tsconfig-paths 패키지가 제공하는 레지스터(register)인tsconfig-paths/register
를 사용하여 경로 별칭을 인식하도록 설정한 것이다.
예시로 tsconfig.json를 이런 식으로 설정하면
{
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"@app/*": ["./src/*"]
}
}
}
절대 경로를 사용할 수 있을 것이다.
db:drop , db:create, db:migrate 로 명령어를 지정하면 더 간단하게 마이그레이션할 수 있다고 해서 그렇게 설정해주었고 실제로도 더 편한 것 같다.
"db:drop": "yarn typeorm schema:drop"
데이터베이스를 삭제하는 작업을 수행.
데이터베이스의 스키마를 삭제. 주로 개발 시나리오에서 데이터베이스를 초기화하거나 테스트용 데이터베이스를 제거하는 데 사용
"db:create": "yarn typeorm migration:generate"
마이그레이션 파일을 생성하여 데이터베이스를 생성하는 작업을 수행. 현재 데이터베이스 상태에서 마이그레이션 파일을 생성.
예)yarn db:create src/migrations/AddUsernameToUsers
처럼 최근 버전에는 경로까지 정확히 입력해주어야 하는 것 같다.
"db:migrate": "yarn typeorm migration:run"
마이그레이션 파일을 실행하여 데이터베이스를 마이그레이션하는 작업을 수행. 마이그레이션 파일을 실행하여 데이터베이스의 스키마를 변경 또는 업데이트. 마이그레이션 파일에 정의된 대로 데이터베이스 스키마가 변경된다.
데이터베이스 연결 설정과 마이그레이션에 대한 구성을 정의하는 파일. 이 파일에서 데이터베이스 연결 정보와 마이그레이션 설정을 지정.
const config: PostgresConnectionOptions = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'mediumclone',
password: '1234',
database: 'mediumclone',
entities: [TagEntity, UserEntity],
synchronize: false,
migrations: [__dirname + '/migrations/**/*{.ts,.js}'],
};
이렇게 그냥 migrations 옵션으로 마이그레이션 파일이 저장되는 디렉토리 경로를 지정해준다.
설정한 명령어를 터미널에 입력하면 이렇게 migrations 폴더에 마이그레이션 파일이 생기게 된다.
마이그레이션을 처음으로 배우고 실습한 후 쓰는 글이다.
배우고나니까 확실히 이게 왜 중요하고 왜 하는지 조금이나마 알 것 같다. 아직은 더 공부해야 하는 부분..