DDD - 에릭 에반스, (16장 대규모 구조)

2024. 6. 29. 14:57· 도서
목차
  1. 발전하는 질서(Emerging Order)
  2. 시스템 은유(System Metaphor)
  3. 책임 계층(Responsibility Layers)
  4. 지식 수준(Knowledge Level)
  5. 착탈식 컴포넌트 프레임워크(Pluggable Component Framework)
반응형

발전하는 질서(Emerging Order)

  • 대규모 시스템이 시간이 지남에 따라 자연스럽게 구조화되고, 일관성을 갖추게 되는 과정을 의미
  • 시스템이 진화하면서 일관성과 체계를 유지할 수 있도록 돕는 설계 접근 방식
  • 특징:
    • 점진적 설계: 시스템이 진화하고 변화하면서 점진적으로 설계를 개선하고 정제한다
    • 적응성: 시스템이 환경 변화나 새로운 요구사항에 적응할 수 있도록 유연하게 설계한다
    • 일관성 유지: 변화 과정에서 시스템의 일관성을 유지하기 위해 노력한다
  • 예제:
    • 애자일 개발 방법론: 초기에는 전체 시스템을 상세히 설계하지 않고, 스프린트 단위로 점진적으로 설계하고 구현한다

시스템 은유(System Metaphor)

  • 시스템의 구조와 동작을 이해하기 쉽게 하기 위해 사용하는 비유적 표현
  • 복잡한 시스템을 설명하고 이해하는 데 도움이 된다
  • 특징:
    • 직관적 이해: 시스템의 구조와 동작을 직관적으로 이해할 수 있도록 한다
    • 공통 언어: 팀원들이 공통적으로 이해할 수 있는 언어를 제공한다
    • 설명 용이: 복잡한 개념을 쉽게 설명할 수 있도록 돕는다
  • 예제:
    • "버스" 은유:
      • 메시지 버스(Message Bus)는 메시지를 버스에 태워 목적지까지 이동시키는 방식으로 설명할 수 있다
      • 이는 메시지 전송 시스템의 동작을 직관적으로 이해할 수 있게 한다

책임 계층(Responsibility Layers)

  • 시스템의 책임을 여러 계층으로 분리하여 각 계층이 특정한 역할과 책임을 가지도록 하는 설계 패턴
  • 이는 시스템의 복잡성을 관리하고, 변경의 영향을 최소화하는 데 도움이 된다
  • 특징:
    • 명확한 책임 분담: 각 계층이 명확한 책임을 가진다
    • 의존성 관리: 계층 간의 의존성을 최소화하여 변경의 영향을 줄인다
    • 유지보수성 향상: 각 계층이 독립적으로 변화할 수 있어 유지보수가 용이하다
  • 예제: 3계층 아키텍처:
    • 프레젠테이션 계층, 비즈니스 로직 계층, 데이터 접근 계층으로 분리하여 각각의 책임을 명확히 한다
// 프레젠테이션 계층
public class OrderController {
    private final OrderService orderService;
    
    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    public ResponseEntity<Order> createOrder(OrderRequest request) {
        Order order = orderService.createOrder(request);
        return new ResponseEntity<>(order, HttpStatus.CREATED);
    }
}

// 비즈니스 로직 계층
public class OrderService {
    private final OrderRepository orderRepository;
    
    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    public Order createOrder(OrderRequest request) {
        // 주문 생성 로직
        Order order = new Order();
        // ...
        return orderRepository.save(order);
    }
}

// 데이터 접근 계층
public interface OrderRepository extends JpaRepository<Order, Long> {
}

 

지식 수준(Knowledge Level)

  • 도메인 모델에서 핵심적인 개념과 규칙을 정의하는 추상화 계층을 의미한다
  • 이는 시스템의 비즈니스 규칙과 로직을 명확히 하는 데 도움을 준다
  • 특징:
    • 추상화: 비즈니스 규칙과 개념을 추상화하여 명확히 정의한다
    • 일관성 유지: 비즈니스 규칙의 일관성을 유지한다
    • 명확한 규칙: 시스템의 핵심 규칙을 명확히 정의하여, 이해와 유지보수를 용이하게 한다
  • 예제: 대출 승인 규칙:
    • 대출 승인에 필요한 규칙과 조건을 지식 수준에서 명확히 정의.
public class LoanApprovalService {
    public boolean approveLoan(LoanApplication application) {
        // 대출 승인 규칙
        if (application.getCreditScore() >= 700 && application.getAnnualIncome() > 50000) {
            return true;
        }
        return false;
    }
}

 

착탈식 컴포넌트 프레임워크(Pluggable Component Framework)

  • 시스템의 각 구성 요소를 독립적으로 개발하고, 필요에 따라 시스템에 쉽게 추가하거나 제거할 수 있도록 설계된 프레임워크
  • 특징:
    • 독립성: 각 컴포넌트는 독립적으로 개발되고 배포될 수 있다
    • 유연성: 새로운 컴포넌트를 쉽게 추가하거나 제거할 수 있다
    • 확장성: 시스템의 기능을 확장하기 용이하다
  • 예제: 플러그인 아키텍처:
    • 새로운 기능을 플러그인 형태로 추가하여, 기존 시스템을 변경하지 않고 기능을 확장할 수 있다
