작성
·
138
·
수정됨
0
토비님 안녕하세요. 강의 너무 즐겁게 잘 수강하고 있는 한 개발자 입니다.
강의 수강 중에 궁금한 점이 생겨서, 토비님의 의견이 궁금해서 한 가지 질문 드리고자 합니다.
33. 엔티티 클래스와 JPA 매핑 정보 분리
강의에서 분리를 xml로 분리해서 매핑 하는 예를 들어주셔서, 이 부분에 대해서 궁금한 점이 있습니다.
개인적으로 xml 매핑작성 생산 비용과 jpa/도메인 엔티티를 분리해서 작성하는 비용이 크게 차이나지 않는것 같단 생각이 들긴합니다.
결국 xml이든, 코드든 분리해서 작성 비용이 필요한 것 같아요.
그렇다면, 여기에서 관리 포인트를 이중(xml,코드)으로 가져가는게 나을지, jpa/도메인 엔티티를 분리해서 코드에서 관리하는게 나을지? 고민이 되는데요. 토비님의 의견은 어떠신지 궁금합니다.
ai 자동완성 기능 활용
코드도 마찬가지로, 애노테이션 빼줘, 붙여줘 하면 어느정도 잘 만들어주긴 하더라구요. 이 부분도 어떻게 생각하시는지 궁금합니다.
코파일럿에 xml 매핑정보 만들어줘 하는 내용과, 코드로 애노테이션 붙여줘, 빼줘 해서 복/붙하는 행위 자체가 크게 다르지 않은것 같다는 생각이 들긴해서 이 부분은 어떻게 생각하시는지도 궁금합니다.
유지보수 관점에서
생산비용 보다, 개발 완료 후 유지보수를 하는데 있어서 그래도 xml/코드 두가지 중 1개를 선택해야한다면 어떻게 관리하는것이 나을까요??
바쁘신 와중에도 질문 확인하고 답변 주시는 점 미리 감사드립니다.
답변 2
2
안녕하세요.
1. JPA 엔티티를 분리하고 매핑하는 작업은 XML로 애노테이션을 분리하는 것에 비하면 상당히 복잡합니다. JPA 애노테이션이 달린 도메인 엔티티에서 애노테이션만 XML로 분리하면, 순수한 도메인 로직관련 코드와 주석이 달린 클래스 + 매핑을 위한 정보(XML) 두가지인데요. 이걸 JPA 모델을 하나 더 만들어서 분리하면, 도메인 모델 클래스 + JPA 매핑을 위한 엔티티 클래스 + JPA 엑티티 클래으세 붙은 애노테이션 매핑 정보 + 이 둘 사이를 매핑해주는 매핑 코드를 가진 애댑터. 이렇게 늘어납니다. 게다가 유사한 코드가 중복되고, 이걸 매핑하는 코드도 변경이 있을 때마다 함께 고쳐야 합니다. JPA가 가진 편리한 기능(lazy loading 같은)의 효과를 못 얻습니다. 그래서 더 여러가지 패턴의 매핑이 필요할 수도 있습니다. 따라서 작성과 유지보수 비용 관점에서 JPA 엔티티를 도메인 모델로 사용하고 JPA 애노테이션 정보를 XML로만 분리하는 것이 훨씬 저렴합니다.
AI 사용이 중요한 것은 아닙니다. IDE의 코드 생성 지원 기능을 활용하기 좋은 애노테이션에 비해 XML은 어렵다고 생각하는 분들이 많이 계시기에 AI를 이용해보라고 말씀드린 것이고요. 그것도 우선 애노테이션을 만든 뒤에 이를 XML로 바꿔달라는 식으로 AI를 활용해야 합니다. 아무런 매핑 관련 정보가 없는 채로 AI에게 알아서 JPA 애노테이션 붙여달라고 하면, 원하는 결과를 얻지 못할 수도 있습니다.
JPA 엔티티를 도메인 엔티티로 사용한다면 애노테이션 매핑 정보를 관리하는 것과 XML을 관리하는 것은 유지비용에서 별 차이는 없습니다. JPA를 단순 데이터 모델로 분리하고 어댑터를 통해서 매핑하는 방식은 유지보수 비용이 급격하게 올라갑니다. JPA 엑티티 단독으로 사용할 경우에 JPA 애노테이션을 사용하는 것은 저처럼 코드 가독성을 중요하게 보는 경우엔 코드를 이해할 때 인지부하가 늘어나서 다른 사람이 작성한 코드나 오래된 코드를 유지보수할 때 조금은 불리합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 소명섭님께서 질문해주신 내용을 바탕으로 답변드리겠습니다.
JPA 엔티티와 도메인 엔티티의 분리와 관련하여 XML 매핑을 사용하는 것과 코드 내에서 애노테이션을 사용하는 것이 각각 장단점이 존재합니다. 각각의 방법론이 프로젝트의 요구사항과 환경에 맞아야 하며, 무엇이 더 적합한지는 상황에 따라 다르게 적용될 수 있습니다. 아래는 두 접근 방식의 장단점을 비교한 내용입니다.
XML 매핑과 코드 매핑의 관리 비용:
AI 자동완성 기능 활용:
소명섭님께서 고민하시는 대로 XML과 코드에서 각기 매핑 정보를 관리하는 비용이 다를 수 있지만, 최종적으로는 프로젝트의 특성과 팀의 성숙도, 유지 보수 필요성에 따라 적합한 방식을 선택하셔야 할 것입니다.
아래 토비님의 이전 답변이 이러한 주제에 대한 자세한 관점을 제공하니 참고하시기 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.