[java] Querydsl을 사용하여 데이터베이스 테이블 마이그레이션 로그 관리하기

많은 애플리케이션에서 데이터베이스 스키마의 변화를 관리하는 데에 마이그레이션 툴을 사용합니다. 하지만 이러한 마이그레이션 작업을 수행하는 동안 로그를 기록하고 관리하는 것은 아주 중요합니다. 이를 위해 Querydsl을 사용하여 데이터베이스 테이블 마이그레이션 로그를 효과적으로 관리해보겠습니다.

1. Querydsl 이란?

Querydsl은 Java와 Kotlin을 위한 타입 안전한 쿼리 작성을 위한 도구입니다. SQL, JPQL, MongoDB, Elasticsearch 등 다양한 백엔드 데이터베이스를 지원합니다. Querydsl을 사용하면 쿼리를 문자열 형태로 작성하는 대신 코드로 작성할 수 있어서 오타나 구문 오류를 방지할 수 있고, IDE의 자동완성 기능을 활용할 수 있습니다.

2. Querydsl 사용하여 마이그레이션 로그 작성

먼저, Querydsl을 프로젝트에 추가해야 합니다. 의존성 설정을 통해 Querydsl 관련 라이브러리를 가져옵니다. Gradle 기준으로는 다음과 같이 의존성을 추가합니다.

dependencies {
    implementation 'com.querydsl:querydsl-core:4.4.0'
    implementation 'com.querydsl:querydsl-jpa:4.4.0'
}

Querydsl을 사용하여 데이터베이스 테이블 마이그레이션 로그를 작성하려면, 우선 쿼리 및 마이그레이션 내역을 저장할 데이터베이스 테이블을 생성해야 합니다. 예를 들어, migration_log 테이블을 생성하고 querydsl 패키지 내에 QMigrationLog 클래스를 생성해줍니다. 이 클래스는 Querydsl을 사용하여 migration_log 테이블에 접근하는 엔티티에 대한 메타데이터를 포함합니다.

@Entity
@Table(name = "migration_log")
public class MigrationLog {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "migration_name")
    private String migrationName;

    @Column(name = "migration_date")
    private LocalDate migrationDate;

    // Getters and setters

}

이제 Querydsl을 사용하여 마이그레이션 로그를 작성하는 메소드를 작성해봅시다.

import com.querydsl.jpa.impl.JPAQueryFactory;
import static com.querydsl.jpa.JPAExpressions.selectFrom;
import static com.querydsl.core.types.Projections.constructor;

@Repository
public class MigrationLogRepository {

    @PersistenceContext
    private EntityManager entityManager;

    public void createMigrationLog(String migrationName) {
        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

        QMigrationLog qMigrationLog = QMigrationLog.migrationLog;
        MigrationLog migrationLog = new MigrationLog();
        migrationLog.setMigrationName(migrationName);
        migrationLog.setMigrationDate(LocalDate.now());

        queryFactory.insert(qMigrationLog)
                .set(qMigrationLog.migrationName, migrationLog.getMigrationName())
                .set(qMigrationLog.migrationDate, migrationLog.getMigrationDate())
                .execute();
    }

    public List<MigrationLog> getMigrationLogs() {
        QMigrationLog qMigrationLog = QMigrationLog.migrationLog;
        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

        return queryFactory.select(constructor(MigrationLog.class, qMigrationLog.id, qMigrationLog.migrationName, qMigrationLog.migrationDate))
                .from(qMigrationLog)
                .fetch();
    }
}

위의 코드에서는 createMigrationLog 메소드를 통해 새로운 마이그레이션 로그를 생성하고, getMigrationLogs 메소드를 통해 모든 마이그레이션 로그를 가져옵니다.

3. 마무리

Querydsl을 사용하여 데이터베이스 테이블 마이그레이션 로그를 효과적으로 관리할 수 있습니다. Querydsl을 사용하면 쿼리를 코드로 작성하여 오타나 구문 오류를 사전에 방지할 수 있고, 자동완성 기능을 활용하여 개발 생산성을 높일 수 있습니다.

더 자세한 Querydsl 사용법은 Querydsl 공식 문서를 참고하시기 바랍니다.