작성
·
191
답변 2
1
안녕하세요, 인프런 AI 인턴입니다.
SHYU님께서 질문하신 내용은 JPA의 더티 체킹 기능과 save 메소드를 사용해 데이터를 저장하는 방법의 차이에 관한 것으로 보입니다. 이와 유사한 질문으로, 데이터 변경 후 저장 방식에 대한 설명이 필요한 경우가 있었습니다.
맛집 수정 API 질문입니다에서는 RestaurantEntity
객체를 조회한 후 변경을 가한 다음 save()
메소드 사용 여부에 대해 논의되었습니다. 지식공유자 쥬쥬님의 답변에 따르면, JPA에서는 영속성 컨텍스트에 있는 Entity의 더티 체킹을 통해 자동으로 데이터베이스에 변경 사항을 반영하므로 save()
메소드를 호출하지 않아도 됩니다. 그러나 명시적으로 save()
메소드를 호출하는 것이 특정 상황에서 더 좋을 수 있으며, 이러한 설계 결정은 특정 프로젝트나 상황의 요구에 따라 달라질 수 있음을 설명합니다.
더티 체킹과 save()
메소드 사용은 상황에 따라 선택할 수 있는 저장 방식의 차이를 보여줍니다. 특히, JPA의 더티 체킹은 변경 사항을 자동으로 감지하여 반영하는 기능으로, 데이터의 상태 변경을 추적할 때 유용합니다. 반면, save()
메소드를 명시적으로 호출하는 방식은 변경 사항이나 새로운 데이터를 데이터베이스에 반영할 때 개발자가 직접 제어할 수 있는 명확성을 제공합니다.
질문자님의 상황에서는 더티 체킹 기능을 활용하여 자동으로 변경 사항을 반영할 수도 있지만, 특정 요구 사항이나 상황에서는 save()
메소드를 사용하여 변경 데이터를 저장하는 것이 더 적절할 수 있습니다. 따라서, 프로젝트의 구체적인 요구 사항과 상황을 고려하여 더티 체킹과 save()
메소드 중 어느 것을 사용할지 결정하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
안녕하세요. 지식공유자 쥬쥬입니다.
이전에 비슷한 질문이 있었어서, 첨부합니다 !
감사합니다.
안녕하세요 지식공유자 쥬쥬입니다!
말씀하신대로 JPA에서는 영속성컨텍스트에 있는 Entity의 더티체킹을 통해 update 쿼리를 날려주므로
save()
메소드를 호출하지 않아도 데이터베이스에 반영됩니다! 좋은 말씀이신 것 같습니다!
하지만 이것은 JPA Native한 기능(spring-data-jpa가 가지고 있는 특징이란 뜻입니다!)으로,
@Repository
의save()
메소드를 명시적으로 호출해주는 것이 특정 상황에서는 좋을 수 있습니다.
예를 들어, 다음과 같은 요구사항이 생겼다고 가정해볼게요!
JPA로 선언한 Entity를 다른 spring-data 라이브러리로 교체할 경우 (mongo db나 r2dbc와 같은)
이 때 JPA를 사용할 때에는 동작했던 코드들이 단순히 spring data 구현체를 교체함으로써 동작이 안하는 상황이 발생할 수 있습니다!
사실 위같은 상황은 많이 발생하지는 않습니다. 저 같은 경우에는 메모리에 있는 객체의 상태가 변경되었다면 저장소(Repository)에 다시 저장(save)해주는 코드가 명시적으로 있는 것이 조금 더 "자연"스럽다고 느껴지는데요. 이것은 제 느낌일 뿐 개개인이 모두 다르게 느낄 수 있다고 생각합니다.
인프넌님이 위같은 견해들을 함께 생각해보시고, 더 낫다고 판단되는 방향으로 개발하시는 것이 가장 좋다고 생각합니다!
Appendix.
JPA의 더티체킹 기능은 마틴파울러의 저서 엔터프라이즈 애플리케이션 아키텍처 패턴 (P of EAA)의 작업 단위(Unit of Work) 패턴을 읽어보시면 이해하기가 더욱 좋으실거에요!
고마워요 AI 인턴