비동기 통신 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

비동기 통신

반대로, 비동기 통신에서는 클라이언트가 서비스에 요청을 보내지만 즉시 응답을 받지 않습니다. 이 경우 클라이언트는 일반적으로 요청이 수락되었음을 알리는 확인 응답만 받습니다.

비동기 통신의 장점은 다음과 같습니다.

  • 이벤트 기반 아키텍처 지원 – 이벤트 소싱과 CQRS(명령-쿼리 책임 분리) 패턴에 자연스럽게 적합합니다.

  • 리소스 관리 개선 – 서비스가 용량에 따라 요청을 처리할 수 있는 능력입니다.

  • 장애 격리 개선 – 서비스 간 결합이 느슨해져 연쇄적 장애를 방지할 수 있습니다.

  • 피크 로드 처리 – 메시지 대기열을 통해 트래픽 급증을 효과적으로 처리할 수 있습니다.

단점으로는 복잡성이 있습니다. 예제:

  • 클라이언트가 비동기 작업의 결과를 필요로 하는 경우, 결과를 가져오거나 수신하는 메커니즘을 구현하는 데 추가 노력이 필요합니다.

  • 비동기 작업 문제 해결은 여러 시스템의 로그를 검토해야 하므로 더 어렵습니다.

  • 비동기 작업 테스트는 여러 시스템과 서비스 간 조정이 필요하기 때문에 더 어렵습니다.

비동기 통신 접근 방식에는 파이어 앤 포겟(Fire and Forget), 클레임 체크(Claim Check), 콜백(Callback), 양방향 통신(Bidirectional Communication) 등이 있습니다.

파이어 앤 포겟(Fire and Forget)

파이어 앤 포겟 패턴에서는 클라이언트가 서버에 요청을 보내고, 서버가 메시지를 수신하고 처리할 것임을 나타내는 확인 응답을 동기적으로 받습니다. 그러나 실제 처리는 아직 이루어지지 않았으며, 클라이언트는 처리 시점이나 방식에 대해 알 수 없습니다. 다음 그림은 이 패턴을 보여줍니다. 다음 다이어그램은 이 패턴을 보여줍니다.

비동기 통신의 파이어 앤 포켓 패턴.

이 경우, 서비스는 객체가 안정적으로 저장될 때까지 확인 응답을 보내지 않아야 합니다. 이러한 지속성은 데이터베이스 쓰기 작업이나 대기열에 항목을 넣는 방식으로 구현할 수 있습니다.

추가 고려 사항:

  • 메시지 중복 처리를 위해 멱등성을 구현합니다. 즉, 각 메시지는 한 번만 처리해야 합니다.

  • 처리 실패를 대비하여 Dead Letter Queue를 고려합니다.

  • 메시지 처리 성공률을 모니터링합니다.

클레임 체크

클라이언트가 서비스 호출의 결과를 필요로 하는 경우, 서비스는 요청을 받을 때 클레임 체크를 발급하도록 구현할 수 있습니다. 다음 다이어그램은 이 패턴을 보여줍니다. 클레임 체크는 서비스가 확인 응답과 함께 반환하는 식별자로 구현됩니다. 클라이언트는 이 식별자를 사용하여 요청 상태를 확인하고, 요청이 완료되면 결과를 가져올 수 있습니다.

비동기 통신의 클레임 체크 패턴.

클라이언트는 결과를 확인하기 위한 폴링 메커니즘을 구현해야 합니다. 이는 자동화될 수 있으며(예: n분마다 확인), 다른 이벤트나 사용자 동작에 따라 수동으로 수행될 수도 있습니다. 클레임 체크 패턴을 구현하는 서비스는 클레임 체크의 유효 기간을 명확히 해야 합니다.

모범 사례:

  • 폴링 시 지수 백오프를 구현합니다.

  • 클레임 체크의 적절한 TTL(Time To Live)을 설정합니다.

  • 진행 상태를 추적할 수 있는 상태 엔드포인트를 제공합니다.

콜백

콜백 패턴에서는 클라이언트가 서비스에 요청을 보내고, 처리 완료 시 서비스가 연락할 위치를 제공합니다. 클라이언트는 결과를 기다리지 않으며, 처리는 계속 진행됩니다. 서비스는 처리가 완료되면 지정된 위치로 연락하여 결과를 전달할 책임이 있습니다. 일반적인 응답 위치는 REST API 또는 대기열이 될 수 있습니다. 이 다이어그램은 콜백 패턴을 보여줍니다.

비동기 통신의 콜백 패턴.

구현:

  • 실패한 콜백에 대해 재시도 메커니즘을 구현합니다.

  • 콜백 위치를 다른 서비스와 동일하게 보안 처리합니다.

  • 콜백 제한 시간을 처리합니다.

양방향 통신

양방향 통신을 구현하려면 클라이언트와 서비스 간 상태 저장 연결을 생성해야 하며, 이를 통해 클라이언트와 서비스 모두 메시지를 전송하고 처리할 수 있습니다. 다음 다이어그램에 이 내용이 잘 설명되어 있습니다. 비록 통신이 비동기식이지만, 서비스는 각 클라이언트에 대해 열린 연결을 지원할 수 있어야 합니다.

비동기 통신의 양방향 통신 패턴.

구현 고려 사항:

  • 메시지 정렬

    • 시퀀스 번호

    • 파티션 전략

    • 메시지 정렬

  • 상태 관리

    • 이벤트 소싱 패턴

    • 상태 조정

    • 정합성 모델

  • 오류 처리

  • 모니터링 및 관찰성

    • 상관관계 ID

    • 메시지 추적

    • 성능 지표

    • 시스템 상태 표시기