개발자

도메인 모델과 영속성 모델을 분리하는 것이 어떤 상황에서 효율적인가 알고 싶습니다

2023년 05월 29일조회 1,610

개발을 공부하다 도메인 모델과 영속성 모델을 분리하는 것이 어떤 상황에서 효율적인가 판단이 되지 않아 질문드립니다 저는 도메인모델과 영속성모델을 분리할 경우에, 시간이 촉박하고 변화가 빠른 팀에는 과한 업무량을 부여할 거라고 생각을 했고, 오히려 프로그램의 생명 주기가 긴 경우에 적합하다고 판단했습니다. 하지만 좀 더 공부해보니 오히려 변화가 잦을수록 두 영역의 분리가 빛을 발한다라는 얘기를 듣고 조금 혼동이 왔습니다. 보통 회사에서 비즈니스 수정과 확장에 의해 스키마 이상의 데이터베이스 버전이나 종류, 라이브러리가 변동되는 일이 얼마나 잦은 일인지, 또 결국 그럼 영속성 모델과 도메인 모델을 분리를 명확하게 하는 것이 어떤 상황에서 적절한지에 대해 여쭙고 싶습니다

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

달레님의 프로필 사진

도메인 모델과 영속성 모델을 분리했을 때 개발 생산성 측면에서 단점은 이미 잘 파악하고 계신 것 같습니다. 도메인 모델과 영속성 모델을 분리했을 때의 장점은 유지 보수성 측면에서 생각해보시면 좋을 것 같아요. 일반적으로 도메인 모델은 외부 API를 담당하고, 영속성 모델은 내부 API를 담당하게 되는데요. 그런데 외부 API는 일단 배포 후에 클라이언트가 쓰기 시작하면 바꾸기가 매우 어렵다는 특징이 있습니다. 그래서 보통 API versioning하게 되는데 하위 호환성 보장을 위해서 여러 버전을 동시에 지원해야하는 경우도 생기죠. 반면에 영속성 모델은 비즈니스 요구 사항이나 기술 의사 결정에 맞춰서 유연하게 변경되어야 하는 경우가 많습니다. 예를 들어, 해당 서비스에서 자체적으로 사용자 관리를 하고 있었는데 비지니스의 규모가 커져서 사용자 관리를 별도의 서비스로 분리하도록 아키텍쳐에 변경이 일어난다면 어떻게 될까요? 그러면 해당 서비스는 더 이상 사용자 데이터를 저장하고 있는 DB 테이블을 소유하지 않게 될 것이며 그에 따라서 도메인 모델의 변경이 불가피해질 것입니다. 자, 이런 상황에서 도메인 모델과 영속성 모델이 적절히 분리되지 않았다면 어떨까요? 해당 API를 호출하는 클라이언트에게 주는 영향을 최소화하면서 백엔드에서 이러한 내부 구조 변경을 안전하고 효과적으로 진행할 수 있을까요? 특히 마이크로소프트 아키텍쳐에서는 도메인 모델과 영속성 모델의 분리가 더 중요해질 수 있는데요. 여러 개의 서비스가 서로 복잡하게 얽혀있는 경우 하나의 서비스에서 외부 API가 깨졌을 때 연쇄적으로 다른 여러 서비스를 마비시켜 대형 장애로 이어질 수 있기 때문입니다. 정리를 해보면 도메인 모델과 영속성 모델을 분리해주면 외부 API에 영향을 주지 않으면서 내부 API를 바꿀 수 있으며, 반대로 내부 API에 영향을 주지 않으면서 외부 API도 바꿀 수 있습니다. 이러한 유연성과 확장성이 프로그램의 생명 주기가 길고, 비지니스 요구 사항이 자주 변경되는 경우 빛을 발휘할 수 있습니다. 그러나 도메인 모델과 영속성 모델을 분리하면 도메인 간 맵핑을 위한 boilderplate 코드가 늘어나서 작성할 코드가 많아지고 개발 시간이 증가하는 단점이 있기 때문에 이러한 유연성이 필요하지 않은 상황에서는 오히려 독이 될 수 있습니다. 참고로 프로젝트의 일정이 빡빡한 경우에는 개발 중에는 통합 모델을 사용하다가 나중에 운영 단계에서 모델을 분리하는 경우도 종종 보았습니다. 반대로 별 이득없이 불필요하게 모델만 분리되어 있다면 모델 통합도 고려해볼 수 있겠지요? 여러가지 이유로 환경은 수시로 변하므로 그에 맞게 전략적인 선택을 하는 것이 무엇보다 중요할 것 같습니다.

김준형님의 프로필 사진

김준형

작성자

애즈위메이크 백엔드 개발자2023년 05월 30일

답변 감사드립니다. 조금 더 고민해봐야겠지만, 말씀을 듣고 빠르게 시장에 내놓아 테스트를 해야되는 상황에서는 개발시간이 길어지는 것에 대한 리스크를 크게 보고 가보는게 낫겠다는 생각이 들었습니다. 이렇게 한번 해보고 혹시 제 서비스가 어느정도 궤도에 올라간다면, 그 때 통합 모델의 단점을 충분히 느끼고 상황에 맞는 판단을 다시 해보려고 합니다. 특히나 개발단계와 운영단계에서 다른 모델을 사용하는 것에 대해 아 이런 방법도 있구나 하는 좀 큰 짜릿함을 느꼈습니다 너무 감사드립니다ㅎㅎ

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!