인프런 커뮤니티 질문&답변

narashine님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

Specifications (명세)

insert에 대해서 문의드립니다.

21.04.01 08:43 작성

·

197

1

안녕하세요 김영한님:)

실무 적용 중에 궁금한게 있어서 문의 드리는데요.

보통 entity내에 joinColumn이든 mappedBy든 연관관계를 성립 시켜주는데요

그냥 단순히(?) 주문생성(주문관련된 테이블들에 insert이 이루어짐)만 이루어진다면

굳이 연관관계 맵핑을 하지 않고 각 주문관련 테이블들에 하나씩 컨트롤 하면서 insert 하는게 편리할 것 같다는 생각이 들어서.. 

이런 접근 방법이 맞을까요? 

물론 테이블 간 FK로 묶여 있는 테이블들도 있긴 한데 이런 경우는 위 처럼 하면 JPA의 객제관점으로 테이블에 접근 하는 관점에서는 어긋나는것 같기도 하고...영한님의 의견은 어떠실까요?

참고로 이 서비스는 사실상 주문관련 테이블은 insert만 이루어지고 select는 상태값 정도 조회하는 신규 api 입니다. 

쿼리가 아닌 JPA 관점에서 접근하는 게 생각보다 딱 이거다 이런게 명확하지 않으닌까 생각이 진짜 많아지는것 같아요 ㅠㅠ

감사합나다.

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

2021. 04. 01. 19:20

안녕하세요. narashine님

2가지 관점이 있습니다.

1. 완전히 연관관계를 다 맺어주어야 한다.

2. 반대로 연관관계를 하다도 맺지 말자.

이 사이에서 적절한 선택이 필요합니다.

그리고 정말 서로 연관이 많은 부분만 연관관계를 가져가도록하는 설계 방법도 있습니다. 이것이 바로 DDD의 AggregateRoot라는 개념입니다.

연관관계가 있으면 객체사이에 연관된 부분도 알 수 있고, 코드를 더 객체지향 스타일로 작성하는 것도 가능합니다. 추가로 fetch join 같은 강력한 JPA의 기능 지원도 받을 수 있습니다. 이런 이점들 때문에 JPA를 사용한다면 연관관계를 가지고 가는 방향으로 고민하시는 것이 좋습니다.

그런데 모든 곳에 연관관계를 맺을 필요는 없습니다.

예를 들어서 로그성 테이블, 공통 코드 테이블 등은 연관관계를 맺지 않아도 됩니다.

감사합니다.