Post

Spring_JPA2 - 도메인 분석 설계

해당 자료는 인프런 김영한 선생님의 실전! 스프링 부트와 JPA 활용 1 강의노트입니다.


해당 챕터는 글로 적기 힘든 이해의 영역이므로 글을 많이 적지 않겠습니다.

1. 요구사항 분석

기능 목록을 작성하였습니다.

2. 도메인 모델과 테이블 설계

테이브를 설계하는 과정을 알려주시고,

  • 다 대 다 관계를 만들 지 말 것.
  • DB는 회사마다 다르지만 해당 예제에서는 소문자 + _(언더 스코어)스타일을 사용
  • 외래 키가 있는 곳을 연관관계의 주인.
    • 자동차와 바퀴에서 자동차가 주인이 아니고 바퀴가 주인이다. 이유는 바퀴 1개를 바꾼다하면 자동차 테이블의 바퀴 정보도 바꿔줘야하는데, 이러한 과정이 꽤나 복잡하기 때문이다.

3. 엔티티 클래스 개발 1

코드를 공개할 순 없으므로.. skip

사용된 애노테이션을 메모하겠습니다.

@Column(name = “지정할 컬럼 이름”)
해당 애노테이션을 통해 컬럼에 이름을 부여할 수 있습니다.

1
2
@Column(name = "order_id")
    private Long id;

다른 테이블에서도 위와같이 id로 선언할 수 있어서 구분하기 위해 넣는 애노테이션입니다.

@InheritanceType, @DiscriminatorColumn

1
2
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")

여러 옵션이 있고 만약 추상화 클래스를 통해 여러가지를 상속받았으면 하나의 테이블로 관리할 지 분리해서 관리할 지 전략을 정해주는 애노테이션입니다.

위의 코드는 SINGLE_TABLE로 상속받은 클래스들에 대해 JPA가 테이블 하나로 관리해줍니다.

@DiscriminatorColumn은 통합된 SINGLE_TABLE에 대해 상속받은 클래스들에 대해 구분을 해주기 위해 넣어주는 애노테이션입니다.

@Mapped by, @Embedded

다대다 관계 등에서 테이블에 같은 객체가 존재할 경우 하나의 객체만 관리해줘야하기에 다른 하나는 수정할 수 없게 읽기전용으로 바꾸어주는 애노테이션입니다.

@Enumerated(EnumType.STRING)

해당 애노테이션을 통해 Enum으로 생성된 자료형에 대해 구분을 해줍니다. EnumType.STRING은 실제 Enum에 등록된 값으로 구분을 해주며, 데이터를 잡아먹지만 새로운 상태가 추가되는 등에 대해 유연하게 작용합니다.


4. 엔티티 클래스 개발2

DB 설정을 마치고 잘 구동되었는 지 확인합니다. 다행히 저는 한번에 성공하였습니다.

This post is licensed under CC BY 4.0 by the author.