inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

헥사고날 아키텍처에서 Specification 패턴과 Strategy 패턴을 함께 사용하는 것이 적절할까요?

157

부분적무료화

작성한 질문수 1

0

안녕하세요, 토비님 강의 정말 잘 보고 있습니다.
하나 궁금한 점이 있어서 질문드립니다.

헥사고날 아키텍처(Hexagonal Architecture)를 도입할 때, Specification 패턴Strategy 패턴을 함께 사용하는 것에 대해 어떻게 생각하시나요?

좋은 선택이 될 수 있을지, 아니면 둘 중 하나만 선택해서 사용하는 것이 더 나은 접근일지 고민하고 있습니다.두 패턴을 함께 사용하는 사례나 장단점에 대해 조언해주시면 감사하겠습니다.

java spring spring-boot specificationpattern strategypattern

답변 2

1

토비

질문하시는 배경을 제가 잘 알지 못해서 어떤 설명을 해드려야할지 모르겠습니다.

DDD에서 이 두 가지 패턴에 대한 일반적인 설명을 원하시는 것인가요?

어떤 케이스에서 어떤 이유로 둘 중의 하나만 선택하거나 같이 써야할지 고민을 하고 계신지 궁금합니다. 이 두 패턴은 배타적인 게 아닙니다. 각각 패턴을 적용해야 하는 특정 상황이 있을 수 있고, 이걸 보편 언어로 표현해서 도메인의 개념을 더 이해하고 응용할 수 있다면 사용하시면 됩니다. 헥사고날 아키텍처와는 별 관련이 없습니다.

전략 패턴은 규칙을 담은 알고리즘의 교체가 필요한 경우에 사용하고, 명세 패턴은 규칙을 명시적으로 표현하고 유연한 조합이 필요할 때 사용합니다. 각각 필요한 경우에 사용하면 되지, 같이 사용해야 할지를 굳이 따져야 할 이유는 잘 모르겠습니다.

클린 스프링 시리즈가 이어지면서 좀 더 복잡한 도메인 로직을 다루는 케이스가 나올텐데, 그때 이 두 가지 패턴을 사용하는 예를 보여드릴 계획이 있습니다.

1

부분적무료화

복잡한 도메인 로직을 다룰 때 어떤 패턴이 더 나을까 하는 단순한 고민이었는데, 설명을 듣고 보니 결국 상황에 맞게 적절하게 사용하는 게 중요하겠다는 생각이 드네요. 꼭 둘 중 하나를 선택해야 하는 건 아니고, 각 패턴이 필요한 맥락에서 유연하게 적용하면 되겠네요. 좋은 설명 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 황준하님께서 헥사고날 아키텍처에서 Specification 패턴과 Strategy 패턴의 사용에 대해 질문해 주셨습니다.

Specification 패턴과 Strategy 패턴은 모두 객체 지향 설계에서 유연성과 재사용성을 높이기 위한 디자인 패턴이지만, 사용 목적과 방식이 다릅니다.

두 패턴의 장단점 및 사용 사례

  1. Specification 패턴:

    • 장점: 비즈니스 로직을 캡슐화하여 규칙을 정의하고, 이러한 규칙들을 조합하여 복잡한 조건을 만들 수 있습니다. 이는 주로 도메인 모델에서 복잡한 조건을 체크할 때 유용합니다.
    • 사례: 헥사고날 아키텍처에서는 도메인 계층 내에서 특정 비즈니스 규칙들을 명확하게 구현하는데 유용합니다.
  2. Strategy 패턴:

    • 장점: 알고리즘을 패밀리로 정의하고, 이들을 클라이언트에서 교체할 수 있도록 합니다. 이는 알고리즘의 변형을 쉽게하고, 새로운 알고리즘을 추가할 수 있는 유연성을 제공합니다.
    • 사례: 다양한 정책이나 알고리즘을 사용해야 할 때, 예를 들어 다양한 정렬 방식이나 할인 정책 등을 전략으로 구현하여 필요에 따라 교체할 수 있습니다.

두 패턴의 함께 사용하는 경우

  • 장점: 두 패턴을 함께 사용하면 복잡한 비즈니스 규칙을 세밀하게 관리할 수 있고, 알고리즘을 유연하게 교체할 수 있는 강력한 설계를 만들 수 있습니다.
  • 단점: 설계가 복잡해질 수 있으며, 필요 이상으로 유연성을 제공하여 오히려 이해하기 어려운 코드가 될 수 있습니다.

추천 접근

두 패턴을 함께 사용하는 것은 목표를 명확히 하고, 시스템의 요구 사항을 고려하여 결정하는 것이 중요합니다. 두 패턴이 도메인 모델 내의 각기 다른 목적을 위해 사용된다면, 함께 사용하는 것이 좋은 선택이 될 수 있습니다. 그러나, 코드 복잡성이나 유지보수성을 저해할 가능성이 있다고 판단되면 단일 패턴으로 시작해도 좋습니다.

관련 질문 및 자료

이와 유사한 주제로 다른 개발자들과 전문가들이 논의한 내용을 참고하면 더욱 도움이 될 수 있습니다:
- 패턴을 활용한 애플리케이션 디자인
- DDD와 헥사고날 아키텍처에서의 패턴 사용

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

N+1 관련해서 질문있습니다.

0

45

3

도메인 모델에서 관계와 규칙을 구분하는 방법

0

61

2

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

0

139

2

어댑터에서 도메인에 직접 의존하는 경우에 대해

0

136

2

Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.

0

118

2

MemberService와 EmailSender 책임 분리에 대한 질문

0

109

2

NonNullApi를 NullMarked로 대체하라고 합니다.

0

133

2

39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.

0

80

2

Repository Adapter 설계에 대해 피드백을 부탁드립니다

0

112

2

헥사고날 part2 강의 출시 예정일 문의 드립니다.

0

263

2

PT 문의사항

0

104

1

초기 어플리케이션 구동 시 compose.yml 파싱 오류

0

153

2

애플리케이션의 JPA 리턴과 도메인 모델

0

131

2

애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의

0

139

2

페이징 처리를 해야한다면 어떻게 해야할까요?

0

197

2

애그리거트의 repository

0

127

2

Domain Expert가 정확히 어떤 역할을 하는 사람인가요?

0

238

1

회원 애플리케이션 서비스 테스트 (1)

0

110

2

정적 팩토리 메서드 관련 질문드립니다!

0

112

2

spotbug + @NonNullApi 로만 Null 방어가 될까요?

0

131

2

required 포트에 관해서

0

95

2

혹시 다음 편은 언제쯤 오픈할까요?

0

173

2

서비스 단위 테스트 코드 작성

0

104

2

domain 모듈에 entity를 정의한다고 했을때

0

106

2