회원 등록 API 회원을 등록하기 위한 API를 만드는 단계이다. 버전 1 @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 CreateMemberResponse(id); } @Data static class CreateMemberResponse { private L..
Spring JPA 공부
상품 등록 상품 등록 폼 @Getter @Setter public class BookForm { private Long id; private String name; private int price; private int stockQuantity; private String author; private String isbn; } 상품 등록 컨트롤러 @Controller @RequiredArgsConstructor public class ItemController { private final ItemService itemService; //상품등록 화면 띄우기 @GetMapping("/items/new") public String createForm(Model model){ model.addAttribute..
준영속 엔티티 영속 상태이면 그 엔티티의 값만 바꾸면 JPA가 커밋 시점에 값을 바꿔준다. 하지만 준영속 엔티티일 때는 문제가 생긴다. 준영속 엔티티는 영속성 콘텍스트가 더는 관리하지 않는 엔티티를 말한다. 우리 예제에서는 itemService.saveItem(book)에서 수정을 시도하는 Book객체다. 수정을 할 때는 DB에 한번 저장되어 있던 것을 다시 꺼내와 임의로 엔티티로 다시 만드는 것이다. 이렇게 DB에서 저장되었다가 다시 꺼내온 엔티티를 준영속 엔티티로 볼 수 있다.(임의로 만들어낸 엔티티도 기존 식별자를 가지고 있는 경우 = id를 가지고 있는경우) 준영속 엔티티를 수정하는 2가지 방법 변경 감지 기능 사용 //ItemService @Transactional public void upda..
홈 화면과 레이아웃 홈 화면은 회원 기능, 상품 기능, 주문 기능을 선택할 수 있게 해주는 곳이다. 홈 컨트롤러 @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home(){ log.info("home controller"); return "home"; } } 홈 컨트롤러는 springBoot에서 늘 사용하던 컨트롤러이다. 제일 처음 home이기 때문에 RequestMapping이 /임을 알 수 있다. return은 home.html을 나타낸다. @Slf4j는 log를 사용할 수 있게 해준다. 강의에서 주는 html 파일을 templates 패키지에 추가하면 화면이 나온다. 예제에서는 뷰 템플릿을 최대한..
구현 기능은 상품 주문, 주문 내역 조회, 주문 취소가 있다. 구현 순서는 주문 엔티티, 주문상품 엔티티 개발 -> 주문 리포지토리 개발 -> 주문 서비스 개발 -> 주문 검색 기능 개발 -> 주문 기능 테스트 순이다. 주문, 주문상품 엔티티 개발 주문 생성 메서드 public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderitem : orderItems) { order.addOrderItem(orderitem); } or..
구현할 기능은 상품 목록, 상품 목록 조회, 상품 수정이다. 순서는 상품 엔티티를 개발 -> 상품 리포지토리를 개발 -> 상품 서비스 개발, 상품 기능 테스트 순이다. 상품 엔티티 개발(비즈니스 로직 추가) 비즈니스 로직은 그 관리하는 요소가 있는 엔티티에 개발하는 것이 가장 좋다. @Entity @Getter @Setter @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int..
애플리케이션 아키텍처 SpringBoot에서 늘 사용하던 애플리케이션 아키텍처 구조이다. 계층형 구조를 사용한다. Controller, web : 웹 계층 service : 비즈니스 로직, 트랜잭션 처리 repository : JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain : 엔티티가 모여 있는 계층, 모든 계층에서 사용한다. 회원 도메인 개발 구현할 기능은 회원 등록하고 회원 목록을 조회하는 것이다. 순서는 회원 리포지토리를 개발 -> 회원 서비스를 개발 -> 회원 기능을 테스트하는 순이다. 회원 리포지토리 개발 @Repository //스프링 빈으로 등록 @RequiredArgsConstructor public class MemberRepository { private final En..
요구사항 분석 회원 기능 : 회원 등록, 회원 조회 상품 기능 : 상품 등록, 상품 수정, 상품 조회 주문 기능 : 상품 주문, 주문 내역 조회, 주문 취소 기타 요구 사항 : 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분 할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 회원과 주문은 1대다 관계이다. 회원 한명당 여러개의 주문을 할 수 있기 때문이다. 주문과 배송은 1대1 관계이다. 주문하나당 배송지는 하나이다. 주문과 상품은 다대다 관계이다. 한번 주문 할 때, 주문하나당 여러개의 상품을 주문할 수 있고 또 상품도 여러개의 주문에 들어 갈 수있기 때문이다. 다대다 일경우 가운대에 주문상품이라는 테이블을 만들어 1대다..