[DMD] 1. 프로젝트 설정 및 도메인 분석 설계

sorzzzzy·2021년 10월 27일
0

Spring Project

목록 보기
1/18
post-thumbnail

🔥자 이제 대망의 스프링 첫 프로젝트를 시작해 봅시다🔥
스프링 MVC 패턴을 완벽히 이해하기 위한 첫 단계로, 간단하게 HelloShop 과 비슷한 강아지 샵(?) 구현을 해보려고 한다!
내가 견주라 딱 생각나는 게 이거였다 히히

배웠던 내용들을 떠올리며 차근차근 시작해보자! 빠이팅👍🏻🤚🏻



🏷 프로젝트 생성

스프링 부트 스타터 사이트로 이동해서 프로젝트 생성


✔️ 프로젝트 선택

  • Project : Gradle
  • Project Language : Java
  • Spring Boot : 2.5.6

✔️ Project Metadata

  • Group : sorzzzzy
  • Artifact & Name : dmd

✔️ Dependencies

  • Spring Web
  • Lombok
  • validation
  • h2
  • jpa
  • Thymeleaf


🏷 h2 데이터베이스 설정

➡️ 처음 실행 시
➡️ 그 다음부터


이제 JPA와 DB 설정을 하고 동작을 확인해봐야 하는데,
application.propertiesapplication.yml 중에 하나만 사용하면 되는데 설정 파일이 많아질 수록 application.yml을 사용하는 것이 좋다🙂

우리는 application.yml을 사용할 것이므로 기본적으로 생성되어 있는 application.properties은 지우도록 하자!


✔️ application.yml

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/dmd;MVC=TRUE
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
#        show_sql: true
        format_sql: true
logging.level:
  org.hibernate.SQL: debug
#  org.hibernate.type: trace   
  • jdbc:h2:tcp://localhost/~/dmd;MVC=TRUE
    • MVC=TRUE 옵션은 동시접속 시 좀 더 빠르게 사용 가능
  • ddl-auto: create
    • 애플리케이션 실행 시점에 테이블을 지웠다가 다시 생성

📌 참고
application.yml 같은 yml 파일은 띄어쓰기(스페이스) 2칸으로 계층을 만들기 때문에 주의해서 작성!



🏷 요구사항 분석


1️⃣ 회원 기능

  • 회원 등록
  • 회원 조회

2️⃣ 상품 기능

  • 상품 등록
  • 상품 수정
  • 상품 조회

3️⃣ 주문 기능

  • 상품 주문
  • 주문 내역 조회
  • 주문 취소

4️⃣ 기타 요구사항

  • 상품은 재고 관리가 필요하다.
  • 상품의 종류는 장난감, 음식, 옷이 있다.
  • 상품을 카테고리로 구분할 수 있다.
  • 상품 주문시 배송 정보를 입력할 수 있다.


🏷 도메인 모델과 테이블 설계


✔️ 도메인 모델과 테이블 설계


1️⃣ 회원, 주문, 상품의 관계

  • 회원은 여러 상품을 주문할 수 있다.
  • 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계이지만,
    이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티 티에서도 거의 사용하지 않기 때문에 주문 상품이라는 엔티티를 추가해서 다대다 관계를 일대다, 다대일 관계로 풀어냈다😉

2️⃣ 상품 분류

  • 상품은 장난감, 음식, 옷으로 구분되는데 상품이라는 공통 속성을 사용하므로 상속 구조로 표현했다.

✔️ 회원 엔티티 분석


1️⃣ 회원(Member)

  • 이름과 주소, 그리고 주문 리스트를 가진다.

2️⃣ 주문(Order)

  • 주문과 주문상품은 일대다 관계이다.
  • 주문은 상품을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태를 가지고 있다.
    주문 상태는 열거형을 사용했는데 주문, 취소를 표현할 수 있다.

3️⃣ 주문상품(OrderItem)

  • 주문한 상품 정보와 주문 금액, 주문 수량 정보를 가지고 있다.

4️⃣ 상품(Item)

  • 이름, 가격, 재고수량을 가지고 있다.
  • 상품의 종류로는 장난감, 음식, 옷이 있다.

5️⃣ 배송(Delivery)

  • 주문과 배송은 일대일 관계이다.

6️⃣ 카테고리(Category)

  • 상품과 다대다 관계를 맺는다.

7️⃣ 주소(Address)

  • 값 타입(임베디드 타입)이다.
  • 회원과 배송에서 사용한다.

✔️ 회원 테이블 분석


1️⃣ MEMBER

  • Address를 임베디드 타입으로 만들었는데 그 정보가 회원 테이블과 배송 테이블에 들어갔다.

2️⃣ ITEM

  • 장난감, 음식, 옷을 통합해서 하나의 테이블로 만들었다(=싱글 테이블 전략)

✔️ 연관관계 매핑 분석


1️⃣ 회원과 주문

  • 일대다, 다대일의 양방향 관계이다!
  • 연관관계의 주인을 정해야 하는데, 외래 키가 있는 주문을 연관관계의 주인으로 정하는 것이 좋다!
    (테이블에서는 무조건 '다'에 외래키가 존재하게 되어있음!)
  • Order.memberORDERS.MEMBER_ID 외래 키와 매핑한다.

2️⃣ 주문상품과 주문

  • 다대일, 일대다의 양방향 관계이다.
  • 외래 키가 주문상품에 있으므로 주문상품이 연관관계의 주인이다.
  • OrderItem.orderORDER_ITEM.ORDER_ID 외래 키와 매핑한다.

3️⃣ 주문상품과 상품

  • 다대일 단방향 관계이다.
  • OrderItem.itemORDER_ITEM.ITEM_ID 외래 키와 매핑한다.

4️⃣ 주문과 배송

  • 일대일 양방향 관계이다.
  • Order.deliveryORDERS.DELIVERY_ID 외래 키와 매핑한다.

5️⃣ 카테고리와 상품

  • CATEGORY_ENTITY 라는 엔티티를 추가해서 다대다 관계를 일대다, 다대일 관계로 풀어냈다.
  • 실무에서 @ManyToMany는 거의 사용하지 않는다.
profile
Backend Developer

0개의 댓글