본문 바로가기
백앤드

데이터베이스 migration과 seeder

by 개발자A입니다 2023. 6. 18.

부트캠프에서 express를 배우고 두달간 다닌 첫 직장에서는 nest.js를 배웠다. 

(이번주에 첫 직장에서 국민연금을 미납했다는 우편이 와서 회사 홈페이지를 들어가보니, 연결이 되지않는다. 허허..)

 

이번에 이직한 곳에서도 nest.js를 사용하는데, 처음 듣는 업무를 받게 되었다.

데이터베이스 migration과 seeder

Migration

- 공식문서: https://typeorm.io/migrations

- 개념: Migration은 데이터베이스의 스키마(데이터베이스 구조)를 변경하거나 업데이트하는 과정을 의미하며, 스크립트를 작성하고 "yarn migration:up"과 같은 명령어로 실행시킬 수 있다.

- 중요성:

  - 데이터베이스 스키마의 버전 관리: Migration은 데이터베이스 스키마의 버전 관리를 가능하게 합니다. 새로운 기능 추가, 필드 수정, 테이블 생성 또는 삭제 등과 같은 변경 사항을 버전으로 관리하여 데이터베이스의 일관성을 유지할 수 있습니다. 이를 통해 개발자는 언제든지 이전 버전으로 롤백하거나 최신 버전으로 업그레이드할 수 있습니다.

  - 롤백 기능: Migration은 데이터베이스 스키마 변경 작업을 롤백할 수 있는 기능을 제공합니다. 예기치 않은 문제 또는 오류가 발생했을 때 이전 상태로 쉽게 되돌릴 수 있으며, 데이터의 손실이나 일관성 문제를 방지할 수 있습니다.

- 주의사항:

  - 스크립트 작성시 up과 down은 정확히 반대되는 작업으로 이전 상태로 되돌릴 수 있도록 작성되어야한다. 

  - 스크립트에서 drop과 같이 데이터를 영구적으로 삭제하는 쿼리는 지양해야한다.

 

Seeder

- 공식문서: https://github.com/tada5hi/typeorm-extension#seed

 

GitHub - tada5hi/typeorm-extension: This library provides utitlites to create & drop the database, seed the database and apply U

This library provides utitlites to create & drop the database, seed the database and apply URL query parameter(s). - GitHub - tada5hi/typeorm-extension: This library provides utitlites to creat...

github.com

- 개념: 데이터베이스 시딩(Database Seeding)은 데이터베이스 초기 데이터 생성 및 채우기 기능입니다. 데이터베이스 시딩은 애플리케이션을 처음 실행할 때 빈 데이터베이스에 초기 데이터를 삽입하거나 테스트용 데이터를 생성하는 데 사용됩니다.

- 중요성: 

  - 초기 데이터 삽입: 애플리케이션을 처음 실행할 때 데이터베이스에 초기 데이터를 삽입하는 것은 중요한 과정입니다. 초기 데이터는 애플리케이션의 기능을 테스트하고 완전한 동작을 보장하기 위해 필요한 데이터입니다. Seeder를 사용하면 초기 데이터를 간편하게 삽입할 수 있으며, 애플리케이션의 초기 상태를 설정하는 데 도움을 줍니다.
  - 테스트 데이터 생성: 테스트 시나리오에서 실제 데이터를 사용하여 테스트를 수행하는 것은 중요합니다. Seeder를 사용하면 테스트용 데이터를 생성하고 테스트 환경을 구축하는 데 도움을 줍니다. 이를 통해 테스트 케이스를 더 현실적이고 포괄적으로 만들 수 있으며, 애플리케이션의 다양한 기능과 상황을 테스트할 수 있습니다.
  - 일관성과 반복 가능성: Seeder를 사용하면 데이터를 일관되게 유지하고 반복 가능한 프로세스로 데이터베이스를 구성할 수 있습니다. Seeder는 데이터베이스 스키마가 변경되거나 애플리케이션 버전이 업데이트되는 경우에도 일관성 있는 데이터 삽입을 보장합니다. 이를 통해 애플리케이션의 데이터 일관성을 유지하고 개발 및 유지 보수 과정을 단순화할 수 있습니다.

