책너두 (도메인 주도 설계로 시작하는 마이크로서비스 개발) 13일차 (~110p)

요약

  • 마이크로서비스의 애플리케이션 아키텍처의 나머지 부분에 대해 이해함.
    • 마이크로서비스의 내부 구조 정의
      • 외부 영역 - 세부사항
        • API 퍼블리싱 어댑터
        • API 프락시 어댑터
        • 저장소 처리 어댑터
        • 도메인 이벤트 발행 어댑터
        • 도메인 이벤트 핸들러
  • 4장. 마이크로서비스와 애자일 개발 프로세스의 앞 부분을 이해함.
    • 도메인 주도 설계와 마이크로서비스

메모

3.3.3 외부 영역 - 세부사항

  • 외부 영역은 내부 영역의 서비스 인터페이스를 사용하는 인바운드 어댑터와 내부 영역에서 선언한 아웃바운드 인터페이스를 구현하는 다양한 어댑터로 구성됨.
    • 어댑터는 플러그인처럼 교체되거나 확장될 수 있어야 하며, 내부 영역이 먼저 정의된 후 외부 영역의 세부사항은 늦게 정의돼도 상관없도록 해야 함.
    • 이러한 방식이 소프트웨어를 부드럽게 만듦.
    • 주요 작업인 동기/비동기 통신 및 저장소 처리에 필요한 각 어댑터의 구현 메커니즘과 고려사항을 살펴볼 필요가 있음.

API 퍼블리싱 어댑터

  • API 퍼블리싱 어댑터REST API를 발행하는 인바운드 어댑터로, 내부 영역의 서비스 인터페이스를 호출하여 REST 형식의 API로 제공함.
    • REST 리소스 명칭을 정의하고, 서비스 인터페이스를 의도에 맞게 호출함.
    • 엔티티 대신 API에 맞는 DTO를 생성하여 변환 및 매핑하여 전달하는 것이 바람직함.

API 프락시 어댑터

  • API 프락시 어댑터다른 서비스의 API를 호출하는 아웃바운드 어댑터로, 내부 영역에 정의된 프락시 인터페이스를 구현함.
    • 다른 서비스의 API는 REST API, 소켓, 또는 SOAP 프로토콜을 사용하는 API일 수 있어, 기술에 맞는 적절한 통신 방법을 구현해야 함.

저장소 처리 어댑터

  • 저장소 처리 어댑터 구현 시, 데이터 처리 메커니즘 선택이 필요함.
    • OR 매핑 방식SQL 매핑 방식을 사용할 수 있음.
    • 일반적으로, 트랜잭션 스크립트 패턴은 SQL 매핑 방식을 사용하고, 도메인 모델 패턴은 OR 매핑 방식을 선택함.
  • SQL 매핑 방식의 프레임워크로는 마이바티스가 인기 있고, OR 매핑 방식은 JPA스프링 데이터(Spring Data)가 많이 사용됨.
    • SQL 매핑 방식은 세밀한 SQL 제어가 필요할 때 유용함.
  • OR 매핑 방식은 개발자의 작업량을 줄이고, 설정에 따라 저장소를 쉽게 변경할 수 있음.
    • 이 방식은 SQL 매퍼 방식보다 유연하며, 질의문 품질과 생산성 향상을 꾀할 수 있음.
  • 최근 추세에 따르면, 외국에서는 OR 매퍼가 더 많이 사용되지만, 국내에서는 SQL 매퍼 사용률이 높음.
    • 아키텍트는 상황, 비즈니스의 성격, 팀원의 역량, 개발 효율성을 고려하여 저장 메커니즘을 선택해야 함.

도메인 이벤트 발행 어댑터

  • 도메인 이벤트 발행 어댑터는 서비스 간 비동기 메시지 통신에서 도메인 이벤트를 전달하는 역할을 함.
    • 도메인 이벤트는 상태 변경 사항을 나타내며, '주문됨', '주문 취소됨' 등의 클래스로 구현됨.
  • 도메인 이벤트 발행 어댑터는 내부 영역의 이벤트 인터페이스를 구현하여 아웃바운드로 특정 메시지 큐나 스트림 저장소에 발행하는 역할을 수행함.
    • 애그리거트 패턴을 적용할 경우, 도메인 이벤트는 애그리거트에서 발생한 사건이 됨.

도메인 이벤트 핸들러

  • 도메인 이벤트 핸들러는 도메인 이벤트 발행 어댑터와 상호 작용하는 인바운드 어댑터임.
    • 외부에서 발행된 도메인 이벤트를 구독하고, 이를 내부 영역으로 전달하는 역할을 수행함.
    • 이벤트 상태에 따라 적절한 서비스 인터페이스를 호출하여 내부 영역에 이벤트를 전달함.

04. 마이크로서비스와 애자일 개발 프로세스

  • 제품 중심의 반복/점진적 애자일 개발 프로세스가 마이크로서비스를 만들기 위한 가장 효율적인 방식이다.
    • 애자일은 다기능 팀에서 가장 효율적인 의사소통 구조와 협업 체계를 필요로 함.
    • 애자일 방법론에는 지속적 통합데브옵스가 포함되어 있음.
  • 애자일에서의 설계는 단순한 설계(Simple Design)를 통해 최소한의 실제로 동작하는 제품(MVP)을 만들고, 이를 자주 배포하는 것이 중요함.
    • 애자일은 빨리, 그리고 자주 실패를 경험하며 지속적으로 향상시키는 것을 강조함.
    • 하지만 성숙하지 않은 개발 문화의 팀에게 이 정도의 지침만 제공하면 문제가 발생할 수 있음.

그러므로 기민한 반복 주기에 적합한 마이크로서비스 설계 및 개발 방법이 필요함.

4.1 도메인 주도 설계와 마이크로서비스

  • 도메인 주도 설계(DDD)는 에릭 에반스(Eric Evans)가 쓴 책으로, 마이크로서비스 대중화 이전에 출간됨.
    • DDD는 객체지향 설계 및 개발의 유용한 패턴을 정리하였으며, 이후 마이크로서비스 개발에서 주요 가이드로 사용됨.
    • DDD는 응집성 있는 도메인 중심의 마이크로서비스 도출내부 비즈니스 로직 설계에 활용됨.
  • DDD에는 전략적 설계(strategic design)전술적 설계(tactical design) 영역이 있음.
    • 전략적 설계는 도메인 전문가와 기술 팀이 함께 도메인 지식을 공유하고, 바운디드 컨텍스트(bounded context)를 정의하며, 컨텍스트 맵(context map)을 작성함.
    • 전술적 설계는 도메인 모델을 구성하는 모델링 구성요소를 설명함.
  • 이 책에서는 DDD 기법을 애자일 프로세스와 연계하여 마이크로서비스 설계 및 개발하는 공정을 설명함.

댓글

Designed by JB FACTORY