목록BE (354)
오봉이와 함께하는 개발 블로그
조회용 샘플 데이터 입력 userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK package jpabook.jpashop; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.item.Book; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.persistence.EntityMana..
회원 조회 API 회원조회 V1: 응답 값으로 엔티티를 직접 외부에 노출 @GetMapping("/api/v1/members") public List membersV1() { return memberService.findMembers(); } 문제점 엔티티에 프레젠테이션 계층을 위한 로직이 추가된다. 기본적으로 엔티티의 모든 값이 노출된다. 응답 스펙을 맞추기 위해 로직이 추가된다. (@JsonIgnore, 별도의 뷰 로직 등등) 예 : 회원 정보에 대한 내용만 원하는데, Member 엔티티에는 orders에 대한 정보도 있기 때문에 주문 내역이 있으면 주문 내역도 응답해서 주문 내역에 대한 정보는 응답하지 않도록 한 경우 다른 API에서는 주문 내역만 응답을 원할 때는 곤란해진다. 실무에서는 같은 엔티..
회원 수정 API @Data static class UpdateMemberRequest { private String name; } @Data @AllArgsConstructor static class UpdateMemberResponse { private Long id; private String name; } @PostMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id, request.getName()); Member findMember..
회원 등록 API 이전 코드 : https://github.com/rhqudco/SpringLearn/tree/master/jpashop V1 엔티티를 Request Body에 직접 매핑 @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberRes..
코드 해당 내용을 설명하기 전 강의에 있는 코드는 아래 Github링크를 참조하자. https://github.com/rhqudco/SpringLearn/tree/master/jpashop 변경 감지와 병합 영속 상태의 엔티티는 변경이 감지되면 따로 persist 하지 않아도 JPA가 커밋 시점에 DB에 알아서 반영을 해준다. 이것을 변경감지(Dirty Checking)라고 한다. 문제는 준영속 엔티티다. 준영속 엔티티? 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 예를 들어 이미 DB에 저장했던 값을 다시 조회해서 JPA가 식별할 수 있는 식별자가 있고, 그것을 다시 객체 상태로 만든 것을 준영속 상태의 객체라고 한다. @PostMapping("/items/{itemId}/edit") pub..