6.1. jOOQ 개요 및 설정
6.1. jOOQ 개요
6.1.1. JPA 사용 금지
TQS 인증 프로젝트에서 JPA(Hibernate)는 사용을 금지합니다. 다음 의존성은 포함할 수 없습니다.
| 금지 의존성 | 사유 |
|---|---|
spring-boot-starter-data-jpa | JPA/Hibernate 포함 |
hibernate-core | ORM 프레임워크 |
spring-data-jpa | JPA 추상화 |
6.1.2. JPA 대신 jOOQ를 선택하는 근거
| 항목 | jOOQ | JPA/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: postgres6.2.2. 커스텀 설정 (필요 시)
jOOQ의 세부 동작을 커스터마이즈해야 하는 경우에만 설정 클래스를 작성합니다.
java
@Configuration
public class JooqConfig {
@Bean
public DefaultConfigurationCustomizer jooqConfigCustomizer() {
return configuration -> {
configuration.settings()
.withRenderNameCase(RenderNameCase.LOWER)
.withRenderQuotedNames(RenderQuotedNames.NEVER)
.withExecuteLogging(true);
};
}
}| 설정 | 값 | 설명 |
|---|---|---|
renderNameCase | LOWER | SQL 렌더링 시 소문자 사용 |
renderQuotedNames | NEVER | 식별자 인용 부호 미사용 |
executeLogging | true | 실행 SQL 로깅 활성화 |