Skip to content

6.6. jOOQ 코딩 규칙

6.6.1. 테이블/필드 참조

생성된 상수를 사용합니다. 문자열로 테이블이나 컬럼을 참조하지 않습니다.

java
// 올바른 예 (생성된 상수 사용)
dsl.selectFrom(USERS).where(USERS.EMAIL.eq(email));

// 잘못된 예 (문자열 사용)
dsl.selectFrom(DSL.table("users")).where(DSL.field("email").eq(email));

6.6.2. Record → DTO 변환

Record에서 DTO로 변환하는 로직은 DTO의 정적 팩토리 메서드에 작성합니다.

java
public record UserResponse(
    Long id,
    String name,
    String email,
    OffsetDateTime createdAt
) {

  public static UserResponse from(UsersRecord record) {
    return new UserResponse(
        record.getId(),
        record.getName(),
        record.getEmail(),
        record.getCreatedAt()
    );
  }
}

6.6.3. Batch 처리

대량 데이터 처리 시 batch 연산을 사용합니다.

java
public void insertBatch(List<CreateUserRequest> requests) {
  var inserts = requests.stream()
      .map(req -> dsl.insertInto(USERS)
          .set(USERS.NAME, req.name())
          .set(USERS.EMAIL, req.email()))
      .toList();

  dsl.batch(inserts).execute();
}

6.6.4. 금지 패턴

금지 패턴올바른 패턴
DSL.table("users") (문자열 테이블 참조)USERS (생성된 상수)
DSL.field("name") (문자열 필드 참조)USERS.NAME (생성된 상수)
dsl.execute("SELECT ...") (raw SQL)DSL API 사용
Controller에서 DSLContext 직접 사용Repository 계층에서만 사용
Repository에서 @Transactional 선언Service 계층에서 선언

필수

jOOQ의 타입 안전 DSL API를 사용해야 합니다. 문자열 기반 SQL이나 raw query 사용은 TQS 인증 심사에서 부적합 판정을 받습니다.

TIENIPIA QUALIFIED STANDARD