타임리프 관련은 강의 내용에 있으니, 컨트롤러 부분만 정리해보았다. 홈 컨트롤러 등록 @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home() { log.info("home controller"); return "home"; } } 회원 등록, 조회 회원 등록 폼 객체 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리하자. @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수 입니다") private String name; private String city; private String street; private..
상품 도메인 기능 : 상품 등록, 목록 조회, 상품 수정 상품 도메인은 간단하니 생략하고 주문 도메인으로 넘어가보자. 주문 도메인 구현 기능 : 상품 주문, 주문 내역 조회, 주문 취소 주문 엔티티 @Entity @Getter @Setter @Table(name = "orders") public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) privat..
애플리케이션 아키텍처 계층형 구조 사용 controller, web: 웹 계층 service: 비즈니스 로직, 트랜잭션 처리 repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web 개발 순서: 서비스, 리포지토리 계층을 개발하고, 테스트 케이스를 작성해서 검증, 마지막에 웹 계층 적용 회원 리포지토리 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Membe..
실제 동작하는 화면은 다음과 같다. 기능 목록 회원 - 등록, 조회 상품 - 등록, 수정, 조회 주문 - 주문, 주문 내역 조회, 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 도메인 분석 설계 도메인 모델과 테이블 설계 도메인 모델 회원, 주문, 상품의 관계 : 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 따라서 그림처럼 주문상품이라는 엔티티를 추가해서 다대다 관계를 일대 다, 다대일 관계로 풀어냈다. 다만, 카테고리와 상품은 경험을 위해 다대다로 두었다. 상품 분류 : 도서, 음반, 영화는 상..
프로젝트 환경설정 https://start.spring.io/ Dependencies spring-boot-starter-web 톰캣, 스프링 웹 MVC 등 지원 spring-boot-starter-thymeleaf 뷰 단을 SSR로 제공하는 타임리프 템플릿 엔진 Spring-boot-starter-data-jpa aop, jdbc (HikariCP 커넥션 풀), 하이버네이트 , 스프링 데이터 jpa 등 지원 spring-boot-starter(공통) 스프링 부트 + 스프링 코어 + 로깅 등 지원 테스트 라이브러리 spring-boot-starter-test junit, mockito, assertj, spring-test 핵심 라이브러리 스프링 MVC 스프링 ORM JPA, 하이버네이트 스프링 데이터 ..