Spring (183) 썸네일형 리스트형 [Spring Data JPA] Intro 이번 장에서는 Spring Data JPA의 기능을 살펴보기 전에 무엇인지 간략하게 알아보도록 한다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 스프링 부트와 일반 JPA를 사용하면서 개발 생산성을 많이 높여왔다. 하지만 여기에 스프링 데이터 JPA까지 사용하게 되면 더욱 개발 생산성이 높아진다. 이번 장에서는 축구선수(SoccerPlayer)와 선수들이 속해있는 팀(Team)을 가지고 예를 들어본다. SoccerPlayer @Entity @Getter @Setter @ToString(of = {"id", "name", "age"}) @NoArgsConstructor(access = PROTECTED) public class SoccerPla.. [JPA] OSIV 이번 장에서는 JPA의 OSIV에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. OSIV는 하이버네이트의 Open Session In View의 줄임말이다. 같은 의미를 가지는 JPA의 Open EntityManager In View라는 표현이 있지만 일반적으로 OSIV라고 불리며 Spring에서는 둘을 모두 포괄하는 의미에서 Open In View라고 한다. OSIV 활성화 OSIV는 기본적으로 활성화 되어있다. 이러한 이유로 Spring 프로젝트를 실행할 때 아래의 이미지와 같이 open-in-view is enabled by default라는 WARN 메시지가 뜨게된다. Spring에서 INFO 메시지가 아닌 WARN 메시.. [JPA] Optimizing xToMany Relation - 2 이번 장에서는 xToMany 성능 최적화 1 (링크)에 이어 xToMany 연관관계의 최적화에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Step 5: DTO를 직접 조회하는 방법 (1 + N 쿼리 발생) 이번에는 Root Entity와 함께 xToMany를 제외한 관계의 데이터를 한 번에 조회하고 조회된 결과를 가지고 xToMany 관계의 데이터를 따로 조회하여 set 시키는 방식으로 진행한다. 이렇게 진행하는 경우 1 + N...(몇 번의 쿼리가 발생할지 모르는 상황)에서 1 + N으로 쿼리의 수를 줄일 수 있다. 또한 컬렉션 조인이 아니기 때문에 페이징 처리도 가능하다. OrderCollectionAPIControlle.. [JPA] Optimizing xToMany Relation - 1 이번 장에서는 xToOne 성능 최적화 (링크)에 이어 xToMany 연관관계의 최적화에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Step 1: Response에 Entity를 사용하는 경우 Entity를 그대로 Response의 값으로 사용하는 방법이다. OrderCollectionAPIController @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/orders") public class OrderCollectionAPIController { private final OrderRepository orderRepository; @GetMapp.. [JPA] Optimizing xToOne Relation 이번 장에서는 Entity 생성 및 갱신 최적화 (링크)에 이어 XToOne 연관관계의 최적화에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Step 1: Response에 Entity를 사용하는 경우 OrderAPIController @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/order") public class OrderAPIController { private final OrderRepository orderRepository; @GetMapping(value = "", headers = "X-API-VERSION=1") public Li.. [JPA] Optimizing Insert & Update 이번 장에서는 Entity 생성 및 갱신 최적화에 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Step 1 (Insert): Request Body에 Member Entity가 사용되는 경우 MemberController @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/member") public class MemberAPIController { private final MemberService memberService; @PostMapping(value = "", headers = "X-API-VERSION=1") public Member.Response.. [JPA] Merge 이번 장에서는 JPA의 병합(이하 Merge)에 자세하게 알아본다. Merge를 이해하기 위해서는 Entity의 생명주기 (링크)를 이해하고 있어야한다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 준영속 Entity 준영속 상태의 Entity는 id가 존재해야한다. id가 존재한다는 것은 DB에 한 번이라도 Insert되었다는 의미가 된다. id는 존재하지만 영속성 컨텍스트의 관리를 받지 못하는 상태를 의미한다. 이번 장에서는 잘못된 API 설계로 클라이언트가 Entity를 수정하기 위해서 서버로 Entity를 전달하고 수정하는 상황을 만들어본다. 이러한 상황에서 Merge를 사용하면 발생하는 문제를 확인해보고 어떠한 방식으로 풀어야하는지에 .. [JPA] JPQL - 3 이번 장에서는 JPQL-1(링크)에 이어 JPQL의 기능들에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Class와 Entity에 대한 설명은 JPQL-1의 글에서 확인한다. 엔티티 직접 사용 우리는 쿼리를 작성할 때 대부분 PK나 FK를 사용하여 조회한다. 이러한 검색 조건들은 객체가 아니라 대부분 숫자로 구성되어 있을 것이다. 하지만 JPQL에서 쿼리를 작성할 때 Entity의 id를 사용하는 것과 Entity 자체를 사용하는 것이 동일하게 취급된다. 예를 들어 아래는 Customer Entity에서 특정 결과를 카운트 하는 코드다. SELECT COUNT(C) FROM Customer C WHERE C.id > 50; .. 이전 1 ··· 18 19 20 21 22 23 다음