Programing/Spring Boot 24

Querydsl 동적 쿼리 사용하는 2가지 방법 (Builder, where절 파라미터)

1. Builder를 사용 하는 방법 fun searchByBuilder(condition: MemberSearchCondition): List{ val builder = BooleanBuilder() //StringUtils.hasText를 통해 null Or "" 대응 if(StringUtils.hasText(condition.name)){ builder.and(member.name.eq(condition.name)) } if(StringUtils.hasText(condition.age)){ builder.and(member.age.eq(condition.age)) } return queryFactory.selectFrom(member) .where(builder) .fetch() } 2. Where..

SpringBoot 테스트코드 작성시 Security 권한 무시하는법 @PreAuthorize우회 하기

1. Security Test Configuration 작성: Spring Security의 SecurityTestExecutionListener를 활용하여 테스트용 Security 설정을 제공할 수 있습니다. 이를 통해 테스트 코드에서는 실제 사용자 인증 절차를 거치지 않고도 접근할 수 있습니다. 아래는 예시입니다 @ExtendWith(SpringExtension::class) @SpringBootTest @TestExecutionListeners( listeners = [SecurityTestExecutionListener::class], mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS ) class MemberServiceTest ..

Querydsl Pageable편하게 쓰기 확장함수, 유틸리티

아래 확장함수를 추가하여 기존 Pageable을 좀더 편하게 사용 할 수 있다. QuerydslUtil 클래스 파일을 만들고 거기에 아래 함수 추가, 필요한곳에서 import해서 쓰면 된다 fun JPAQuery.withPageable(pageable: Pageable): JPAQuery { return this.limit(pageable.pageSize.toLong()).offset(pageable.offset) } override fun findBySearchPage(condition: MemberSearchCondition, pageable: Pageable): Page { //사용법 val content = query.selectFrom(member) .where( member.name.eq(co..

코틀린 QueryDsl 설정 적용하는 방법

1.build.gradle에 querydsl, kapt 라이브러리 추가 //build.gradle plugins { id("org.springframework.boot") version "2.4.12" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("kapt") version "1.4.32" // 추가 } dependencies { //querydsl 추가 sourceSets.main { withConvention(org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet::class) { kotlin.srcDir("$buildDir/generated/source/kapt/main") } } v..

Querydsl 에러 Could not autowire. No beans of 'JPAQueryFactory' type found. 에러

JPAQueryFactory를 자동 주입할 수 없는 오류가 발생하고 있습니다. 이 문제를 해결하기 위해 다음과 같은 접근 방법을 시도해 볼 수 있습니다. 1. JPAQueryFactory의 빈을 정의하기: JPAQueryFactory는 Spring Data JPA Querydsl을 사용할 때 자동으로 생성되는 빈이 아닙니다. 따라서 JPAQueryFactory의 빈을 직접 정의해야 합니다. 아래와 같이 @Configuration 어노테이션이 지정된 클래스를 생성하고, JPAQueryFactory 빈을 정의해줍니다. import com.querydsl.jpa.impl.JPAQueryFactory import org.springframework.context.annotation.Bean import org...

JPA 컬렉션을 페치조인하면 페이징이 불가능하다

페이징기능을 사용함에 있어 OneToMany 관계를 페치 조인하여 가져왔다더니 속도가 너무 안나오는 현상이 있었다. 30초 소요 그래서 찾아보니 일대다 조인시 전체 데이터를 조회하고 메모리에서 페이징을 하기 때문에 오래 걸린다. 컬렉션을 페치 조인 하면 페이징이 불가능하다 컬렉션을 페치 조인하면 일대다 조인이 발생하므로 데이터가 예측할 수 없이 증가한다. 일대다에서 일(1)을 기준으로 페이징을 하는 것이 목적이다. 그런데 데이터는 다(N)를 기준으로 row가 생성된다. Order를 기준으로 페이징 하고 싶은데, 다(N)인 OrderItem을 조인하면 OrderItem이 기준이 되어버린다. 더 자세한 내용은 자바 ORM 표준 JPA 프로그래밍 - 페치 조인 한계 참조) 이 경우 하이버 네이트는 경고 로그를..