기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
비동기 통신
반대로, 비동기 통신에서는 클라이언트가 서비스에 요청을 보내지만 즉시 응답을 받지 않습니다. 이 경우 클라이언트는 일반적으로 요청이 수락되었음을 알리는 확인 응답만 받습니다.
비동기 통신의 장점은 다음과 같습니다.
-
이벤트 기반 아키텍처 지원 – 이벤트 소싱과 CQRS(명령-쿼리 책임 분리) 패턴에 자연스럽게 적합합니다.
-
리소스 관리 개선 – 서비스가 용량에 따라 요청을 처리할 수 있는 능력입니다.
-
장애 격리 개선 – 서비스 간 결합이 느슨해져 연쇄적 장애를 방지할 수 있습니다.
-
피크 로드 처리 – 메시지 대기열을 통해 트래픽 급증을 효과적으로 처리할 수 있습니다.
단점으로는 복잡성이 있습니다. 예제:
-
클라이언트가 비동기 작업의 결과를 필요로 하는 경우, 결과를 가져오거나 수신하는 메커니즘을 구현하는 데 추가 노력이 필요합니다.
-
비동기 작업 문제 해결은 여러 시스템의 로그를 검토해야 하므로 더 어렵습니다.
-
비동기 작업 테스트는 여러 시스템과 서비스 간 조정이 필요하기 때문에 더 어렵습니다.
비동기 통신 접근 방식에는 파이어 앤 포겟(Fire and Forget), 클레임 체크(Claim Check), 콜백(Callback), 양방향 통신(Bidirectional Communication) 등이 있습니다.
파이어 앤 포겟(Fire and Forget)
파이어 앤 포겟 패턴에서는 클라이언트가 서버에 요청을 보내고, 서버가 메시지를 수신하고 처리할 것임을 나타내는 확인 응답을 동기적으로 받습니다. 그러나 실제 처리는 아직 이루어지지 않았으며, 클라이언트는 처리 시점이나 방식에 대해 알 수 없습니다. 다음 그림은 이 패턴을 보여줍니다. 다음 다이어그램은 이 패턴을 보여줍니다.
이 경우, 서비스는 객체가 안정적으로 저장될 때까지 확인 응답을 보내지 않아야 합니다. 이러한 지속성은 데이터베이스 쓰기 작업이나 대기열에 항목을 넣는 방식으로 구현할 수 있습니다.
추가 고려 사항:
-
메시지 중복 처리를 위해 멱등성을 구현합니다. 즉, 각 메시지는 한 번만 처리해야 합니다.
-
처리 실패를 대비하여 Dead Letter Queue
를 고려합니다. -
메시지 처리 성공률을 모니터링합니다.
클레임 체크
클라이언트가 서비스 호출의 결과를 필요로 하는 경우, 서비스는 요청을 받을 때 클레임 체크를 발급하도록 구현할 수 있습니다. 다음 다이어그램은 이 패턴을 보여줍니다. 클레임 체크는 서비스가 확인 응답과 함께 반환하는 식별자로 구현됩니다. 클라이언트는 이 식별자를 사용하여 요청 상태를 확인하고, 요청이 완료되면 결과를 가져올 수 있습니다.
클라이언트는 결과를 확인하기 위한 폴링 메커니즘을 구현해야 합니다. 이는 자동화될 수 있으며(예: n분마다 확인), 다른 이벤트나 사용자 동작에 따라 수동으로 수행될 수도 있습니다. 클레임 체크 패턴을 구현하는 서비스는 클레임 체크의 유효 기간을 명확히 해야 합니다.
모범 사례:
-
폴링 시 지수 백오프를 구현합니다.
-
클레임 체크의 적절한 TTL(Time To Live)을 설정합니다.
-
진행 상태를 추적할 수 있는 상태 엔드포인트를 제공합니다.
콜백
콜백 패턴에서는 클라이언트가 서비스에 요청을 보내고, 처리 완료 시 서비스가 연락할 위치를 제공합니다. 클라이언트는 결과를 기다리지 않으며, 처리는 계속 진행됩니다. 서비스는 처리가 완료되면 지정된 위치로 연락하여 결과를 전달할 책임이 있습니다. 일반적인 응답 위치는 REST API 또는 대기열이 될 수 있습니다. 이 다이어그램은 콜백 패턴을 보여줍니다.
구현:
-
실패한 콜백에 대해 재시도 메커니즘을 구현합니다.
-
콜백 위치를 다른 서비스와 동일하게 보안 처리합니다.
-
콜백 제한 시간을 처리합니다.
양방향 통신
양방향 통신을 구현하려면 클라이언트와 서비스 간 상태 저장 연결을 생성해야 하며, 이를 통해 클라이언트와 서비스 모두 메시지를 전송하고 처리할 수 있습니다. 다음 다이어그램에 이 내용이 잘 설명되어 있습니다. 비록 통신이 비동기식이지만, 서비스는 각 클라이언트에 대해 열린 연결을 지원할 수 있어야 합니다.
구현 고려 사항:
-
메시지 정렬
-
시퀀스 번호
-
파티션 전략
-
메시지 정렬
-
-
상태 관리
-
이벤트 소싱 패턴
-
상태 조정
-
정합성 모델
-
-
오류 처리
-
재시도 정책
-
대체 전략
-
모니터링 및 관찰성
-
상관관계 ID
-
메시지 추적
-
성능 지표
-
시스템 상태 표시기
-