강의

멘토링

커뮤니티

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

jayuffh22님의 프로필 이미지
jayuffh22

작성한 질문수

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

엔티티 식별자와 JPA 엔티티

헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?

작성

·

12

·

수정됨

0

안녕하세요,
이번 강의를 통해 처음으로 DDD와 헥사고날 아키텍처에 대해서 공부하고 있는 사람입니다.

 

헥사고날 아키텍쳐를 지키면서 배치, 시큐리티, 이벤트 처리 등등 다양한 기술을 어떻게 사용하나요?

제가 공부해본 바로는


1. 배치: 애플리케이션 계층에 배치를 통해 이루어질 api를 만들어두고, 어댑터 계층엔 배치(Job, Step, Writer, Reader등 )에 관한 설정들을 위치하게 한다.

2. 시큐리티: 전부 어댑터에 위치한다.

 

  1. 이벤트 처리: 이벤트는 도메인으로 간주하고 도메인 계층에 위치시키고, 이벤트 리스너는 어댑터 계층에 위치시킨다. 이벤트를 발행시키는 로직은 애플리케이션 계층에 위치하고, ApplicationEventPublisher 같은 경우는 추상화됐다고 판단하고 그냥 사용하거나, 혹은 인터페이스를 따로 만들어서 사용한다.

    이정도인데 큰 흐름에서 제가 이해한 게 맞을까요?

특히 궁금한 건 "이벤트가 도메인으로 간주되어도 문제가 없는지" 입니다.
(무조건 도메인이기 보다는 로직을 처리하기 위해 존재하는 dto로 볼 수도 있는 거 아닌가 싶어서요.)

다른 기술들을 헥사고날 아키텍쳐에 적용시킬 때 주의할만한 사항들도 따로 존재를 할까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. jayuffh22님!

헥사고날 아키텍처와 관련된 다양한 기술 사용에 대해 질문해주셨군요. DDD와 헥사고날 아키텍처는 특히 모듈화와 테스트 용이성을 강조하는 만큼, 다양한 기술들의 위치와 역할을 명확히 이해하는 것이 중요합니다. 언급하신 내용에 대해 추가적인 설명과 함께 답변드리겠습니다.

1. 배치 처리

  • 애플리케이션 계층: 배치 프로그램에 의해 실행될 비즈니스 로직을 포함한 API를 제공해야 합니다. 이는 배치 작업이 비즈니스 로직과 비즈니스 룰에 대한 책임을 가져야 한다는 것을 의미합니다.
  • 어댑터 계층: Spring Batch와 같은 기술을 사용하면서 Job, Step, ItemReader, ItemWriter 등의 배치 구성 요소를 설정해야 합니다. 이렇게 함으로써 외부 환경에 의한 변경이 애플리케이션 로직에 영향을 미치지 않도록 분리할 수 있습니다.

2. 시큐리티 처리

  • 어댑터 계층: 시큐리티와 같은 기술은 대부분 어댑터 계층에 위치하여, 외부로부터의 접근 제어 및 인증, 인가 로직을 처리합니다. 이렇게 하면 도메인 로직과 분리하여 보안을 관리할 수 있습니다.

3. 이벤트 처리

  • 도메인 계층: 이벤트 자체는 도메인 이벤트로 간주되어도 문제가 없습니다. 이벤트는 시스템 내의 중요한 상태 변화를 나타내기 때문에 도메인의 일부분으로 볼 수 있습니다.
  • 어댑터 계층: 이벤트 리스너는 어댑터 계층에 존재합니다. 이를 통해 외부에서 발행된 이벤트를 받아 처리하여 도메인 로직과는 분리된 형태로 작동할 수 있습니다.
  • 애플리케이션 계층: 이벤트를 발행하는 로직은 애플리케이션 계층에 위치하며, ApplicationEventPublisher 등을 통해 이벤트를 발행할 때 이를 추상화하거나, 인터페이스를 통한 사용도 가능합니다.

주의 사항

  • 계층 간의 결합도 최소화: 기술이 침투하여 도메인 로직이나 애플리케이션 계층이 특정 기술에 종속되지 않도록 주의해야 합니다.
  • 설계의 유연성: 설계가 지나치게 복잡해지지 않도록 하고, 유지보수와 확장이 용이하도록 지속적으로 모니터링해야 합니다.
  • 테스트 용이성: 각 계층은 독립적으로 테스트될 수 있도록 구성해야 하며, 각 계층 간의 인터페이스는 테스트 환경에서도 쉽게 사용할 수 있도록 유지해야 합니다.

관련 자료를 통해 더 깊이 있는 이해를 도울 수 있는 링크를 공유드립니다:

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

jayuffh22님의 프로필 이미지
jayuffh22

작성한 질문수

질문하기