본문 바로가기

기타60

[MSA] 2페이즈 커밋(2PC) 쓰지 말자 이 글은 '샘 뉴먼 - 마이크로소프트 아키텍처 구축' 내용을 기반으로 합니다. 2페이즈 커밋은 여러 시스템에 걸쳐 있는 작업을 원자적으로 처리하려는 분산 트랜잭션을 관리하기 위한 알고리즘 중 하나이다. 작동 방식:투표 단계(Voting Phase): 트랜잭션 관리자(=중앙 코디네이터)가 모든 참여자(Cohort)에게 로컬 트랜잭션을 커밋할 준비가 되었는지 묻는다.커밋 단계(Commit Phase): 모든 참여자가 '예'라고 답하면, 관리자는 모든 참여자에게 커밋하라고 지시한다. 만약 한 명이라도 '아니오'라고 한다면, 관리자는 모든 참여자에게 롤백을 지시한다.문제점: 이 방식은 모든 참여자가 중앙 코디네이터의 지시를 기다려야 하므로 시스템을 취약하게 만든다. 코디네이터나 참여자 중 하나라도 응답하지 않으.. 2025. 5. 5.
[MSA] 서비스 메시(Service Mesh) 이 글은 '샘 뉴먼 - 마이크로소프트 아키텍처 구축' 내용을 기반으로 합니다.서비스 메시는 마이크로서비스 간 네트워크 통신, 검색, 로드 밸런싱, 회복성, 보안, 모니터링 등을 처리하는 전용 인프라 계층을 의미한다. 복잡한 마이크로서비스 환경에서 서비스 간의 통신은 매우 중요하고 어려운데, 서비스 메시는 이러한 통신과 관련된 여러 기능들을 애플리케이션 코드 변경 없이 일관되고 효과적으로 관리할 수 있도록 도와준다.Sidecar 프록시 패턴 (예전 방식)서비스 메시는 일반적으로 각 마이크로서비스 인스턴스 옆에 '사이드카(Sidecar)' 형태로 네트워크 프록시(예: Envoy)를 배포하는 방식으로 구현된다. 애플리케이션 컨테이너와 동일한 배포 단위(예: 쿠버네티스 Pod) 내에서 실행되는 이 사이드카 프록.. 2025. 5. 5.
[MSA] 도메인 주도 설계(Domain-Driven Design - DDD) 이 글은 '샘 뉴먼 - 마이크로소프트 아키텍처 구축' 내용을 기반으로 합니다. DDD(도메인 주도 설계)는 현실 세계의 도메인을 코드로 표현하는 것의 중요성을 강조하고, 이를 바탕으로 시스템을 더 효과적으로 모델링하는 방법이다. 마이크로서비스 아키텍처 설계 시 DDD 원칙을 적용하면, 각 서비스가 명확한 책임을 가지고 독립적으로 발전할 수 있는 기반을 마련할 수 있다. 특히, DDD에서 가장 중요한 것은 경계 컨텍스트(Bounded Context) 를 사용하여 서비스 경계를 정의하는 것이다.경계 컨텍스트 (Bounded Context): 특정 도메인은 여러 개의 경계 컨텍스트로 구성된다. 각 컨텍스트는 자신만의 모델과 언어(Ubiquitous Language)를 가지며, 다른 컨텍스트와는 명확히 구분된다.. 2025. 5. 5.
[MSA] 사가 구현: 오케스트레이션 vs 코레오그래피 오케스트레이션형 사가오케스트레이션형 사가는 중앙 조정자(오케스트레이터)를 사용해 실행 순서를 정의하고 필요한 보상 조치를 트리거한다. 오케스트레이션 기반 사가는 명령과 제어 방식이라고 생각할 수 있다. 오케스트레이터는 어떤 일이 언제 일어나는지를 제어하며, 이를 통해 사가에서 어떤 일이 일어나는지를 충분히 파악할 수 있다. 장점: 워크플로 로직이 중앙 집중화되어 이해하고 관리하기 비교적 쉽고, 전체 프로세스의 상태를 추적하기 용이하다.단점: 오케스트레이터가 단일 실패 지점(Single Point of Failure) 또는 병목 지점이 될 수 있다. 참여 서비스들은 오케스트레이터에 종속될 수 있다. 코레오그래피형 사가코레오그래피형 사가는 여러 협력 서비스 사이에서 사가 운영에 대한 책임을 분산시키는 것을.. 2025. 5. 1.
[MSA] 분산 트랜잭션의 문제 해결 - 사가(Saga) 사가는 여러 단계의 로컬 트랜잭션으로 구성된 비즈니스 프로세스다. 각 로컬 트랜잭션은 특정 서비스내에서 원자적으로 수행된다.이 흐름의 각 단계는 서로 다른 서비스에서 수행할 수 있는 작업을 나타낸다. 각 서비스 내부의 모든 상태 변경은 로컬 ACID 트랜잭션 내에서 처리될 수 있다. 사가를 통해 기술적인 실패가 아닌 비즈니스 실패로부터 복구할 수 있다는 점을 기억하자. 예를 들어, 고객이 결제를 시도했지만 고객의 자금이 부족하다면, 사가가 처리해야 하는 비즈니스 실패다. 반면에 결제 게이트웨이가 타임아웃이 되거나 500 에러를 발생시키면, 별도로 처리해야 하는 기술적 실패다. 사가는 기반 구성 요소가 제대로 동작하고 있다고 가정한다. 이 모든 단계가 단일 데이터베이스 트랜잭션에서 수행된 경우라면, 간단한.. 2025. 5. 1.