오늘의 질문
시스템 간 비동기 연동 방식에는 무엇이 있나요?

📍 정답 확인

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


메시지 시스템 활용 방식 (Kafka, RabbitMQ)

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

[ 장점 ]

  • 처리량이 높다.

[ 단점 ]

  • 메시지 유실, 메시지 소비 순서, 트랜잭션에 대한 고민이 필요하다.

  • 1개의 트랜잭션 내에 메시지 전송과 데이터베이스 삽입이 있을 때, 둘 중 하나만 성공하는 경우가 있을 수 있다. 이 2개의 작업을 어떻게 원자적으로 수행할 수 있을지에 대한 고민이 필요하다.


데이터베이스 활용 방식

데이터베이스를 메시징 시스템처럼 활용하는 방식이다.
한 시스템에서 데이터베이스 테이블에 필요한 메시지 레코드를 추가하고 연동 시스템이 테이블을 주기적으로 읽는다.
만약 새로운 메시지가 추가되면 연동 시스템은 다른 시스템으로 메시지를 전송한다.

[ 장점 ]

  • 트랜잭션과 메시지 순서가 보장된다.

  • 메시지 유실에 대한 걱정이 없다.

[ 단점 ]

  • 범용성이 떨어질 수 있다. 메시지 형식이 변경될때마다 메시지 레코드에 대한 스키마도 변경해주어야 하기 때문.

  • 삭제 정책, 읽기 빈도 등 고민해야 한다.


CDC (Change Data Capture) 활용 방식

데이터베이스의 변경 사항을 조회하여 다른 시스템에 전파하는 방식이다.
가령 별도의 시스템이 변경 감지 대상 데이터베이스의 바이너리 로그를 조회하여 변경을 전파하도록 구현할 수 있다.

[ 장점 ]

  • 트랜잭션이 보장된다.

  • 메시지를 생성하거나 저장할 필요가 없어서 상대적으로 애플리케이션이 단순해진다.

[ 단점 ]

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


🔖 참고자료

매일메일