Skip to content

7.5. Flyway + jOOQ codegen 통합 빌드 흐름

7.5.1. 빌드 순서

┌─────────────────────────────────────────────────────────┐
│                    mvn compile                           │
└──────────────────────┬──────────────────────────────────┘


              ┌─────────────────┐
              │  flyway:migrate  │   ① DB 스키마 적용
              └────────┬────────┘


              ┌─────────────────┐
              │  jooq:generate   │   ② Java 코드 생성
              └────────┬────────┘


              ┌─────────────────┐
              │    compile       │   ③ 컴파일
              └─────────────────┘

7.5.2. Maven 실행 순서 설정

pom.xml에서 플러그인 실행 순서를 <phase><execution> 순서로 제어합니다.

xml
<build>
  <plugins>
    <!-- 1단계: Flyway 마이그레이션 -->
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <executions>
        <execution>
          <id>flyway-migrate</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>migrate</goal>
          </goals>
        </execution>
      </executions>
      <!-- 설정 생략 ([Flyway 설정](/ko/backend/data/flyway-config) 문서를 참고합니다) -->
    </plugin>

    <!-- 2단계: jOOQ 코드 생성 -->
    <plugin>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-codegen-maven</artifactId>
      <executions>
        <execution>
          <id>jooq-codegen</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>generate</goal>
          </goals>
        </execution>
      </executions>
      <!-- 설정 생략 ([jOOQ 코드 생성](/ko/backend/data/jooq-codegen) 문서를 참고합니다) -->
    </plugin>
  </plugins>
</build>

7.5.3. 로컬 개발 워크플로우

  1. Docker Compose로 PostgreSQL을 실행합니다.
  2. 마이그레이션 파일을 작성합니다 (src/main/resources/db/migration/).
  3. mvn generate-sources를 실행하여 Flyway 마이그레이션 + jOOQ codegen을 수행합니다.
  4. 생성된 jOOQ 클래스를 사용하여 Repository 코드를 작성합니다.
bash
# PostgreSQL 실행
docker compose up -d

# 마이그레이션 + 코드 생성
mvn generate-sources

# 애플리케이션 실행
mvn spring-boot:run

7.5.4. CI 환경 워크플로우

CI에서는 Flyway 마이그레이션과 jOOQ codegen을 위해 PostgreSQL 서비스가 필요합니다.

yaml
# .circleci/config.yml (발췌)
backend-build:
  docker:
    - image: cimg/openjdk:21.0
    - image: cimg/postgres:16.0
      environment:
        POSTGRES_DB: flowin
        POSTGRES_USER: flowin
        POSTGRES_PASSWORD: flowin1234
  steps:
    - checkout
    - run:
        name: DB 대기
        command: dockerize -wait tcp://localhost:5432 -timeout 60s
    - run:
        name: 빌드 (마이그레이션 + codegen + 컴파일)
        command: mvn package

TIENIPIA QUALIFIED STANDARD