Skip to content

6.3. jOOQ 코드 생성

6.3.1. 개요

jOOQ는 데이터베이스 스키마로부터 타입 안전한 Java 클래스를 자동 생성합니다. Flyway로 마이그레이션을 적용한 후 jOOQ codegen을 실행하여 항상 스키마와 코드를 동기화합니다.

Flyway 마이그레이션 실행 → DB 스키마 반영 → jOOQ codegen → Java 클래스 생성

6.3.2. Maven 플러그인 설정

xml
<plugin>
  <groupId>org.jooq</groupId>
  <artifactId>jooq-codegen-maven</artifactId>
  <version>${jooq.version}</version>
  <executions>
    <execution>
      <id>jooq-codegen</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <jdbc>
      <driver>org.postgresql.Driver</driver>
      <url>jdbc:postgresql://localhost:5432/flowin</url>
      <user>flowin</user>
      <password>flowin1234</password>
    </jdbc>
    <generator>
      <database>
        <name>org.jooq.meta.postgres.PostgresDatabase</name>
        <inputSchema>public</inputSchema>
        <includes>.*</includes>
        <excludes>flyway_schema_history</excludes>
      </database>
      <target>
        <packageName>com.tienipia.flowin.jooq</packageName>
        <directory>target/generated-sources/jooq</directory>
      </target>
      <generate>
        <records>true</records>
        <daos>false</daos>
        <pojos>false</pojos>
        <fluentSetters>true</fluentSetters>
        <javaTimeTypes>true</javaTimeTypes>
      </generate>
    </generator>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>${postgresql.version}</version>
    </dependency>
  </dependencies>
</plugin>

6.3.3. 코드 생성 설정 원칙

설정사유
recordstrueRecord 클래스 생성 (CRUD에 활용)
daosfalseDAO 자동 생성 미사용 (직접 Repository 작성)
pojosfalsePOJO 미사용 (별도 DTO 사용)
fluentSetterstrue메서드 체이닝 지원
javaTimeTypestruejava.time 타입 사용 (Timestamp 대신)
excludesflyway_schema_historyFlyway 내부 테이블 제외

6.3.4. 생성된 코드 관리

  • 생성 위치: target/generated-sources/jooq/
  • 생성된 코드는 Git에 커밋하지 않습니다. 빌드 시 항상 재생성합니다.
  • .gitignore에 다음을 포함합니다:
txt
target/generated-sources/

6.3.5. 생성 코드 구조

target/generated-sources/jooq/
└── com/tienipia/flowin/jooq/
    ├── DefaultCatalog.java
    ├── Public.java           # 스키마 참조
    ├── Keys.java             # PK, FK 정의
    ├── Tables.java           # 테이블 상수
    └── tables/
        ├── Users.java        # 테이블 정의
        ├── Orders.java
        └── records/
            ├── UsersRecord.java    # Record 클래스
            └── OrdersRecord.java

TIENIPIA QUALIFIED STANDARD