에러 발생MSSQL을 사용하면서 JPA와 QueryDSL을 활용하여 페이징 처리를 하다가 첫 페이지 조회 할때는 TOP 쿼리를 사용하여 데이터를 성공적으로 가져오지만, 두 번째 페이지부터는 OFFSET을 사용해야 하는데 이때 OFFSET이 존재하지 않는다는 에러가 발생했다. 에러 로그에러 로그는 다음과 같다. [12:27:08.181][DEBUG] org.springframework.orm.jpa.JpaTransactionManager[doCleanupAfterCompletion:648] - Closing JPA EntityManager [SessionImpl(1815722544)] after transaction [12:27:08.181][INFO ] org.springframework.test.c..
Spring/Spring 트러블 슈팅
QueryDSL에서 Projections.constructor 사용해서 SQL 함수 사용하기 문제 상황 SubComment와 Recipe 엔티티에는 다음과 같이 LocalDateTime 타입으로 선언된 생성 날짜가 있다. @CreatedDate @Column(name = "create_dttm", nullable = false) private LocalDateTime createDateTime; 이렇게 선언되어 있는 생성 날짜를 각각의 DTO객체인 SubCommentListResponseDto와 RecipeListResponseDto에서 String 객체인 createDate로 맵핑해서 조회하려고 시도했다. private String createDate; QueryDSL에서는 TO_CHAR 함수를 사용하..
스칼라 서브쿼리(Scalar Subquery)에서 Limit절 오류 해결 문제 상황 레시피의 썸네일 이미지를 가져오기 위한 쿼리 작성 시 문제가 발생했다. 목표는 각 레시피별로 fileOrder가 가장 낮은, 즉 가장 먼저 업로드한 썸네일 하나만을 추출하는 것이었다. 이를 위해 JPQL을 사용하여 서브쿼리를 구성하고, orderBy와 limit(1)을 통해 단일 결과를 얻으려 했다. 하지만 예상과 달리 문제가 발생했다. // 레시피 썸네일 조회 서브쿼리 JPQLQuery recipeThumbnailSubQuery = JPAExpressions .select(recipeFileEntity.storedFilePath) .from(recipeFileEntity) .where(recipeFileEntity.re..
QueryDSL에서 NPE 해결하기 - 서브쿼리와 외부 조인의 활용 📌 서론 QueryDsl을 이용해서 쿼리문을 작성하던 중 NPE가 발생하는 이슈가 생겼다. 이유는 join의 방식에 있었는데 같이 알아보자. 문제 상황 회원 정보와 함께 프로필 이미지 경로를 조회하는 QueryDSL을 작성하는 과정에서, 특정 문제에 직면했다. 코드는 다음과 같다: jpaQueryFactory .select(Projections.fields(MyPage.class, memberEntity.id.as("memberId"), memberEntity.memberFileEntity.storedFilePath.as("profileImageFilePath"), memberEntity.nickname.as("nickname"), me..
단위테스트에서 사용되는 Static 메소드를 Mock으로 주입할때 발생하는 문제 해결 방법 에러 발생 코드 일단 내가 단위 테스트를 진행하고 싶은 서비스는 아래와 같다. 사용자에게 받은 refresh token을 검증하고 유효한 토큰이면 TokenUtils의 static 메서드를 사용해 accessToken을 재발행해주는 로직이다. import lombok.RequiredArgsConstructor; import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time...
스프링 시큐리티: 커스텀 에러 처리 실패 원인 분석 및 해결 방법 원하는 프로세스 스프링 시큐리티를 활용한 CustomAuthenticationProvider 클래스에서 이메일은 맞았는데 비밀번호가 틀렸을 때 커스텀 에러 클래스인 MemberApplicationException을 던지도록 설정했으나, 예상과 달리 NullPointerException이 발생하며 예외 처리가 제대로 이루어지지 않았다. 이에 대한 원인 분석 및 해결 방안을 제시해 보겠다. 정상 작동 안 된 실패 코드 스프링 시큐리티를 이용해 로그인을 시도할 때 비밀번호가 틀리면 내가 정의한 에러코드를 throw 하는 로직으로 개발했다. 아래는 CustomAuthenticationProvider 클래스에서 로그인 검증을 처리 중 비밀번호가 ..
BCryptPasswordEncoder.encode를 이용해서 로그인 로직을 구현했을 때 로그인이 실패하는 이슈 발생 오류 발생 멤버 테이블에 사용자의 비밀번호는 암호화된 상태로 저장되어 있다. 로그인 프로세스에서 사용자가 입력한 이메일에 해당하는 멤버를 찾아, 그 멤버의 비밀번호와 사용자가 입력한 비밀번호를 암호화한 값이 일치하는지를 비교한다. 이 과정에서 사용된 암호화 클래스는 BCryptPasswordEncoder이다. 하지만, 사용자가 정확한 비밀번호를 입력해도 로그인이 실패하는 문제가 발생했다. 이는 로그인 로직의 비밀번호 확인 방식에 오류가 있었기 때문이다. 아래는 기존 코드다. LoginService 코드 import org.springframework.security.crypto.bcryp..