JPA

활용 / 도메인 분석 설계

Dear-J 2025. 5. 26. 12:06

요구사항 분석

회원 기능 

>> 회원 등록

>> 회원 조회

 

상품 기능

>> 상품 등록

>> 상품 수정

>> 상품 조회

 

주문 기능

>> 상품 주문

>> 주문 내역 조회

>> 주문 취소

 

기타 요구사항

>> 상품 재고 관리 필요

>> 상품 종류엔 도서, 음반, 영화

>> 상품 카테고리 구분 가능

>> 상품 주문시 배송 정보 입력 가능

 

도메인 모델과 테이블 설계

회원 엔티티 분석

회원(Member) : 이름과 임베디드 타입인 주소, 그리고 주문 리스트 가짐

 

주문(Order) : 한 번 주문시 여러 상품을 주문할 수 있으므로 주문과 주문상품은 일대다 관계

>> 상품을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태를 가짐

>> 주문 상태는 열거형을 사용, 주문 취소 표현 가능

 

주문상품(OrderItem) : 주문한 상품 정보와 금액, 수량정보를 가짐

 

상품(Item) : 이름, 가격, 재고수량을 가짐

>> 상품을 주문하면 재고수량이 줆

>> 상품의 종류로는 도서, 음반, 영화

 

배송(Delivery): 주문시 하나의 배송 정보를 생성

>> 주문과 배송은 일대일 관계

 

카테고리(Category) : 상품과 다대다 관계를 맺음

>> parent , child로 부모, 자식 카테고리를 연결

 

주소(Address) : 값 타입(임베디드 타입)

>> 회원과 배송에서 사용

 

회원 테이블 분석

MEMBER : 회원 엔티티의 Address 임베디드 타입 정보가 회원 테이블에 그대로 들어감

>> DELIVERY 테이블도 마찬가지

ITEM : 앨범, 도서, 영화 타입을 통합해서 하나의 테이블로 만듦

>> DTYPE 컬럼으로 타입을 구분

 

엔티티 설계시 주의점

엔티티에는 가급적 Setter 사용하지 말자

>> Setter가 열려있으면 변경 포인트가 많아서 유지보수 힘듦

 

모든 연관관계 지연로딩으로 설정

>> 즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행될지 추적 어려움

>> 연관된 엔티티를 함께 DB에서 조회해야 하면 fetch join 또는 엔티티 그래프 기능 사용

>> @XToOne 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정

 

컬렉션은 필드에서 초기화

>> null 문제에서 안전

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 실전! 스프링 부트와 JPA 활용 1

'JPA' 카테고리의 다른 글

활용 / 애플리케이션 구현 준비  (0) 2025.05.27