- 주의사항:

  - 중복 데이터 처리: Seeder를 작성할 때 데이터 중복을 방지하는 방법을 고려해야 합니다. 이미 데이터베이스에 존재하는 데이터를 중복해서 삽입하는 것을 방지하기 위해 중복 체크 로직을 추가하거나 데이터를 업데이트하는 방식을 사용해야 합니다.
  - 데이터베이스 버전과 일치: Seeder를 작성할 때 해당하는 데이터베이스 버전과 일치하는지 확인해야 합니다. 데이터베이스 버전이 변경되거나 스키마가 변경된 경우 Seeder도 이에 맞게 업데이트되어야 합니다. 데이터베이스 스키마 변경에 따른 Seeder의 수정은 일관성을 유지하는 데 중요합니다.
  - 보안과 민감한 데이터: Seeder에 삽입되는 데이터 중 보안과 민감한 정보가 포함되는 경우 주의해야 합니다. 보안 상의 이유로 민감한 데이터를 Seeder에 포함시키지 않도록 해야 합니다. 예를 들어, 사용자 비밀번호 등은 Seeder에 포함시키지 말아야 합니다.
  - 테스트 환경과 분리: Seeder는 일반적으로 테스트 환경에서 사용됩니다. 테스트용 데이터를 생성하거나 테스트 케이스를 위한 초기 데이터를 삽입하는 데 사용됩니다. Seeder를 작성할 때 테스트 환경과 프로덕션 환경을 분리하여 개발자가 실수로 프로덕션 데이터를 변경하거나 삭제하는 일을 방지해야 합니다.
  - 실행 순서와 종속성: Seeder를 작성할 때 데이터 삽입의 실행 순서와 종속성을 고려해야 합니다. 종속성이 있는 데이터가 있는 경우 이를 처리하기 위해 적절한 순서로 Seeder를 실행해야 합니다. 종속성을 해결하기 위해 데이터베이스 관계를 이해하고 데이터 삽입 순서를 결정하는 것이 중요합니다.
  - 롤백과 복구: Seeder를 사용할 때 롤백과 복구 과정을 고려해야 합니다. Seeder 실행 중 문제가 발생하거나 롤백이 필요한 경우 이를 처리하는 방법을 고려해야 합니다. 롤백 메커니즘을 구현하고 데이터 삽입 전후의 상태를 체크하여 복구할 수 있는 방법을 고민해야 합니다.

  - 주의사항 문서화: Seeder의 사용 방법과 주의사항은 문서화되어야 합니다. 다른 개발자나 팀원들이 Seeder를 사용할 때 어떤 주의사항이 있는지 이해할 수 있도록 문서를 작성해야 합니다. Seeder의 목적, 작성 방법, 실행 순서, 데이터베이스 상태 변화 등에 대한 문서를 제공하여 사용자들이 정확하게 사용할 수 있도록 해야 합니다.

 

 

migration과 seeder의 역할 구분

Migration:
- 데이터베이스 스키마의 버전 관리와 변경을 관리하는 도구입니다.
- 데이터베이스의 스키마를 변경하기 위한 스크립트 또는 코드입니다.
- 데이터베이스의 테이블, 컬럼, 제약 조건 등의 스키마 변경을 지원합니다.
- 스키마 변경에 대한 버전 관리를 제공하여 데이터베이스를 이전 상태로 롤백하거나 이전 버전으로 돌아갈 수 있게 합니다.
- 개발자들이 애플리케이션을 업데이트하거나 스키마 변경을 적용할 때 사용됩니다.
- 애플리케이션의 스키마 변경에 대한 기록을 유지하므로 팀 협업이나 배포 과정에서 유용합니다.

 

Seeder:
- 초기 데이터를 삽입하거나 테스트 데이터를 생성하는 데 사용되는 도구입니다.
- 데이터베이스를 초기화하고 기본 데이터를 삽입하는 데 사용됩니다.
- 개발 및 테스트 환경에서 애플리케이션을 실행할 때 사용됩니다.
- 초기 데이터 삽입, 테스트용 데이터 생성, 데이터 일관성 유지 등의 목적으로 사용됩니다.
- 애플리케이션 실행 초기에 실행되어 데이터베이스를 원하는 상태로 설정하는 데 사용됩니다.
- 보통 테스트 시나리오에서 데이터를 생성하고 애플리케이션의 다양한 기능을 테스트하는 데 사용됩니다.

'백앤드' 카테고리의 다른 글

개발자로서 첫 실무 Nest.js 서버 리팩토링 회고  (0) 2023.03.31