Spring Data JDBC(설계 및 엔티티 정의)

Rina's·2023년 6월 16일

코드스테이츠

목록 보기
47/96

Spring Data JDBC 기반의 도메인 엔티티 및 테이블 설계

DDD

도메인 주도 설계(Domain Driven Design)

도메인

비즈니스적 관점의 업무 영역

애그리거트

비슷한 업무 도메인들의 묶음
각 애그리거트를 대표하는 도메인을 루트 애그리거트라고 한다

빈약한 도메인? 풍부한 도메인?

가지고 있는 기능(메서드)에 따라

도메인 엔티티 클래스 정의

애그리거트 객체 매핑 규칙

모든 엔티티 객체의 상태는 애그리거트 루트를 통해서만 변경
1. 같은 도메인(에그리거트)의 참조는 내부 객체로 참조
2. 다른 도메인 1:1, 1:N은 ID로 참조(외래키 방식)
3. 다른 도메인 N:N은 중개 클래스를 만들어서 1:N로 참조,
중개클래스는 한 쪽 N의 내부객체가 되어 @MappedCollection로 ID참조와 객체참조를 같이하게 된다

내부참조는 보통 필드값으로(열거형)설정해서 참조하는 경우가 많은 듯

@MappedCollection

@MappedCollection(idColumn = "", keyColumn = "")
idColumn는 외래키, keyColumn 기본키

엔티티 - SQL Insert or Update Query 메서드로 객체 변환 - DB저장
엔티티 - SQL Select Query 메서드로 DB 호출 - 조회 객채반환

기능구현

Top Down & Bottom Up

repository

  • CrudRepository를 상속하여 CRUD 메서드와 쿼리문을 실행한다
  • 기본값으로 Optional를 리턴한다
  • 쿼리문 예시 Otional<from> findBy+필드명(찾는 값 where);

service

  • get : DB에서 값이 없으면 exception이 발생하는 로직(메서드)을 만들어준다
  • update : DB에서 호출 후 수정한다, Optional은 of메서드와 ofNullable 메서드가 있는데 보통 ofNullable로 Null값을 허용한다 getter하고 값이 있으면 ifPresent로 setter한다
    Optional.ofNullable(member.getName()) .ifPresent(name -> findMember.setName(name));
  • delet, cancel : 혹시 모를 롤백을 위해 DB값을 실제로 삭제하는 것이 아닌, status 값을 따로 만들어 삭제나 취소 상태로 변경해 저장하는 것이 바람직 하다

controller

  • Set이나 List로 들어온 엔티티 값을 Dto로 매핑한다
  • 실제로 클라이언트에 보낼 값을 생각하며 매핑될 클래스의 필드값을 구성 하자
  • 이하 생략
profile
갭린이 리나

0개의 댓글