이벤트 기반 애플리케이션
AWS에서 애플리케이션 개발하기
Ricardo Sueiras
Principal Technologist
이벤트란 무엇인가요?
- 메시지는 구성 요소 간에 전달되는 작업 단위입니다.
- 이벤트는 이미 발생한 일을 기록합니다.
- 서비스는 이벤트를 발행해 소통합니다.
- 다른 서비스는 해당 이벤트에 독립적으로 반응합니다.
- 디커플링은 의존성을 줄이고 확장성을 높입니다.
이벤트 생산자
- 생산자는 작업이 발생하면 이벤트를 생성하고 발행합니다.
- AWS 서비스와 커스텀 애플리케이션 모두 이벤트를 생성할 수 있습니다.
- Amazon S3에 파일을 업로드하는 것이 한 예입니다.
- 그러면 Amazon S3가 객체 생성 이벤트를 발생시킵니다.
이벤트 소비자
- 소비자는 이벤트를 비동기적으로 수신하고 처리합니다.
- 이벤트 소스마다 전달 방식이 다릅니다.
- 푸시 기반: 이벤트가 즉시 전달됩니다.
- 폴링 기반: 소비자가 폴링할 때 이벤트를 가져옵니다.
이벤트 소스 매핑
- AWS Lambda는 대표적인 이벤트 소비자입니다.
- 소스를 폴링해 레코드 배치를 자동으로 가져옵니다.
Lambda 이벤트 소스 매핑 튜닝
- 이벤트 소스 매핑을 조정해 처리량을 높이세요.
- 배치 크기를 조정해 호출당 레코드 수를 제어하세요.
- 실패한 레코드에 대한 재시도 제어를 설정하세요.
- 지원되는 소스에서는 부분 배치 응답을 사용하세요.
ReportBatchItemFailures는 성공한 레코드의 재처리를 방지합니다.
Amazon EventBridge
- EventBridge는 서비스와 애플리케이션 간에 이벤트를 라우팅합니다.
- 서비스를 강하게 결합하지 않고도 동적 라우팅을 가능하게 합니다.
- 애플리케이션은 자신의 이벤트를 EventBridge에 발행합니다.
- 라우팅 규칙이 각 이벤트를 받을 대상을 결정합니다.
EventBridge 기능
- EventBridge는 다양한 라우팅 기능을 제공합니다.
- 규칙은 하나의 이벤트를 여러 대상으로 분산시킵니다.
- 예약 규칙을 사용하면 크론 서버가 필요 없습니다.
- 스케줄은
rate(), at(), cron() 표현식을 지원합니다.
- Pipes는 지점 간 통합을 제공합니다.
- Pipes는 필터링과 변환도 지원합니다.
이벤트 버스
- 서로 다른 이벤트 버스는 이벤트 라우팅 방식을 최적화합니다.
- 기본 버스는 AWS 서비스로부터 이벤트를 받습니다.
- 커스텀 버스는 애플리케이션별 이벤트를 전달합니다.
- 파트너 버스는 타사 제공업체로부터 이벤트를 받습니다.
- 규칙은 각 버스와 대상 사이에 위치합니다.
스키마 검색
- 생산자와 소비자는 흔히 독립적으로 발전합니다.
- 이벤트 구조를 이해하는 것이 중요합니다.
- 스키마 검색은 수신되는 이벤트의 구조를 파악합니다.
- 이벤트 페이로드를 확인할 때 사용하세요.
- 통합을 검증할 때 사용하세요.
- 지원되는 언어의 바인딩을 생성할 때 사용하세요.
스키마 레지스트리
- 스키마 레지스트리는 이벤트 스키마를 저장합니다.
- 개발자가 이벤트 구조를 이해하고 바인딩을 생성하도록 돕습니다.
이벤트 필터링
- 필터링은 불필요한 처리를 줄여줍니다.
- JSON 이벤트 패턴으로 일치 조건을 정의하세요.
- 패턴은 원하는 특정 이벤트만 일치시킵니다.
- 그러면 다운스트림 시스템은 관련 이벤트만 처리합니다.
이벤트 순서
- 이벤트 순서는 항상 보장되지는 않습니다.
- 일부 서비스는 이벤트를 순서와 다르게 처리할 수 있습니다.
- 순서 제어 기능을 사용해 순서를 명시적으로 강제하세요.
이벤트 아카이빙과 재생
- EventBridge는 이벤트를 아카이빙했다가 나중에 재생할 수 있습니다.
- 장애에서 복구하기 위해 이벤트를 재생하세요.
- 새 소비자를 테스트하기 위해 이벤트를 재생하세요.
- 다운스트림 시스템을 재구축하기 위해 이벤트를 재생하세요.
오류 처리
- 이벤트 기반 앱은 오류를 안전하게 처리해야 합니다.
- 실패에는 중복 이벤트가 포함됩니다.
- 가능한 한 소비자를 멱등성 있게 설계하세요.
DLQ와 Destinations
- DLQ를 사용해 반복적으로 실패하는 이벤트를 격리하세요.
- EventBridge에서 DLQ는 함수별이 아닌 규칙 대상별로 설정됩니다.
- Lambda Destinations는 이 라우팅을 확장합니다.
- Destinations는 성공과 실패 결과를 모두 라우팅합니다.
이벤트 테스트 및 검증
- 이벤트 기반 앱 테스트는 라우팅을 검증합니다.
- 이벤트 필터링도 검증합니다.
- 이벤트 재시도도 검증합니다.
- 분산 시스템 전반의 처리를 확인합니다.
- AWS SAM을 사용해 샘플 테스트 이벤트를 생성하세요.
- 샘플 이벤트는 정확한 JSON 출력을 그대로 재현합니다.
무엇을 테스트할까요
- SAM을 사용하면 배포 전에 로컬에서 테스트할 수 있습니다.
- 이벤트 패턴 일치를 검증하세요.
- 재시도 동작을 검증하세요.
- 스로틀링 시나리오를 검증하세요.
- 중복 이벤트 전달을 검증하세요.
- 멱등성 소비자 동작을 검증하세요.
연습해 봅시다!
AWS에서 애플리케이션 개발하기
Preparing Video For Download...