Daily log

 

Jooq(Java Object Oriented Querying)은 타입 안정성 있는 SQL DSL을 제공하는 Java 기반 라이브러리다. SQL을 코드로 작성할 수 있게 하되, JDBC나 JPA처럼 객체 중심이 아닌 SQL 중심의 접근 방식을 취한다. SQL의 강력함과 Java의 정적 타이핑을 결합하여, 복잡한 쿼리도 안전하게 작성할 수 있다.


1. 왜 Jooq를 사용하는가?

✅ SQL 그대로 활용

  • 복잡한 SQL을 그대로 Java 코드에서 사용 가능
  • DBMS별 함수나 쿼리 문법을 제약 없이 사용할 수 있다

✅ 타입 안전성과 자동 완성

  • SQL 문법이 Java 코드로 옮겨져 있어 컴파일 시점에 오류를 잡을 수 있다
  • IDE에서 자동완성, 문법 체크 가능 → 유지보수성 증가

✅ 코드와 DB 구조 싱크

  • Jooq는 DB 스키마를 분석하여 코드로 생성해준다
  • 컬럼명, 테이블명 등을 TABLE.COLUMN 형태로 코드에서 그대로 사용 가능

2. Jooq의 주요 특징

기능 설명
DSL 기반 쿼리 Java 코드로 SQL 문법을 표현
타입 안전 쿼리 작성 시 오타, 잘못된 컬럼명 등을 컴파일 단계에서 탐지
DB 종속적 기능 허용 윈도우 함수, CTE, JSON 처리 등 DBMS의 고급 기능 활용 가능
코드 생성기 DB 스키마로부터 Java 클래스를 생성하여 테이블/컬럼을 코드로 다룸
트랜잭션 및 DSLContext Spring이나 Java EE와 통합하여 트랜잭션 처리 가능

3. 간단한 사용 예시

// 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에서 자동 생성된 코드


4. Spring Boot + Jooq 통합

// 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);
    }
}

5. 코드 생성기 설정

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>

6. 언제 사용하면 좋은가?

  • 복잡한 SQL을 자주 다루는 프로젝트
  • JPA의 한계를 느끼는 경우 (복잡한 JOIN, Window Function 등)
  • SQL 작성에 익숙한 팀
  • DB 중심의 설계 또는 레거시 DB 연동

7. 마무리

Jooq는 SQL과 Java를 자연스럽게 연결해주는 훌륭한 도구다. 특히 SQL의 자유도를 유지하면서도 정적 타이핑의 이점을 누리고 싶을 때 큰 도움이 된다. Spring Boot와도 자연스럽게 통합되며, 복잡한 데이터 조회 로직을 명확하게 표현할 수 있다.

"JPA는 객체 지향, Jooq는 SQL 지향. 어떤 프로젝트든 둘 사이에서 균형을 잡는 것이 핵심이다."


공유하기

facebook twitter kakaoTalk kakaostory naver band