분산 시스템에서 비동기 연동 방식을 사용하는 이유
분산 시스템에서는 여러 컴포넌트가 서로 독립적으로 운영되며, 서로 다른 네트워크/서버/서비스 간 통신이 발생
이때 하나의 장애가 전체 시스템 장애로 번지지 않도록 하기 위해 비동기 연동이 필요
시스템 간 비동기 연동 방식
시스템 간 비동기 연동은 시스템끼리 바로 응답을 주고받지 않고, 작업을 위임하거나 나중에 처리하는 방식
요청한 쪽은 결과를 기다리지 않기 때문에 더 빠르게 사용자에게 응답할 수 있다.
또한 시스템끼리 느슨하게 연결되기 때문에 유지보수성과 확장성이 높다.
1. 메시징 시스템 활용
메시징 시스템 활용이 적절한 이유
- 서비스 간 결합도를 낮춤: 직접 호출이 아닌 메시지를 통해 간접적으로 연결되므로 각 서비스가 독립적으로 배포되고 확장 가능
- 비동기 처리로 부하 분산 가능: 생산자(Producer)와 소비자(Consumer)가 서로 영향을 주지 않고 처리 가능
- 높은 확장성: Kafka 같은 시스템은 파티션 기반의 수평 확장이 가능하여 대량의 데이터 처리에 유리
- 장애 격리: 소비자가 일시적으로 죽어도 메시지는 큐에 남아 있어 재처리 가능
→ 확장성과 독립성이 중요한 분산 시스템에서 탄력적이고 느슨한 연결 구조를 만들 수 있기 때문
개념
Kafka, RabbitMQ와 같은 메시징 시스템을 두고, 시스템 간 메시지를 주고받는 구조
한 시스템이 메시지를 메시징 시스템에 전송하면, 다른 시스템이 그 메시지를 읽어와 처리
장점
- 처리량이 높고 빠르다.
- 수평 확장이 용이하다.
고려사항
- 메시지 유실 방지를 위한 처리 필요
- 메시지 처리 순서를 보장해야 하는 경우 별도 설정 필요 (Kafka는 파티션 단위로 순서 보장)
- 메시지 전송과 데이터베이스 작업 사이의 트랜잭션 처리
- 예: 메시지는 전송됐지만 DB 저장이 실패하거나, 그 반대의 경우
- 이를 해결하기 위해 Outbox 패턴 등을 고려할 수 있음
2. 데이터베이스 테이블 활용
분산 시스템에서 작고 단순한 메시지 흐름이 필요할 때 적절한 저비용 방식
개념
중간 메시징 시스템 없이 데이터베이스 테이블을 메시지 큐처럼 사용하는 방식이다.
한 시스템이 메시지를 테이블에 저장하면, 다른 시스템이 주기적으로 테이블을 조회하여 메시지를 읽고 처리한다.
장점
- DB 트랜잭션으로 메시지 저장과 다른 작업을 함께 처리할 수 있다.
- 메시지 유실 위험이 적고, 처리 순서 보장이 쉽다.
고려사항
- 조회 주기를 너무 짧게 하면 부하가 발생하고, 길게 하면 반응이 느려질 수 있음
- 메시지를 삭제하거나 보관하는 정책 필요
- 메시지 구조가 자주 바뀌면 테이블 스키마도 자주 변경해야 함
- 고성능 처리에는 적합하지 않을 수 있음
3. CDC (Change Data Capture) 활용
개념
데이터베이스의 변경 로그(binlog 등)를 읽어 변경 사항을 다른 시스템에 전파하는 방식이다.
Debezium 등의 도구를 통해 구현할 수 있다.
| CDC 방식이 적절한 이유
- 기존 시스템 변경 없이 데이터 흐름 추적 가능: DB 로그만 보면 되기 때문에 기존 애플리케이션을 수정하지 않아도 됨
- 트랜잭션 기반의 신뢰성: 데이터베이스의 커밋 로그를 기반으로 하므로 변경 순서와 정합성 보장
- 데이터 복제나 실시간 파이프라인 구축에 유리: 데이터 웨어하우스, 검색엔진 등으로의 동기화 용이
| 분산 시스템에 특히 유리한 경우
이벤트 소싱 기반 아키텍처 마이크로서비스 간 상태 동기화 실시간 데이터 파이프라인 구축
→ 분산 시스템에서 데이터 중심의 이벤트 흐름을 안정적으로 처리할 수 있는 방식
장점
- 데이터베이스 트랜잭션 단위로 동작하여 정합성이 보장된다.
- 별도로 메시지를 생성하거나 저장할 필요 없어 애플리케이션 로직이 단순하다.
고려사항
- 변경된 값만 존재하므로 변경 이유는 알 수 없다.
- 데이터베이스 구조가 바뀌면 CDC 처리 로직도 함께 수정이 필요하다.
- 민감한 정보가 로그로 노출되지 않도록 필터링 및 보안 설정이 필요하다.
| 방식 | 장점 | 고려사항 |
| 메시징 시스템 | 처리량이 높고 확장성이 좋음 | 메시지 유실, 순서 보장, 트랜잭션 처리 필요 |
| 데이터베이스 테이블 | 트랜잭션 보장, 유실 적음 | 조회 주기 및 삭제 정책 필요, 확장성 제한 |
| CDC 방식 | 트랜잭션 보장, 로직 단순 | 변경 이유 파악 불가, DB 구조 변경 시 리스크 존재 |
'IT > CS 공부' 카테고리의 다른 글
| [CS] Redis가 싱글 스레드로 동작하는 이유 (0) | 2025.05.20 |
|---|---|
| [CS] CAP 정리 (0) | 2025.05.15 |
| [CS] 캐시 스템피드 현상 (0) | 2025.05.13 |
| [CS] [데이터베이스] 정규화 (0) | 2022.07.01 |
| [CS][알고리즘] BFS/DFS (0) | 2022.06.29 |