# 시스템 간 비동기 연동 방식

분리된 시스템 간의 비동기 연동은 시스템 간의 결합도를 낮출 수 있으며, 호출된 시스템의 응답을 기다리지 않으므로 더욱 빨리 사용자의 요청에 응답할 수 있다는 장점이 있음.

비동기 연동 방식으로 메시징 시스템 활용, 데이터베이스 활용, CDC 활용 방식

### 각 방식에 대한 설명과 고려사항

#### 메시징 시스템 활용 방식

두 시스템 사이에 메시징 시스템을 두어 비동기로 연동하는 방식임. 해당 방식은 한 시스템에서 메시지를 생성해서 메시징 시스템에 송신한 이후, 다른 시스템에서 메시징 시스템으로부터 메시지를 읽어와 메시지를 처리함.

Kafka, RabbitMQ 가 주로 메시징 시스템으로 활용됨. 해당 방식은 처리량이 높은 것이 장점임.

하지만, 메시지 유실, 메시지 소비 순서, 트랜잭션에 대한 고민이 추가적으로 필요함. 1개의 트랜잭션 내에 메시지 전송과 데이터베이스 삽입이 존재한다고 했을 때, 데이터베이스 삽입이 실패했는 데 메시지는 전송되거나, 데이터베이스 삽입은 성공했는데, 메시지 전송이 실패한 경우를 떠올려 볼 수 있음. 만약 이러한 상황이 존재한다면, 2개의 작업을 어떻게 원자적으로 수행할 수 있을 지 추가적인 고민이 필요함.

#### 데이터베이스 활용 방식

데이터베이스를 메시징 시스템처럼 사용하는 방법. 한 시스템에서 데이터베이스 테이블에 필요한 메시지 레코드를 추가하고 연동 시스템이 테이블을 주기적으로 읽음. 만약 새로운 메시지가 추가되면 연동 시스템은 다른 시스템으로 메시지를 전송함. 해당 방식은 트랜잭션과 메시지 순서가 보장되며, 메시지 유실에 대한 걱정이 없다는 것이 장점임.

하지만, 해당 방식은 범용성이 떨어질 수 있음. 메시지에 대한 형식이 빈번히 변경될때마다 메시지 레코드에 대한 스키마도 변경해주어야 하기 때문임. 추가적으로 해당 방식은 삭제 정책과 읽기 빈도 등 추가적으로 고민해야할 부분들이 존재함.

#### CDC(Change Data Capture) 활용 방식

데이터베이스의 변경 사항을 조회하여, 이를 다른 시스템에 전파하는 방식임. 가령 별도의 시스템이 변경 감지 대상 데이터베이스의 바이너리 로그를 조회하여 변경을 전파하도록 구현할 수 있음. 해당 방식은 트랜잭션이 보장되며, 메시지를 생성하거나 별도로 저장할 필요가 없으니 상대적으로 애플리케이션 로직이 단순하다는 장점이 있음.&#x20;

하지만, 변경 로그만 존재할뿐 왜 바뀌었는지에 대한 추가적인 정보가 없기 때문에 사용하는데 제약이 존재할 수 있음.
