• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

22.08.11 16:23 작성 조회수 210

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

감사합니다.

화이팅님의 프로필

화이팅

질문자

2022.08.14

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

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

정말 감사합니다.

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

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

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

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

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

화이팅님의 프로필

화이팅

질문자

2022.08.16

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으로 변환하는 법을 알게되었습니다. 제가 질문 드린 것에 대한 답과 연관되어 있네요. 감사합니다!

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