// 플러그인 인터페이스
public interface PaymentPlugin {
    PaymentResponse processPayment(PaymentRequest request);
}

// PayPal 플러그인 구현
public class PayPalPaymentPlugin implements PaymentPlugin {
    @Override
    public PaymentResponse processPayment(PaymentRequest request) {
        // PayPal 결제 처리 로직
    }
}

// Stripe 플러그인 구현
public class StripePaymentPlugin implements PaymentPlugin {
    @Override
    public PaymentResponse processPayment(PaymentRequest request) {
        // Stripe 결제 처리 로직
    }
}

// 결제 서비스
public class PaymentService {
    private List<PaymentPlugin> paymentPlugins;

    public PaymentService(List<PaymentPlugin> paymentPlugins) {
        this.paymentPlugins = paymentPlugins;
    }

    public PaymentResponse processPayment(PaymentRequest request) {
        for (PaymentPlugin plugin : paymentPlugins) {
            PaymentResponse response = plugin.processPayment(request);
            if (response != null) {
                return response;
            }
        }
        throw new PaymentProcessingException("No suitable payment plugin found");
    }
}
반응형
LIST

'도서' 카테고리의 다른 글

DDD - 에릭 에반스, (15장 디스틸레이션)  (0) 2024.06.29
DDD - 에릭 에반스, (14장 모델의 무결성 유지)  (0) 2024.06.29
DDD - 에릭 에반스, (11장 모델과 디자인 패턴의 연결)  (0) 2024.06.29
DDD - 에릭 에반스, (11장 분석 패턴의 적용)  (1) 2024.06.29
DDD - 에릭 에반스, (10장 유연한 설계)  (0) 2024.06.29
  1. 발전하는 질서(Emerging Order)
  2. 시스템 은유(System Metaphor)
  3. 책임 계층(Responsibility Layers)
  4. 지식 수준(Knowledge Level)
  5. 착탈식 컴포넌트 프레임워크(Pluggable Component Framework)
'도서' 카테고리의 다른 글
  • DDD - 에릭 에반스, (15장 디스틸레이션)
  • DDD - 에릭 에반스, (14장 모델의 무결성 유지)
  • DDD - 에릭 에반스, (11장 모델과 디자인 패턴의 연결)
  • DDD - 에릭 에반스, (11장 분석 패턴의 적용)
iron_jin
iron_jin
배운 것에 대한 내 생각을 가지고 정리하자
學而不思則罔(학이불사즉망)배운 것에 대한 내 생각을 가지고 정리하자
iron_jin
學而不思則罔(학이불사즉망)
iron_jin
전체
오늘
어제
  • 전체 (163)
    • 도서 (10)
    • 생각 정리 (0)
    • 후기 모음 (14)
    • 언어 (20)
      • css (1)
      • java (9)
      • Kotlin (0)
      • javascript (0)
      • Solidity (3)
      • Python (3)
      • GO (3)
      • C++ (1)
    • Spring Framework (32)
      • spring (16)
      • JPA (6)
      • Error (4)
      • Settings (4)
    • 알고리즘 (62)
      • 이론 (0)
      • 연습문제 (58)
    • 인프라 (6)
      • 클라우드 (1)
      • 도커 (0)
      • AWS (4)
      • Elastic Search (0)
    • 쿠버네티스 (3)
      • 이론 (0)
      • 실습 (2)
      • 트러블슈팅 (1)
    • Nginx (2)
    • CS (4)
      • 서버 (0)
      • 리눅스 (2)
      • 네트워크 (0)
      • OAuth (2)
    • 형상관리 (3)
      • GIT (3)
    • Open API (3)
      • 카카오 API (1)
      • QGIS (2)
    • 보안 (0)
      • 알고리즘 (0)
    • 공통 (1)
      • 성능 관리 도구 (1)
    • Database (2)
      • MySQL (1)
      • Redis (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 에릭 에반스
  • 2018 kakao
  • ddd
  • 2019 kakao
  • 2018 카카오 블라인드
  • Hibernate
  • JPA
  • 백준
  • 도메인 주도 개발
  • 2020 카카오 블라인드
  • 알고리즘
  • Java
  • SpringBoot
  • 2020 카카오
  • 자바
  • 프로그래머스
  • 코딩테스트
  • AWS
  • MySQL
  • 스프링
  • 2019 카카오 블라인드
  • 2019 카카오
  • 항해99
  • 카카오 겨울 인턴십
  • 2020 kakao
  • 스프링 부트
  • 항해플러스
  • spring
  • Python
  • spring boot

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
iron_jin
DDD - 에릭 에반스, (16장 대규모 구조)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.