작성
·
233
·
수정됨
0
안녕하세요 🙂
"도메인 모델을 직렬화 했다가, RDB에 저장했다가" 하는 경우도 JPA와 도메인모델 분리가 필요한 경우라고 생각되는데 어떻게 생각하시나요?
도메인모델이 생성되었을때 영구보관이 필요한게 아니라, 어느정도 상태머신이 진행된 후 영구 보관이 필요하여 그전에는 레디스나 다이나모 같은 저장소에 보관하다가, 이후에 RDB에 영구보관을 하는 경우가 좀 더 자세한 예시일 것 같아요. 이 경우 JPA에서 DB 성능등을 이슈로 양방향맵핑을 하는 경우 순환참조로 인한 직렬화 이슈가 생기기 때문에 어떻게 해결할 수 있을지 고민하다가 이때 모델 분리를 선택한 경험이 있습니다.
--
무조건적인 지향을 하는게 아니라 필요에 따라 기술을 선택할 수 있게 강의를 진행해주시는 점 너무 많이 배우고 있습니다. 감사합니다.
답변 2
1
자바 오브젝트는 다른 오브젝트에 대한 레퍼런스를 가지고 있는게 매우 자연스럽죠. 메모리에서 일시적으로 존재했다가 GC 되는 경우라면 아무 문제가 없고, 필요하면 Proxy를 잘 활용해도 됩니다.
그런데 말씀하신 것처럼 직렬화가 필요한 경우가 있다면 이때는 문제가 생길 수 있습니다. JPA 엔티티를 그대로 웹 API의 응답에 넣거나, 아니면 DB가 아닌 다른 저장소에 보관하거나, 다른 서비스로 전송해야 하는 경우가 있겠죠. 이런 경우엔 그에 맞는 직렬화 목적으로 설계된 오브젝트로 매핑한 뒤에 보내고 받으면 됩니다. 이런 경우도 무리해서 JPA 엔티티를 활용하려고 애노테이션을 덕지덕지 붙이는 건 아주 간단한 경우가 아니라면 절대 추천할 수 없습니다.
다만 영속적인 저장의 준비 단계를 다른 저장소를 사용하고 그걸 코드에서 직접 다뤄야 하는 건 꽤나 번잡한 일인 듯하네요. JPA를 직접 지원하는 쓰기 캐시 같은 방식을 사용하는 게 아니라면 아주 특별한 경우에만 요구될 듯 싶네요.
이런 분명한 이유가 있는 경우엔 직렬화 모델을 분리해서 만들고 코드로 매핑하는 게 가장 나은 선택으로 생각됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 파파라파파님께서 제기하신 질문에 대해 답변드리겠습니다.
JPA 모델과 도메인 모델을 분리하는 것이 필요한 사례 중 하나는 확실히 언급하신 것처럼 “도메인 모델을 일시적으로 직렬화해서 저장한 후, 나중에 이를 RDB에 영구 보관할 때”일 수 있습니다. 이는 특히 상태 머신을 통해 프로세스가 진행되는 도중 데이터를 임시 저장해야 하거나, 빠른 접근 및 끊김 없고 고성능의 저장소가 필요한 경우에 유용합니다.
이러한 경우는 시스템의 요구사항과 아키텍처에 따라 분리 여부가 결정될 수 있습니다. 예를 들어, 도메인 모델은 변형되기 쉽고 자주 변경되는 상태를 유지하지만, JPA 엔티티는 데이터베이스와의 안정적인 매핑 및 영속성을 관리하기 위해 설계됩니다. 따라서 상태 변화가 빈번하거나 복잡한 도메인 모델은 임시적으로 Redis나 DynamoDB와 같은 솔루션에 저장하고, 최종 상태가 확정되었을 때 JPA를 통해 RDB에 영속화하는 접근 방식이 효과적일 수 있습니다.
이러한 방식으로 설계를 하면, 각 저장소의 특성과 장점을 충분히 활용할 수 있게 됩니다. 즉, 성능과 신속한 상태 변경이 필요한 순간에는 인메모리 데이터 저장소를 사용하고, 최종 영구 보관 및 복잡한 쿼리 처리를 위해 RDB를 사용하는 것이죠.
추가적으로 참고할 수 있는 유사한 내용의 답변을 아래에 제시드리니, 도움이 되셨으면 좋겠습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.