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

김종완[와니Wani]님의 프로필 이미지
김종완[와니Wani]

작성한 질문수

실전! 스프링 데이터 JPA

커맨드와 쿼리를 분리하라는 말이 잘 이해가 가질 않습니다.

해결된 질문

작성

·

1.4K

2

현재 강의를 단계적으로 쭉듣고 있는데

커맨드와 쿼리를 분리하라는게 잘 이해가 가질 않습니다.

커맨드는 무엇을 얘기하는것인가요?

쿼리는 sql말씀하시는거 맞으신가요?

답변 부탁드립니다!

답변 3

5

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

안녕하세요. JongWanKim님

답글 쭉 남길께요^^

1. merge때문에 id를 반환하지 않고 엔티티를 반환하는 것인가요? 아니면 다른 이유가 있을까요?

-> 최초의 설계 의도는 저도 정확히 모르겠지만, save 메서드는 스프링 데이터 커먼에 있는 CrudRepository 인터페이스 소속입니다. 따라서 JPA를 넘어서 다양햔 데이터베이스를 포함하도록 매우 범용성 있게 설계된 것입니다. 따라서 merge 때문은 아닐 것 같아요.

2.강의안에서 merge는 좋지 못한 전략이라고 해주셨는데 , 만약에 링크 남겨주신대로  save는 사용하지 않고 제가 임의대로 구현을해서 persist를 해서 id를 반환하는 메서드를 짜는게 좋을까요?

-> 정확히 표현하면 merge는 좋지 못한 전략이라기 보다는, merge의 원래 설계 목적은, update가 아니라 준영속 상태의 엔티티를 영속 상태를 바꾸는 것이 목적입니다. 그 목적에 맞게 사용되어야 하는데, 주변에 보면 남용되고 있는 사례를 많이 보았습니다. update는 merge 대신에 변경감지(drity checking)을 사용하는 것이 맞습니다.

스프링 데이터를 사용하면 얻는 이점이 많기 때문에 save를 그대로 사용하는 것을 권장합니다. 제가 command와 query를 분리하라고 말씀 드린 부분은 내가 작성해야하는 비즈니스 로직에 초점을 맞추어 주시면 됩니다^^

3.2번대로 굳이 하지말고 구현된 save메서드는 쓰되 반환되는 엔티티의 id값을 사용하는게 좋을까요?

-> 핵심은 내가 개발하는 비즈니스 로직이지, 프레임워크가 제공하는 메서드는 그대로 사용하는게 좋다 생각합니다.

도움이 되셨길 바라며^^

1

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

안녕하세요. JongWanKim님^^

다음 답변을 참고해주세요

https://www.inflearn.com/questions/27795

감사합니다.

0

안녕하세요 답변주신 링크가서 잘 읽어봤습니다.

공부하던중 궁금한 점이 하나더 생겨서 물어보려고 답글을 남깁니다.

JpaRepository 인터페이스 안에있는 save 메소드를 사용하면 엔티티를 반환합니다.

안에 들어가 보면 merge와 persist를 하면서 해당 엔티티를 반환하는것으로 배웠는데

답변주신 링크로 들어가보면 insert 할때에 id를 반환하는게 좋다고 하셨습니다.

1. merge때문에 id를 반환하지 않고 엔티티를 반환하는 것인가요? 아니면 다른 이유가 있을까요?

2.강의안에서 merge는 좋지 못한 전략이라고 해주셨는데 , 만약에 링크 남겨주신대로  save는 사용하지 않고 제가 임의대로 구현을해서 persist를 해서 id를 반환하는 메서드를 짜는게 좋을까요?

3.2번대로 굳이 하지말고 구현된 save메서드는 쓰되 반환되는 엔티티의 id값을 사용하는게 좋을까요?

바쁘실텐데 답변 감사합니다!

김종완[와니Wani]님의 프로필 이미지
김종완[와니Wani]

작성한 질문수

질문하기