본 게시글은 하단 강의를 듣고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
- 목차
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 을 따로 사용하면 각자 설정 값에 따라 작동함.



