Skip to content

6.1. jOOQ 개요 및 설정

6.1. jOOQ 개요

6.1.1. JPA 사용 금지

TQS 인증 프로젝트에서 JPA(Hibernate)는 사용을 금지합니다. 다음 의존성은 포함할 수 없습니다.

금지 의존성사유
spring-boot-starter-data-jpaJPA/Hibernate 포함
hibernate-coreORM 프레임워크
spring-data-jpaJPA 추상화

6.1.2. JPA 대신 jOOQ를 선택하는 근거

항목jOOQJPA/Hibernate
SQL 제어개발자가 SQL을 직접 작성ORM이 SQL을 자동 생성
성능 예측실행되는 SQL을 정확히 예측 가능N+1, 지연 로딩 등 예측 어려움
타입 안전성컴파일 타임에 SQL 오류 검출런타임에 오류 발생
복잡한 쿼리네이티브 SQL 수준의 표현력JPQL 한계, 네이티브 쿼리 필요
스키마 동기화Flyway + codegen으로 항상 최신 상태Entity 매핑 불일치 위험

6.1.3. 표준 의존성

xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>

spring-boot-starter-jooq는 다음을 포함합니다:

  • jOOQ 코어 라이브러리
  • Spring Transaction 통합
  • DSLContext 자동 구성

6.2. DSLContext 설정

6.2.1. 자동 구성

Spring Boot의 자동 구성을 통해 DSLContext가 Bean으로 등록됩니다. application.yml에 데이터소스와 jOOQ 설정을 추가하면 별도의 Java 설정 없이 사용할 수 있습니다.

yaml
spring:
  jooq:
    sql-dialect: postgres

6.2.2. 커스텀 설정 (필요 시)

jOOQ의 세부 동작을 커스터마이즈해야 하는 경우에만 설정 클래스를 작성합니다.

java
@Configuration
public class JooqConfig {

  @Bean
  public DefaultConfigurationCustomizer jooqConfigCustomizer() {
    return configuration -> {
      configuration.settings()
          .withRenderNameCase(RenderNameCase.LOWER)
          .withRenderQuotedNames(RenderQuotedNames.NEVER)
          .withExecuteLogging(true);
    };
  }
}
설정설명
renderNameCaseLOWERSQL 렌더링 시 소문자 사용
renderQuotedNamesNEVER식별자 인용 부호 미사용
executeLoggingtrue실행 SQL 로깅 활성화

TIENIPIA QUALIFIED STANDARD