Inflearn brand logo image

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

부분적무료화님의 프로필 이미지
부분적무료화

작성한 질문수

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

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

작성

·

112

0

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

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

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

답변 2

1

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

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

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

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

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

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

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

0

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

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

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

  1. Specification 패턴:

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

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

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

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

추천 접근

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

관련 질문 및 자료

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

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

부분적무료화님의 프로필 이미지
부분적무료화

작성한 질문수

질문하기