Dev/DDD13 마이크로서비스 설계 1. 마이크로서비스를 도출하는 방법마이크로서비스를 응집성이 높고(high cohesion), 다른 서비스와의 의존도는 낮게(low coupling) 구성하여 독립성을 갖추려면, 어떤 비즈니스 기능들을 묶는지가 중요하다.먼저 기존 조직을 분류했던 방법과 유사하게 업무 기능을 분해하는 방법이 있다. 경험적으로 익숙한 분류이기 때문에 비즈니스 이해에는 유용하지만, 서비스 간의 관계와 구체적인 기능을 파악하는 데는 한계가 있다반면, DDD 바운디드 컨텍스트를 기반으로 마이크로서비스를 도출하는 방법은 하위 도메인마다 데이터와 기능이 엮인 도메인 모델을 정의하기 때문에 도메인 모델의 소유권이 어떤 서비스인지 분명하게 할 수 있고, 이를 기반으로 서비스 간의 관계를 파악하기 용이하다.2. DDD에서의 설계DDD에서의.. 2025. 6. 6. MSA에서 아웃박스 패턴으로 결과적 일관성 확보하기 배경"크리에이터를 누적 상금이 높은 순으로 조회한다"는 요구사항 구현을 위해, 상금 모델의 위치를 user와 다른 컨텍스트인 campaign에 위치시키고, 매번 campaign 서비스에서 누적상금에 대한 api를 호출하는 것이 헤비하므로, 정렬을 위한 누적상금 속성을 유저 엔티티에 추가했다. 그리고 이 경우, 상금에 대한 정합성을 맞춰야 하는데 마이크로서비스 아키텍처(MSA)에서는 서비스별로 DB를 갖기 때문에, 두 서비스가 관련된 기능을 수행할 때 트랜잭션을 사가 패턴 혹은 아웃박스 패턴으로 구현하여 정합성을 맞춰야 한다. 메시지의 발송 상태와 재시도 측면에서 아웃박스 패턴이 유리하다고 판단했고, 실시간성을 요구하는 정보가 아니기 때문에 결과적 일관성 확보로 충분하다고 생각했다. 아웃박스 패턴으로 누적.. 2025. 6. 4. 마이크로서비스 애플리케이션 아키텍처 1. 관심사의 분리관심사의 분리(seperation of concern)라는 설계 원칙은 시스템의 각 영역이 처리하는 관심사가 분리되어야 한다는 원칙이다.소프트웨어 비즈니스 로직 영역의 업무 규칙, 흐름, 개념을 표현하는 비즈니스 로직과 DB 연동, HTTP통신, 메시징 등 기술적 세부 구현을 담당하는 기술 영역으로 구성된다. 개발자의 역할 중 하나는 문제 영역의 비즈니스 로직을 코드로 잘 표현하는 것인데, 이는 기능의 동작은 물론이고 이해하기 쉽고 변경에 유연한 시스템을 만드는 것을 의미한다. 비즈니스 로직 영역과 시술 영역을 분리했을 때, 복잡성을 낮추고 유지보수성을 높일 수 있다.1.1. 데이터베이스 중심 아키텍처의 문제점'데이터베이스 중심 아키텍처'란 특정 관계형 데이터베이스에 의존한 데이터 모델.. 2025. 6. 3. MSA의 이해 1. 마이크로서비스란마이크로서비스는 여러 개의 작은 서비스 집합으로 개발하는 접근 방법이다. 각 서비스에 사용되는 언어나 데이터베이스를 독립적으로 구성할 수 있으며, 이러한 특성을 “폴리글랏(polyglot)하다”고 표현한다. 서비스 간 호출은 api를 통하거나, 메시지 기반 이벤트를 사용하여 실행된다. 또한 서비스는 비즈니스 기능 단위로 구성되며, 자동화된 배포 방식을 이용하여 독립적으로 배포된다.아래 그림은 마틴 파울러가 정의한 마이크로서비스 개념도로, 앞서 서술한 특징을 살펴볼 수 있다.2. 마이크로서비스를 위한 조건MSA는 비단 소프트웨어를 구현하는 기술을 넘어, 조직 문화와 협업 방식과도 연계되어 있다. 마이크로 서비스를 구현하기 위한 필요 조건들을 살펴보자.업무 기능 중심 팀기능 중심으로 서비.. 2025. 5. 28. 이전 1 2 3 4 다음