1. 구현 요구사항
•
구현 o
◦
회원 기능
▪
회원 등록
▪
회원 조회(목록)
◦
상품 기능
▪
상품 등록
▪
상품 수정
▪
상품 조회(목록)
◦
주문 기능
▪
상품 주문
▪
주문 내역 조회(목록)
▪
주문 취소
•
구현 x
◦
로그인과 권한 관리X
◦
파라미터 검증과 예외 처리X
◦
상품은 도서만 사용
◦
카테고리는 사용X
◦
배송 정보는 사용X
2. 애플리케이션 아키텍처
1) 애플리케이션 아키텍처 구성
•
계층형 아키텍처 사용
◦
정의) controller, service, repository의 구조
▪
repository에서 데이터베이스 접근
▪
각각은 (엔티티나 오브젝트들을 설계해둔) 도메인을 참조함
◦
정리)
▪
controller, web: 웹 계층
▪
service: 비즈니스 로직, 트랜잭션 처리
▪
repository: JPA를 직접 사용하는 계층
•
엔티티 매니저 사용해 데이터베이스에 접근
▪
domain: 엔티티가 모여있는 계층
•
모든 계층에서 사용
◦
그림과 다른 점)
▪
컨트롤러는 리포지토리에 바로 접근가능하게 할 것임
•
컨트롤라가 회원 리포지토리에서 바로 회원 찾아오는 경우. (간단한 조회의 경우)
•
컨트롤러에서 리포지토리에 간단한 회원정보 뿌릴 경우.
2) 패키지 구조
•
jpabook.jpashop
◦
web
◦
service
◦
repository
◦
domain
◦
exception // 공통 예외 모아둠
3) 개발 순서
•
domain → repository → service → test → web(controller) → API
4) 엔티티 vs 테이블
•
@Entity(name ="")의 경우 말그대로 엔티티의 이름을 정할때 사용됨. 이는 HQL에서 엔티티를 식별할 이름을 정함
•
@Table(name ="")의 경우 Database에 생성될 table의 이름을 지정할때 사용됨.
•
@Table이 없고 @Entity(name ="")만 존재하는 경우, @Entity의 name 속성에 의해, Entity와 Table 이름이 모두 결정됨.
•
정리) @Entity만 사용할 경우 자동으로 Entity+Table 기능을 수행하고 @Entity + @Table 을 따로 사용하면 각자 설정 값에 따라 작동함.
참고