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

민경재님의 프로필 이미지
민경재

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

JPA 관계 설정

작성

·

215

0

안녕하세요! HTTP강의듣고 이번에 JPA강의도 듣네요

명강의 감사합니다.

계속 고민하다 궁금한게 생겨서 여쭤봅니다.

Post Reply 관계에서 N : 1 그래프 객체가 Reply에있는 상태에서

강의에서 공부한대로, 혼자공부한대로 최대한 단방향으로 설정하려합니다.

근데 항상 고민이 됬던 것은

Reply를 save할 때, 해당 Post를 갖고와서.

즉, url : post/1/reply - @PostMapping

으로 Reply를 만들고자할때 Service단에서  ( 여기서 코딩하는거라 오타가있을수도...)

@Transactional

public void saveReply(ReplyServiceDto serviceDto){

      // 우선적으로 post : 1 을 불러와서

     Post post = postRepository.find(serviceDto.getPostId);

     Reply reply = Reply.builder()

             .postId(post)

            .content(serviceDto.getContent)

            build();

     replyRepository(reply);

}

이런식으로 하면 항상 reply를 save할때 post를 갖고와야한다는 불편함이있습니다.

그리고 url또한 post/1/reply 가아닌 reply 로 할때는 어떻게해야하는지...

그래서 찾아본 결과

1. Reply 쪽에 

private Long postId; 

딱 이것만 설정해놓고 따로 Post는 설정안하는 방법이 있더라구요. 물론 이게 무결성에 안좋다는건 알고있습니다.

2. 반대로 그냥 Post post 부분을 referencedColumn , DynamicInsert를 통해 null 로 넣을수도있다는...

( 이부분을 계속 시도는해보지만 FK로 안되는중 )

너무 길었습니다.

결론은 그겁니다. 

어떻게 해야 DB에 가는 성능상의 이슈를 풀수있는가. reply를 저장할때마다 post를 꼭 불러와야하는가.

이것에 대한 문제입니다.

그리고 한 post에 여러 reply가 달린 프로젝트에선 양방향은 또 어떨지... 궁금합니다

항상 좋은강의 감사합니다.

답변 2

2

민경재님의 프로필 이미지
민경재
질문자

완전도움됬습니다. 감사합니다.

궁금한거 있으면 다시 여쭤보겠습니다. 정말 감사합니다!

1

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

안녕하세요. 경재님 좋은 질문입니다.

Post를 프록시로 조회하시면 됩니다.

그런데 실무에서는 그냥 Post를 직접 조회합니다.

왜냐하면, 대부분의 애플리케이션은 조회를 호출하는 경우가 9이고, 실제 등록이나 저장이 발생하는 경우는 1이거나 그 이하로 발생합니다.

그리고 Post 처럼 PK 데이터를 찍어서 하나만 조회하는 상황은 매우 빠르기 빠릅니다.

전체 애플리케이션 관점에서 보면 이 부분을 최적화 하는 것이 거의 의미가 없는 것이지요.

도움이 되셨길 바래요.

민경재님의 프로필 이미지
민경재

작성한 질문수

질문하기