Spring
-
[JPA] 언제 N+1이 발생할까?Spring/JPA 2023. 6. 22. 23:56
☑️ 개요 N+1은 DB 액세스 시스템 중 JPA에서 나타나는 문제이고 JPA 사용 경험이 있는 사람들은 대부분 인지하고 있는 부분이다. 하지만 좀 더 상세한 설명이 있었으면 좋겠다고 생각하여 포스팅하였다. ✅ @OneToMany N+1은 JPA의 매핑관계 중 하나인 '@OneToMany'를 사용해서 연관 엔티티를 불러올 때 발생할 수 있습니다. 1. 하나의 데이터를 조회한 후, 연관 엔티티를 조회 2. 데이터 컬렉션을 조회한 후, 연관 엔티티를 조회 이 두 가지 경우를 FetchType별로 확인해보겠습니다. Team-User를 예시로 들어서 @OneToMany를 사용하는 상황을 설명하겠습니다. ▶️ Team 단건 엔티티 조회 식별자를 기준으로 하나의 Team 엔티티를 조회합니다. 하이버네이트가 아닌 순..
-
[ExceptionHandler] 작은 실수로 만나게 될 2가지 에러Spring/Spring Boot 2023. 4. 30. 00:39
☑️ 개요 개인 프로젝트를 진행하면서 API의 기능을 정상적으로 완료할 수 없는 상황에서 유저에게 어떠한 예외 상황이 발생하였는지 리턴하는 기능이 필요했다. Exception을 발생시기고 ExceptionHandler를 통해 ResponseEntity를 리턴했다. 이를 적용하면서 두 가지 비슷하지만 다른 이유의 에러가 발생하여서 이 글을 작성한다. Case 1) Could not resolve parameter [0] java.lang.IllegalStateException: Could not resolve parameter [0] in public org.springframework.http.ResponseEntity ~.Controller.-method(~.-DTO): No suitable resol..
-
[JPA] 엔티티 연관관계 매핑 테스트 (2) : @Embedded, @ElementCollection 사용해보기Spring/JPA 2023. 4. 25. 17:33
이전 포스팅에 이어서 엔티티 연관관계 매핑에 대해 작성합니다. DDD 책에서는 밸류 객체라는 개념이 등장합니다. (해당 게시글에서는 자세히 설명하지 않습니다.) 하나의 엔티티에 포함되어있는 밸류 객체를 @Embedded를 통해 선언해보고 @OneToMany와 비교해보고자 합니다. 모든 소스코드는 GitHub에 첨부해 두었습니다. ☑️ 상황 설정 지난 게시글과 마찬가지로 Order와 OrderLine으로 테스트합니다. case 3) @Embedded 사실 해당 어노테이션만을 사용해서 Order와 OrderLine을 표현하는 코드를 작성해보면 데이터를 나타내기에 적합하지 않다는 것을 금방 알 수 있습니다. 밸류 객체를 사용하는 예시에서 엔티티와 1:1로 매핑되는 데이터에 해당 어노테이션이 쓰였기 때문입니다...
-
[JPA] 엔티티 연관관계 매핑 테스트 (1) : @OneToMany, @ManyToOneSpring/JPA 2023. 4. 23. 23:32
☑️ 글 작성 개요 최근 김영한님의 JPA 프로그래밍과 최범균님의 도메인 주도 개발 시작하기 (이하 DDD 시작하기), 두 책을 병행하면서 읽고 있다. 그러던 중, DDD 시작하기 책에서 객체지향의 사용성을 높이기 위한 ORM 사용으로 JPA를 활용하는 파트를 공부하게 되었다. JPA 책에서는 @OneToMany 혹은 @ManyToOne와 같은 어노테이션을 사용하여 연관 엔티티와 매핑을 하고, 이를 데이터베이스 테이블에서는 어떻게 생성되는지 공부했다. 나는 @ManyToOne, @OneToMany를 활용한 컬렉션 형태의 매핑은 사용해본 경험이 없어서, 더 이해가 어려웠다. 그런데 DDD 시작하기에서 JPA의 사용 예제 중 하나로 컬렉션 데이터를 담는 용도로 @CollectionTable을 사용하여 데이터..
-
[JPA] 영속성에 대한 초간단 테스트Spring/JPA 2023. 4. 6. 17:02
JPA의 영속성에 대해 공부하면서 생긴 궁금증들을 직접 실험하고 알아보는 시간을 가졌습니다. * 내용 오류, 오탈자 피드백은 언제나 감사하게 받고 있습니다. 확인 후 수정하도록 하겠습니다. 해당 포스팅에 사용된 Repository는 다음과 같이 상속받고 있습니다. 1. @Transactional 영속성 컨텍스트를 사용하려면 @Transactional을 꼭 사용해야 할까요? 1-1. @Transational 사용 여부에 따른 조회 1) @Transactionl 없음 동일 쿼리 3번 조회 2) @Transactionl 있음 쿼리 1번 조회 3) 두 메소드의 호출 순서에 영향이 있을까? -> 결과적으로 두 메소드의 호출 순서에 따른 쿼리 조회 횟수는 변화가 없었습니다. 해당 결과로 보았을 때, @Transac..