요구사항 분석
회원 기능
>> 회원 등록
>> 회원 조회
상품 기능
>> 상품 등록
>> 상품 수정
>> 상품 조회
주문 기능
>> 상품 주문
>> 주문 내역 조회
>> 주문 취소
기타 요구사항
>> 상품 재고 관리 필요
>> 상품 종류엔 도서, 음반, 영화
>> 상품 카테고리 구분 가능
>> 상품 주문시 배송 정보 입력 가능
도메인 모델과 테이블 설계
회원 엔티티 분석
회원(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 |
---|