CQRS Pattern

대규모 시스템 설계 2023. 2. 15. 01:37

CQRS(Command Query Responsibility Segregation) 패턴 에 대해 알아보자... 단어 자체의 해석은.. 명령 조회 책임 분리(커멘드 쿼리 책임 분리)이다. (명령과 조회의 책임을 분리하자) -> 보통 성능이 중요한 조회용 외부 시스템과 비즈니스 명령이 많은 내부 시스템으로 분리한다. 자세한 정의 CQRS 패턴은 도메인에서 발생하는 이벤트와 상태를 분리하여 처리한다. 즉, 명령(Command)과 조회(Query)를 각각 다른 모델로 처리하는 것이다. 명령 모델은 상태 변경을 처리하고, 조회 모델은 상태를 조회한다. 이렇게 하면 각각의 모델은 명확한 역할을 가지게 되어 유지보수 및 확장이 용이해지며, 코드의 복잡성이 줄어들게 된다. 또한 CQRS 패턴은 이벤트 소싱(Event..

Article Thumbnail
Saga Pattern (feat. MSA)

대규모 시스템 설계 2023. 2. 13. 23:59

Saga Pattern은.. 마이크로 서비스들끼리 이벤트를 주고 받아 특정 마이크로 서비스에서의 작업이 실패하면.. 이전까지의 작업이 완료된 마이크로 서비스들에게 보상(Complemetary) 이벤트를 소싱함으로써 분산 환경에서 원자성(Atomicity)을 보장하는 패턴이다. 쉽게 풀어보자.. 트랜잭션의 관리 주체가 DB 서버 자신들이 아닌 Application에 있다. Application이 분산되었을 때 각 Application 하위에 존재하는 DB는 자신의 트랜잭션만 처리하는 구조에 사용된다. 따라서 MSA 구조에 사용하기 좋다. 2PC와 비교 2PC 와는 다르게 각 Application 은 자신의 트랜잭션만 처리하며.. Application 개발자가 트랜잭션 로직을 Application에 구현해야..

Article Thumbnail
Two Phase Commit (feat. MSA)

대규모 시스템 설계 2023. 2. 13. 23:59

MSA 아키텍처가 어려운 이유중 하나는.. 여러 마이크로 서비스간의 트랜잭션 처리이다. 기존 Monolithic 아키텍처에서는 DBMS가 제공해주는 트랜잭션 기능을 사용했다.. 자세하게.. 관계형 데이터베이스 + Monolithic 아키텍처를 도입한 서버 Application은 DB 서버에서 제공하는 트랜잭션의 Commit 과 Rollback을 이용하여 데이터를 일관성 있게 제어가 가능하다. 하지만.. MSA 구조에서는 Application 과 DB 가 분산 되어.. 트랜잭션 처리를 DBMS에서 제공하는 기능을 통해 달성할 수 없다. 자세하게.. MSA 구조에서는 각 서비스별로 DB 인스턴스 + Application이 분리 됨에 따라 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그..

Article Thumbnail
사용자 수에 따른 규모 확장성 5

대규모 시스템 설계 2022. 7. 23. 03:41

데이터 센터 이전 포스팅의 GSLB 개념에서 잠깐 알 수 있다. 아래 그림에서.. 사용자는 두개의 데이터 센터가 장애 없는 상황이라면 가장 가까운 데이터 센터로 안내된다. (GSLB, 지리적 라우팅) 위와 같이 Data center를 두군데 구축 해놨을 때... 한군데에 심각한 장애가 발생 했을 경우 다른 한 군데로 매핑 될 것이다. 주의사항 위 그림에서 무상태 아키텍처를 위한 사용자 상태의 저장소는 하나의 공유 저장소를 바라보고 있어서 갑자기 다른 데이터 센터로 변경 매핑될 지라도 문제가 없을 것이다. DB DB의 경우는 서로 연결이 되어있지 않아 문제가 발생한다. 따라서 여러 데이터 센터에 걸친 데이터 다중화 방법을 검토 해봐야 한다. TEST 웹 서버의 TEST는 반드시 모든 데이터 센터에서 수행 ..

Article Thumbnail