[java] Java Querydsl을 사용하여 데이터베이스 테이블의 데이터 필드 유효성 검사 설정하기

Java Querydsl은 자바로 작성된 데이터베이스 쿼리를 바로 작성할 수 있는 편리한 도구입니다. 이를 활용하면 데이터베이스 테이블의 데이터 필드에 대한 유효성 검사 설정을 쉽게 할 수 있습니다. 이번 블로그 포스트에서는 Java Querydsl을 사용하여 데이터베이스 테이블의 데이터 필드 유효성 검사 설정하는 방법에 대해 알아보겠습니다.

1. Querydsl과 관련 라이브러리 추가하기

먼저, 프로젝트에 Querydsl과 관련 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가하면 됩니다.

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-core</artifactId>
    <version>4.4.0</version>
</dependency>

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>4.4.0</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가하면 됩니다.

dependencies {
    implementation 'com.querydsl:querydsl-core:4.4.0'
    implementation 'com.querydsl:querydsl-jpa:4.4.0'
}

2. Querydsl Entity 클래스 생성하기

Querydsl을 사용하기 위해 먼저 Entity 클래스를 생성해야 합니다. 이 클래스는 데이터베이스 테이블과 매핑되는 역할을 합니다. 필요한 필드를 추가하고, 각 필드에 대한 유효성 검사를 설정합니다.

@Entity
@Table(name = "sample_table")
public class SampleEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    @NotEmpty
    private String name;

    @Column(name = "email")
    @Email
    private String email;

    // getter, setter, constructors, etc.
}

위 예시에서는 @NotEmpty 어노테이션을 사용하여 name 필드가 비어있지 않도록, @Email 어노테이션을 사용하여 email 필드가 이메일 형식을 따르도록 유효성 검사를 설정하였습니다.

3. Querydsl QueryFactory 생성하기

QueryFactory는 Querydsl을 사용하여 쿼리를 생성할 수 있는 인스턴스를 생성하는 역할을 합니다. 다음과 같이 QueryFactory를 생성합니다.

@Configuration
public class QuerydslConfiguration {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory queryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}

위 예시에서는 @PersistenceContext 어노테이션을 사용하여 EntityManager를 주입받고, @Bean 어노테이션을 사용하여 QueryFactory를 빈으로 등록하였습니다.

4. Querydsl을 사용하여 데이터 필드 유효성 검사하기

이제 Querydsl을 사용하여 데이터 필드의 유효성 검사를 할 수 있습니다. 다음과 같이 Querydsl을 활용하여 데이터베이스 쿼리를 생성하고, 유효성 검사를 수행합니다.

@Repository
public class SampleRepository {

    private final JPAQueryFactory queryFactory;

    public SampleRepository(JPAQueryFactory queryFactory) {
        this.queryFactory = queryFactory;
    }

    public List<SampleEntity> findByName(String name) {
        return queryFactory
                .selectFrom(QSampleEntity.sampleEntity)
                .where(QSampleEntity.sampleEntity.name.eq(name))
                .fetch();
    }

    // 유효성 검사를 위한 메소드 추가
    public void validateAndSave(SampleEntity sampleEntity) {
        // 유효성 검사 로직
        if (StringUtils.isEmpty(sampleEntity.getName())) {
            throw new IllegalArgumentException("Name must not be empty");
        }

        if (!StringUtils.isEmpty(sampleEntity.getEmail())) {
            if (!EmailValidator.getInstance().isValid(sampleEntity.getEmail())) {
                throw new IllegalArgumentException("Invalid email format");
            }
        }

        // 데이터 저장
        entityManager.persist(sampleEntity);
    }
}

위 예시에서는 validateAndSave 메소드를 통해 데이터 필드의 유효성 검사를 수행하고, 데이터를 저장하는 로직을 추가하였습니다. 필요한 유효성 검사를 수행한 후, entityManager를 사용하여 데이터를 저장합니다.

마무리

이제 Java Querydsl을 사용하여 데이터베이스 테이블의 데이터 필드에 대한 유효성 검사를 설정하는 방법을 알아보았습니다. Querydsl을 활용하면 손쉽게 데이터 필드의 유효성 검사를 수행할 수 있으며, 데이터의 무결성을 보장할 수 있습니다.