웹 계층 개발 회원 등록, 조회 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리한다. MemberForm @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다.") private String name; private String city; private String street; private String zipcode; } MemberController @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("/members/new") publi..
애플리케이션 아키텍처 계층형 구조 사용 controller, web: 웹 계층 service: 비즈니스 로직, 트랜잭션 처리 repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web Repository //ex) MemberRepository @Repository // spring bean으로 자동 등록됨 @RequiredArgsConstructor // final 있는 필드만 가지고 생성자 만들어 줌 public class MemberRepository { //@PersistenceContext spring이 엔티티 ..
요구사항 분석 + 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 회원 엔티티 분석 회원 테이블 분석 엔티티 클래스 개발 실무에서는 가급적 Getter는 열어두고, Setter는 꼭 필요한 경우에만 사용하는 것을 추천 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 제공해야 함 테이블은 타입이 없으므로 구분이 어려워 관례상 "테이블명 + id" 를 많이 사용한다. 실무에서는 @ManyToMany 를 사용 x 중간 테이블( CATEGORY_ITEM )에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵기 때문에 실무에서 사용하기에는 한계 존재 일대다, 다대일 매핑으로 풀어내서 사용 값 타입은 변경 불가능하게 설계해야 한다. JPA 스..