Inflearn brand logo image

인프런 커뮤니티 질문&답변

javabase님의 프로필 이미지
javabase

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

애그리거트와 헥사고날 아키텍처

Mybatis같은 sql mapper를 사용시..

해결된 질문

작성

·

298

1

안녕하세요 토비님! 강의 너무 잘듣고 있습니다. 애그리거트 쪽 강의를 들으면서 문득 든 생각을 질문드립니다.

현재 사내에서 하고 있는 프로젝트는 JPA를 전혀사용하지 않고 Mybatis만을 사용하고 있는데요 이런 경우에도 에그리거트라던가 헥사고날 아키텍쳐를 적용하면서 진행하는게 충분히 가능할까요? 그게 아니라면 기존에 적용하고 있는 흔히 말하는 레이어드 아키텍쳐 및 트랜잭션 스크립트 방식으로 진행하는게 더 나은 방법일까요?

혹시라도 수준 떨어지는 질문이라면 사과드립니다.

감사합니다.

답변 2

3

토비님의 프로필 이미지
토비
지식공유자

안녕하세요.

이번 강의는 JPA를 이용하는 방식으로 진행을 합니다만 MyBatis와 같은 다른 저장 기술을 사용해도 됩니다.

다만 기술의 특성 때문에 Repository의 구현 클래스를 직접 만들어주시면 됩니다.

헥사고날 아키텍처 자체는 Repository의 구현을 어댑터로 만듭니다. 그 안에 save()와 같은 메소드를 만드시고, 등록 또는 수정하는 기능을 넣어주시면 됩니다.

애그리거트도 마찬가지입니다. 애그리거트 루트를 저장하는 Repository 구현 클래스에서 애그리거트 내부도 함께 저장해주도록 구현을 해야 합니다.

다만 JPA의 lazy loading이라든가 변경 감지에 따라 필요한 부분만 업데이트 하는 등의 기능을 사용하지 못하는 것이 좀 아쉬울 수 있겠네요. 이때는 애그리거트를 너무 크게 잡지 않으시도로 주의하시면 됩니다.

MyBatis도 Spring Data의 추상화를 적용하도록 만들어진 https://github.com/easybest/spring-data-mybatis 프로젝트가 있는 것으로 알고 있습니다. 이건 제가 사용해보지는 않아서 어느 수준인지는 잘 모르겠습니다. 한번 검토해보세요.

 

0

안녕하세요, 인프런 AI 인턴입니다. javabase님께서 MyBatis를 사용하면서도 애그리거트 및 헥사고날 아키텍처를 적용할 수 있는지에 대해 질문해 주셨습니다.

애그리거트와 헥사고날 아키텍처:
애그리거트와 헥사고날 아키텍처는 특정 데이터 접근 기술, 즉 JPA와 같은 ORM에만 국한되지 않습니다. 따라서 MyBatis와 같은 SQL 매퍼를 사용할 때에도 이들 디자인 패턴과 아키텍처 원칙을 적용할 수 있습니다. 핵심은 비즈니스 로직의 핵심을 중심으로 도메인 모델을 설계하고, 이를 외부의 인프라스트럭처로부터 독립적으로 유지하는 것입니다. MyBatis와 같은 도구는 데이터베이스와의 상호작용을 위한 구현체일 뿐이므로, 헥사고날 아키텍처의 포트를 통해 필요에 맞게 이러한 통신을 캡슐화하고 사용할 수 있습니다.

애그리거트:
애그리거트는 도메인 모델에서 일관성과 경계를 유지하기 위해 중요한 역할을 합니다. MyBatis를 사용할 때에도 애그리거트 경계를 명확히하고, 각 애그리거트의 트랜잭션 경계를 처리하는 등의 설계는 충분히 가능합니다.

헥사고날 아키텍처 (Ports and Adapters):
이 아키텍처의 강점은 데이터 접근을 포함한 각종 외부 시스템으로의 의존성을 명확히 분리할 수 있다는 것입니다. MyBatis의 매핑 인터페이스를 하나의 어댑터로 보고, 이를 통해 데이터베이스와의 상호작용을 처리하는 구조를 설계할 수 있습니다. 이런 방식으로 설계하면, 향후 다른 데이터 접근 기술로의 전환 또한 상대적으로 수월하게 진행할 수 있습니다.

다만, 현재 프로젝트에서 이러한 구조로 전환하는 것이 현실적으로 가능한지는 팀의 기술 수준, 시간과 리소스 등을 종합적으로 고려하여 결정해야 할 부분입니다. 기존의 레이어드 아키텍처 및 트랜잭션 스크립트를 통해서도 프로젝트를 문제 없이 진행하고 계신다면, 이 또한 효과적인 방법일 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변을 링크로 추천해드리고 있습니다. 아래 링크들은 다른 개발자들이 유사한 주제에 대해 탐구한 내용을 담고 있습니다:

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

javabase님의 프로필 이미지
javabase

작성한 질문수

질문하기