📗

[스프링부트와 JPA 활용1] 3. 구현 준비

작성일자
Nov 23, 2022
태그
SUB PAGE
프로젝트
JPA 활용1
책 종류
본 게시글은 하단 강의를 듣고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.

1. 구현 요구사항

notion image
  • 구현 o
    • 회원 기능
      • 회원 등록
      • 회원 조회(목록)
    • 상품 기능
      • 상품 등록
      • 상품 수정
      • 상품 조회(목록)
    • 주문 기능
      • 상품 주문
      • 주문 내역 조회(목록)
      • 주문 취소
      •  
  • 구현 x
    • 로그인과 권한 관리X
    • 파라미터 검증과 예외 처리X
    • 상품은 도서만 사용
    • 카테고리는 사용X
    • 배송 정보는 사용X
    •  

2. 애플리케이션 아키텍처

1) 애플리케이션 아키텍처 구성

notion image
  • 계층형 아키텍처 사용
    • 정의) 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 테이블

notion image
  • @Entity(name ="")의 경우 말그대로 엔티티의 이름을 정할때 사용됨. 이는 HQL에서 엔티티를 식별할 이름을 정함
  • @Table(name ="")의 경우 Database에 생성될 table의 이름을 지정할때 사용됨.
  • @Table이 없고 @Entity(name ="")만 존재하는 경우, @Entity의 name 속성에 의해, Entity와 Table 이름이 모두 결정됨.
  • 정리) @Entity만 사용할 경우 자동으로 Entity+Table 기능을 수행하고 @Entity + @Table 을 따로 사용하면 각자 설정 값에 따라 작동함.
참고