인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

화이팅님의 프로필 이미지
화이팅

작성한 질문수

실전! 스프링 데이터 JPA

선생님은 실무에서 데이터를 등록할 때 어떤걸 쓰시나요? ( persist vs save )

작성

·

274

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
spring data jpa의 save를 사용할 경우 내부적으로 id 값으로 데이터가 있는지 확인하는 select 쿼리를 날리고 insert 또는 update를 합니다.
그럼으로 그냥 insert 하는 것 보다 1번의 쿼리(총 2번)가 더 발생합니다.
jpa의 persist를 사용하면 바로 insert를 하여 1번의 쿼리만 발생합니다.
 
저는 개인적으로 insert만 하는 경우 persist를 사용하고 있습니다.
Service에서 직접 EntityManager를 DI 받아 persist를 사용했습니다.
스프링 DB 1편 - 데이터 접근 핵심 원리 을 보다가 Service는 최대한 순수한 자바코드만 있는게 좋다는 말씀에 머리가 띵하더군요.
좋은 OOP 설계를 위해 save를 사용하거나 CustomRepository를 만들어 persist를 사용하거나 어떤게 더 좋은 방법일까요?
선생님은 실무에서 어떻게 사용하시는 지 궁금합니다!
 

답변 1

0

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

안녕하세요. 정민영님

다음을 참고해주세요.

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

감사합니다.

화이팅님의 프로필 이미지
화이팅
질문자

선생님 답글 남겨주신 부분을 보고 제가 save의 동작 방식을 헷갈리고 있던 걸 알게되었습니다.

디버깅해서 isNew를 타고 가니 선생님이 애기해주신대로 id 값의 존재 유무로 따라 persist, merge를 호출하더군요. 

정말 감사합니다.

한가지 더 궁금한게 있어서 문의드립니다.

persist를 사용하면 spring 이 변환해주는 exception(org.springframework.dao.*Exception)이 아니라 jdbc 설정된 db(h2)의 Exception을 직접 반환하더라고요.

db 강의를 듣고나서 생각했을 때는 spring이 변환해주는 Exception을 사용하기위해 save를 사용하는게 더 좋은 방법이라고 생각됩니다.

선생님의 의견이 궁금하여 문의드립니다!

실무에서는 save를 사용하는지가 궁금합니다! 

화이팅님의 프로필 이미지
화이팅
질문자

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/unit/114657?tab=curriculum
강의 듣는중 JPA 예외 변환을 통해 순수 JPA의 data exception을 spring 추상화 exception으로 변환하는 법을 알게되었습니다. 제가 질문 드린 것에 대한 답과 연관되어 있네요. 감사합니다!

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

민영님 스스로 잘 해결하셨습니다^^

화이팅님의 프로필 이미지
화이팅

작성한 질문수

질문하기