Jooq(Java Object Oriented Querying)은 타입 안정성 있는 SQL DSL을 제공하는 Java 기반 라이브러리다. SQL을 코드로 작성할 수 있게 하되, JDBC나 JPA처럼 객체 중심이 아닌 SQL 중심의 접근 방식을 취한다. SQL의 강력함과 Java의 정적 타이핑을 결합하여, 복잡한 쿼리도 안전하게 작성할 수 있다.
기능 | 설명 |
DSL 기반 쿼리 | Java 코드로 SQL 문법을 표현 |
타입 안전 | 쿼리 작성 시 오타, 잘못된 컬럼명 등을 컴파일 단계에서 탐지 |
DB 종속적 기능 허용 | 윈도우 함수, CTE, JSON 처리 등 DBMS의 고급 기능 활용 가능 |
코드 생성기 | DB 스키마로부터 Java 클래스를 생성하여 테이블/컬럼을 코드로 다룸 |
트랜잭션 및 DSLContext | Spring이나 Java EE와 통합하여 트랜잭션 처리 가능 |
// SELECT * FROM MEMBER WHERE AGE > 20 ORDER BY NAME ASC
DSLContext create = DSL.using(configuration);
List<MemberRecord> result = create
.selectFrom(MEMBER)
.where(MEMBER.AGE.gt(20))
.orderBy(MEMBER.NAME.asc())
.fetch();
→ MEMBER, AGE, NAME은 DB에서 자동 생성된 코드
// build.gradle
implementation 'org.jooq:jooq'
implementation 'org.jooq:jooq-meta'
implementation 'org.jooq:jooq-codegen'
# application.yml
spring:
jooq:
sql-dialect: POSTGRES
@Configuration
public class JooqConfig {
@Bean
public DefaultDSLContext dslContext(Configuration configuration) {
return new DefaultDSLContext(configuration);
}
}
Maven이나 Gradle로 DB 스키마를 기반으로 Java 클래스를 생성 가능하다.
<generator>
<database>
<name>org.jooq.meta.mysql.MySQLDatabase</name>
<inputSchema>my_schema</inputSchema>
</database>
<target>
<packageName>com.example.jooq</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
</generator>
Jooq는 SQL과 Java를 자연스럽게 연결해주는 훌륭한 도구다. 특히 SQL의 자유도를 유지하면서도 정적 타이핑의 이점을 누리고 싶을 때 큰 도움이 된다. Spring Boot와도 자연스럽게 통합되며, 복잡한 데이터 조회 로직을 명확하게 표현할 수 있다.
"JPA는 객체 지향, Jooq는 SQL 지향. 어떤 프로젝트든 둘 사이에서 균형을 잡는 것이 핵심이다."
@EventListener 완벽 가이드 (0) | 2025.06.03 |
---|---|
Liquibase로 DB 변경 이력 관리하기 (0) | 2025.06.02 |
Spring Boot + GitLab CI/CD 배포 방법 (3) | 2025.06.01 |
[Spring & Swagger] Failed to load API definition. (0) | 2025.05.21 |
[JPA] - 영속성 컨텍스트에 대해 (0) | 2024.12.17 |