y-seo
y-seo의 딩코 기록들
y-seo
  • 분류 전체보기 (174)
    • Computer Science (49)
      • Database Design & Query Lan.. (10)
      • Network Security (16)
      • Software Engineering (6)
      • Computer Network (17)
    • Spring (50)
      • Spring-Basic (11)
      • SpringBoot-AWS (7)
      • SpringBoot&JPA (22)
      • 토비의 스프링 (3)
      • + α (7)
    • Cloud (22)
      • AWS (4)
      • GCP (1)
      • ElasticSearch (17)
    • Test (3)
    • Project (4)
    • Algorithm (24)
      • 개념 (9)
      • 문제풀이 (15)
    • AI (3)
      • About (2)
      • AIDU ez (1)
    • IT (5)
      • SQLD (4)
      • ADsP (1)
    • Error (4)
    • ETC (1)
    • Review (8)
    • Free mover (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

태그

  • 알기 쉬운 정보보호개론 3판
  • algorithm
  • baekjoon
  • 백준
  • 알고리즘
  • 자바
  • JPA
  • 스프링
  • springboot
  • 스프링부트
  • Python
  • 컴퓨터 네트워킹 하향식 접근
  • Spring
  • 보안
  • 네트워크
  • 김영한
  • java
  • 네트워크보안
  • 파이썬
  • 인프런

티스토리

hELLO · Designed By 정상우.
y-seo

y-seo의 딩코 기록들

[스프링부트와 JPA 활용 1] Section2. 도메인 분석 설계
Spring/SpringBoot&JPA

[스프링부트와 JPA 활용 1] Section2. 도메인 분석 설계

2023. 10. 4. 23:40

요구사항 분석

<HELLO SHOP>

  1. 회원 기능 : 회원 가입, 회원 목록
  2. 상품 기능 : 상품 등록, 상품 목록
  3. 주문 기능 : 상품 주문, 주문 내역
더보기

<기능 목록>

  • 회원 기능
    • 회원 등록
    • 회원 조회
  • 상품 기능
    • 상품 등록
    • 상품 수정
    • 상품 조회
  • 주문 기능
    • 상품 주문
    • 주문 내역 조회
    • 주문 취소
  • 기타 요구사항
    • 상품은 재고 관리가 필요하다.
    • 상품의 종류는 도서, 음반, 영화가 있다.
    • 상품을 카테고리로 구분할 수 있다.
    • 상품 주문시 배송 정보를 입력할 수 있다.

 

도메인 모델과 테이블 설계

1. 도메인 모델 설계

  • 회원 : 주문 = 1 : N(*)
  • 주문 : 상품 = N : N → 보통 사용하지 않는다 → 1 : N or N : 1  로 변경
  • 주문 : 배송 = 1 : 1
  • 상품 : 카테고리 = N : N

2. 엔티티 설계

(1) 회원 엔티티

  • Order와 Delivery는 양방향 관계가 맞다
  • 실제로는 회원이 주문을 참조하지는 않고, 주문이 회원을 참조하는 것이다

(2) 회원 테이블 분석

  • 1:N 관계에서는 N에 무조건 외래키가 존재한다
  • 외래키가 있는 곳을 연관관계의 주인으로 정하는 것이 좋다
  • 연관관계의 주인은 외래키를 누가 관리하냐의 문제이다 (우위나 중요성을 따지는 문제 X)

 

엔티티 클래스 개발

  • 몇 대 몇 관계는 Annotaion으로 지정한다
  • 연관관계의 주인은 값이 변경됐을 때 바꿀 FK로 지정한다
  • FK와 가까운 것을 연관관계의 주인으로 한다
  • InheritanceType 종류

  • @Enumerated 사용 시, EnumType.ORDINAL은 숫자이므로 순서에 밀리면 DB 장애가 난다
    • 따라서 EnumType.STRING으로 사용해야 순서에 밀리지 않는다
  • 실무에서는 Entity의 Data는 조회할 일이 많으므로 Getter은 항상 열어두는 것이 편리하다
    • Setter은 Entity가 왜 변경되는지 추적하기 어려워지기 때문에 막 열어두면 안된다

 

Entity 설계 시 주의점

  • Entity에는 가급적 Setter 사용하지 말자
    • Setter은 모두 열려 있고 변경 포인트가 너무 많아서 유지보수가 어렵다.
  • 모든 연관관계는 자연로딩으로 설정하자
    • 즉시로딩은 예측이 어렵고 어떤 SQL이 실행될지 추적하기 어렵다.
    • 연관된 엔티티를 함께 DB에서 조회해야 하면 fetch join 또는 엔티티 그래프 기능을 사용하자.
  • 컬렉션은 필드에서 초기화 하자
    • null 문제에서 안전하다.
  • 테이블, 컬럼명 생성 전략
    1. 카멜 케이스 → 언더스코어(memberPoint member_point)
    2. .(점) → _(언더스코어)
    3. 대문자 → 소문자
저작자표시 (새창열림)

'Spring > SpringBoot&JPA' 카테고리의 다른 글

[스프링부트와 JPA 활용 1] Section5. 상품 도메인 개발  (1) 2023.11.01
[스프링부트와 JPA 활용 1] Section4. 회원 도메인 개발  (1) 2023.11.01
[스프링부트와 JPA 활용 1] Section3. 애플리케이션 구현 준비  (0) 2023.11.01
[스프링부트와 JPA 활용 1] Section1. 프로젝트 환경설정  (0) 2023.09.27
[스프링부트와 JPA 활용 1] Section0. 강좌 소개  (0) 2023.09.25
    'Spring/SpringBoot&JPA' 카테고리의 다른 글
    • [스프링부트와 JPA 활용 1] Section4. 회원 도메인 개발
    • [스프링부트와 JPA 활용 1] Section3. 애플리케이션 구현 준비
    • [스프링부트와 JPA 활용 1] Section1. 프로젝트 환경설정
    • [스프링부트와 JPA 활용 1] Section0. 강좌 소개
    y-seo
    y-seo

    티스토리툴바