삽질..

맞딱뜨린 오류와 그 해결을 위한 여정을 짧게 기록합니다.
삽질..

[JPA] N측 연관관계가 비어있을 때 N+1 나가는 현상

230321 ;; 해결 못했다. JPA + querydsl 사용 도중 문제 상황을 맞딱뜨렸다. 상황은 다음과 같다. 테이블은 세 개다. farm_log(일기) / user(유저) / good(좋아요) [farm_log에 좋아요를 누른 user] 연관 관계를 good이라는 연관 테이블에 매핑했다. JPA repository에서 farmLog.findAll()를 호출하면 N+1 문제에 의해 farmLog와 연관된 유저와 좋아요 엔티티의 갯수만큼 추가 쿼리가 나가게 된다. 이를 방지하기 위해 일단 default_batch_size=1000 을 application.properties에 넣어주고 시작했다. 그럼 추가 쿼리가 나가더라도 N번이 아닌 N/1000번이 나갈 것이기 때문이다. farmLog가 5개, 좋..

삽질..

[JUnit5] @BeforeAll, @AfterAll Non-static method로 구현하기

문제 상황 : Test Method끼리 공유하는 Bean 필요 JUnit5를 이용해 Spring Boot 프로젝트의 테스트코드를 작성하는 도중이었다. 하나의 @SpringBootTest 클래스 안에 존재하는 여러 개의 @Test method가 공유하는 Repository를 생성하고 싶었다. 코드로 말하면 아래와 같은 상황이다. @BeforeAll이 붙은 method가 테스트 method들을 실행하기 전 10명의 유저를 userRepository에 저장한다. 그 후 2개의 test method가 userRepository에 저장된 것을 테스트하는 것이다. @SpringBootTest public class EntityTest { @Autowired private UserRepository userRepos..

삽질..

@Transactional : 내부 method로 사용하면 안된다? !

수요일 오후, 도서관에 앉아 평화롭게 Spring boot 프로젝트를 진행하고 있던 부추.. 게시글에 좋아요 기능을 달기 위해 DB 수정 작업을 진행하던 도중, 무언가 이상함을 느끼게 된다. 해야하는 일은 getDataById()를 통해 얻은 DB data의 필드값 하나(좋아요 개수)를 바꾸는 일이었다. @Transactional 붙인 뒤에 data.increaseLikeNum() 이런거 하나 정의해서 뚝딱! 하면 되는거 아닌가 하고 별생각 없었는데, 이걸.. DB에 언제 어떻게 저장해야하는지.. 저 메쏘드를 언제 호출해야하는지 단계에서 막혔다. Optional 처리를 위해 data 객체를 @Transactional이 붙은 다른 내부 private method를 통해 불러왔다. 어, 이렇게 되면 내부 m..

삽질..

Spring Security의 Security Filter Chain 관련 Exception handling하기

Security Filter Chain에 등록된 authorization에 맞지 않는 client request가 들어왔을 때, 내가 해당 요청을 핸들링 하고 싶었다. Spring에서 상식적(?)으로 알려진 Exception 처리 방법이다.. @ControllerAdvice @Slf4j public class GreenFarmExceptionHandler { @ExceptionHandler(Exception.class) public String handleException( Exception e, HttpServletRequest request, Model model) { log.info("!! Unknown error! URL: {}, Stack Trace: {}", request.getRequestU..

김부추
'삽질..' 카테고리의 글 목록 (2 Page)