개요
단일 데이터베이스를 사용하는 프로젝트에서는 스키마 버전 관리(schema versioning) 또는 마이그레이션(migration) 기법을 활용해 데이터베이스 스키마 변경을 수행할 수 있습니다. 이 방식의 목적은 데이터베이스의 구조적 변경 사항을 체계적으로 기록하고 추적하여, 언제 어떤 변경이 적용되었는지 명확히 파악할 수 있도록 하는 것입니다.
1. 스키마 변경 이력 저장용 테이블 생성
먼저 스키마 변경 사항을 기록할 전용 테이블을 생성합니다. 아래 예제에서는 변경 시점(WhenTime), 식별 키(TheKey), 버전 정보(Version) 세 가지 컬럼으로 구성했습니다.
mysql> create table SchemaDatabaseMethodDemo
-> (
-> `WhenTime` timestamp not null default CURRENT_TIMESTAMP,
-> `TheKey` varchar(200) not null,
-> `Version` varchar(200),
-> primary key(`TheKey`)
-> )ENGINE=InnoDB;
Query OK, 0 rows affected (0.45 sec)
WhenTime 컬럼은 기본값으로 CURRENT_TIMESTAMP를 사용하므로, 레코드가 삽입된 시각이 자동으로 기록됩니다. 또한 TheKey를 기본 키로 지정해 동일한 키의 중복 등록을 방지할 수 있습니다.
2. 레코드 삽입
테이블이 준비되면 INSERT 문을 사용해 버전 정보를 기록합니다.
mysql> insert into SchemaDatabaseMethodDemo values(now(),'1001','version 5.6.12');
Query OK, 1 row affected (0.17 sec)
3. 기록된 이력 확인
SELECT 문으로 저장된 스키마 변경 이력을 조회할 수 있습니다.
mysql> select *from SchemaDatabaseMethodDemo;
실행 결과는 다음과 같습니다.
+---------------------+--------+----------------+
| WhenTime | TheKey | Version |
+---------------------+--------+----------------+
| 2018-10-29 14:21:47 | 1001 | version 5.6.12 |
+---------------------+--------+----------------+
1 row in set (0.00 sec)
4. 실무 적용 시 유의 사항
참고: SQL 스크립트나 마이그레이션 파일을 실행할 때는 스크립트의 시작 부분 또는 끝 부분에 INSERT 문을 추가하여 위 테이블에 해당 실행 기록을 한 행씩 남겨야 합니다.
이러한 습관을 들여 두면 다음과 같은 이점이 있습니다.
- 어떤 버전의 스크립트가 언제 적용되었는지 명확하게 파악할 수 있습니다.
- 여러 개발·운영 환경 간의 스키마 동기화 상태를 손쉽게 비교할 수 있습니다.
- 문제가 발생했을 때 특정 시점의 스키마 상태로 되돌리거나 원인을 분석하는 데 도움이 됩니다.