[java] MyBatis로 데이터베이스 마이그레이션하기

이번 포스트에서는 MyBatis를 사용하여 데이터베이스 마이그레이션을 수행하는 방법에 대해 알아보겠습니다.

마이그레이션이란?

마이그레이션은 데이터베이스 스키마를 새로운 버전으로 업데이트하는 과정을 말합니다. 이를 통해 새로운 테이블, 컬럼, 인덱스 등을 추가하거나 기존 스키마를 변경할 수 있습니다. MyBatis는 데이터베이스 마이그레이션을 손쉽게 수행할 수 있는 많은 도구를 제공합니다.

MyBatis 마이그레이션 도구

MyBatis 마이그레이션을 위해 주로 사용되는 도구는 다음과 같습니다:

  1. Flyway: Flyway는 파일 기반 마이그레이션 도구로, SQL 스크립트 파일을 사용하여 데이터베이스 스키마를 관리합니다. MyBatis에서 Flyway를 사용하려면 Maven이나 Gradle 등의 빌드 도구를 통해 Flyway를 의존성으로 추가해야 합니다.

  2. Liquibase: Liquibase는 XML이나 YAML 등의 형식으로 데이터베이스 스키마를 정의하고 버전 관리를 할 수 있는 마이그레이션 도구입니다. MyBatis에서는 Liquibase를 사용하기 위해 마이그레이션을 수행할 때 Liquibase 스크립트를 실행하도록 설정해야 합니다.

MyBatis 마이그레이션 예제

아래는 MyBatis와 Flyway를 이용한 데이터베이스 마이그레이션 예제입니다.

  1. MyBatis와 Flyway 의존성 추가
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.x.x</version>
</dependency>

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>6.x.x</version>
</dependency>
  1. Flyway 설정 파일 작성

Flyway를 사용하기 위해 flyway.properties 파일을 프로젝트의 리소스 폴더에 생성합니다. 아래는 예시입니다:

flyway.url=jdbc:mysql://localhost:3306/mydatabase
flyway.user=root
flyway.password=secret
  1. 마이그레이션 스크립트 작성

src/main/resources/db/migration 폴더에 마이그레이션 스크립트(V1__create_users_table.sql)를 작성합니다:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);
  1. MyBatis 마이그레이션 설정

MyBatis 설정 파일(mybatis-config.xml)에서 Flyway를 마이그레이션 수행 전에 실행하도록 설정합니다:

<bean id="flyway" class="org.flywaydb.core.Flyway">
    <property name="dataSource" ref="dataSource"/>
    <property name="locations" value="classpath:db/migration"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory"/>
</bean>
  1. 마이그레이션 수행

애플리케이션을 실행하거나 빌드할 때 Flyway가 마이그레이션 스크립트를 실행합니다. 데이터베이스가 최신 상태로 마이그레이션된 후에는 MyBatis를 사용하여 데이터베이스에 접근할 수 있습니다.

마무리

이번 포스트에서는 MyBatis와 Flyway를 사용하여 데이터베이스 마이그레이션을 수행하는 방법에 대해 알아보았습니다. MyBatis를 사용하면 데이터베이스 스키마를 쉽게 관리하고 업데이트할 수 있습니다. Flyway와 같은 도구를 활용하여 마이그레이션 프로세스를 자동화하면 애플리케이션의 유지보수와 배포를 더욱 효율적으로 수행할 수 있습니다.

참고 자료