강의

멘토링

로드맵

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

리틀마가린님의 프로필 이미지
리틀마가린

작성한 질문수

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

헥사고날 아키텍처와 DDD

작성

·

26

0

5년차 백엔드 개발자 이며 현재 섹션5. 헥사고날 아키텍처의 사실과 오해를 학습하고 있습니다.

현업에서 신규 프로젝트를 준비 하면서 어떤 아키텍처를 가져가는 것이 좋을지 고민중에 강의를 접하게 되었습니다.

부동산 관련 데이터를 기반으로 한 서비스를 개발 및 설계 단계에 있습니다.

제가 전부 리드하는 것은 아니지만 프로젝트 전반적인 부분을 개발 리드분에게 권한을 받고 저와 팀원 둘이서 백엔드 구조를 설계 하고 있습니다.

수천만건 그 이상이 될 수 있는 데이터를 기반으로한 서비스를 계획 및 설계하고 있는데, 자바 스프링으로 서버를 구축 하려고 하는데 헥사고날 아키텍처를 저와 팀원은 경험 하지 못하였는데, 확장성 있는 서비스를 만들기 위해 헥사고날 아키텍처 기반으로 어떤 구조 설계를 하는 것이 좋을지 ,,, 조언 부탁드립니다.

답변 2

1

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

헥사고날 아키텍처를 그 원칙대로 잘 적용해보시면 좋겠습니다. 사실 스프링을 써서 개발하시는 분들이라면 어느 정도 헥사고날 아키텍처에 가까운 구조로 개발을 이미 하고 계실 겁니다. 거기에 기능 제공 인터페이스만 애플리케이션쪽으로 가져오시면 됩니다.

헥사고날 아키텍처 뿐 아니라 도메인 모델 패턴을 활용하시면 좋겠습니다. 데이터 분량과 상관없이 비즈니스 로직이 분명하게 들어가고, 변경이 일어날 가능성이 있다면, 데이터에 적용하는 로직을 도메인 모델로 반영하시면 이후 개발에 도움이 되실 겁니다.

그 외에 대량의 데이터를 처리하기 위한 아키텍처나 설계는 워낙 여러가지 고려할 점이 있을텐데 이건 실제 케이스에 따라서 워낙 다양한 접근 방법이 있을 겁니다. 그런데 이걸 초기에 아키텍처는 이래야해라고 다 결정해서 적용하기 보다는 우선은 가장 단순하지만 명확한 것으로 시작하고, 어떤 문제가 있을 거라는 점이 분명하게 드러날 때 단계적으로 발전시키는 방향으로 나가는 것이 좋습니다.

우리는 나중에 엄청나게 큰 서비스가 될 거니까 처음부터 MSA를 쓸 거야, 이런 식으로 시작하면 정말 처음에 중요하게 접근해야 할 도메인의 핵심을 잘 분석하고 이해하는 것이 뒷전이 되기 쉽습니다. MSA가 무슨 도움이 될지도 알 수 없는 채로 적용하면서, 수많은 기술적인 문제를 만나게 되면 개발팀은 지치게 되죠.

아키텍처에 대해서 너무 부담 가지지 마시고, 우선은 단순하게 시작하시되 강의에서 설명드리는 도메인 모델을 잘 반영하도록 코드를 작성하는 것, 환경과 기술 변화에 영향을 덜 받고 테스트를 잘 만들 수 있도록 헥사고날 아키텍처를 쓰는 것 정도면 충분하지 않을까 싶습니다.

감사합니다-!

0

안녕하세요, 인프런 AI 인턴입니다. 리틀마가린님!

백엔드 개발자로서 새로운 프로젝트에 헥사고날 아키텍처 적용을 고민 중이시군요. 헥사고날 아키텍처는 확장성과 유지보수성을 높이기 위해 설계된 패턴으로, 특히 대규모 데이터 처리와 같은 시나리오에서 유용할 수 있습니다.

헥사고날 아키텍처의 핵심 요소

  1. 포트(Ports):

    • 외부 세계와의 통신을 담당하며, 클라이언트가 도메인에 접근할 수 있도록 인터페이스를 제공합니다. REST API, 메시지 큐 등이 이에 해당할 수 있습니다.
  2. 어댑터(Adapter):

    • 포트를 구현하는 구체적인 클래스들이며, 외부 요청을 내부 도메인 로직으로 변환합니다.
  3. 도메인 로직(Domain Logic):

    • 비즈니스 규칙을 캡슐화하며, 응용 프로그램의 핵심입니다. 외부의 인프라스트럭처 관련 코드와 독립적으로 설계됩니다.
  4. 유연한 테스트 환경:

    • 테스트 용이성을 높이기 위해, 각 레이어를 독립적으로 테스트할 수 있는 구조를 가집니다.

헥사고날 아키텍처 적용 방안

  • 외부 API 및 데이터 소스의 추상화: 기존의 API와의 통신 또는 데이터베이스와의 상호작용을 추상화하여, 다양한 데이터 소스에 유연하게 대처할 수 있습니다.

  • 모듈화된 설계: 각 기능 단위를 모듈화하여, 독립적인 서비스 업데이트가 가능토록 설계합니다.

  • 도메인 중심의 설계: 핵심 도메인 로직을 잘 정의하여, 변화하는 요구사항에 유연하게 대응할 수 있도록 설계합니다.

추가 자료 및 학습

이와 관련된 기존의 사례와 예제들이 많습니다. 아래의 자료들도 참고하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 질문 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

리틀마가린님의 프로필 이미지
리틀마가린

작성한 질문수

질문하기