다양한 소스의 데이터와 애플리케이션을 연결하는 데 사용할 수 있는 서버리스 이벤트 버스 서비스 (⇒ AWS의 Scheduler )
이벤트 수신, 필터링, 변환, 라우팅 및 전송에 대한 규칙을 적용하는데, 이 규칙은 이벤트 패턴이라고 하는 이벤트 구조 or 일정에 따라 이벤트를 대상에 일치시킨다.
예를 들어, EC2 인스턴스 생성 및 삭제에 대한 이벤트가 감지되면 이에 따른 특정 이벤트를 수행하게 할 수 있다.
EventBridge는 이벤트를 수신하고, 이벤트를 대상으로 라우팅하는 규칙을 적용한다
이때 수신한 모든 이벤트는 이벤트 버스와 연결된다.
→ 이벤트 버스 = 이벤트를 수신하는 파이프라인
이벤트 버스와 연결된 규칙에 따라, 도착한 이벤트가 규칙과 일치하는지 확인 및 평가한다.
스케줄러로 이용 가능한 것은 "규칙"과 "일정"이 있다. 둘은 사용 목적이 조금씩 다른데, 비교하자면 아래와 같다.
Amazon EventBridge 규칙 | Amazon EventBridge Scheduler | |
---|---|---|
cron 표현식 | UTC로 작성 | Asia/Seoul로 작성 |
이벤트 대상 | 이벤트 대상에 파라미터 전달 X | 이벤트 대상에 파라미터 전달 O |
여기서는 다른 AWS 서비스의 이벤트 또는 외부 애플리케이션의 이벤트 등을 감지하여 이벤트 버스로 들어온 모든 이벤트에 동일한 규칙을 적용하도록 설정할 수 있다.
→ 샘플 이벤트 항목들을 보면 AWS API Call via CloudTrail(SQS)
라는 탭이 있긴 하지만, 우리가 구현해야 할 부분은 SQS의 이벤트를 감지하는 것이 아닌, 애플리케이션에서의 이벤트 감지 시 SQS로 보내는 이벤트 작업을 수행하는 것이므로 여기서는 무관하다.
즉, EC2 인스턴스의 중지, 시작 등의 이벤트와 같이 SaaS 유형의 AWS 서비스와 연동하여 트리거하는 서비스라고 생각된다.
외부 서비스와의 연동을 위해서는 사용자 지정 json 형식으로 요청 API를 스프링부트 서버 내에서 호출하는 방식으로 이벤트 버스에 전송하는 것을 고려해볼 수도 있을 것 같다.
일정에서는 Spring Scheduler로 구현한 것과 같이 cron 표현식을 이용할 수 있다. 원하는 스케줄링 작업 시간대를 설정하고 일정을 생성하면 아래와 같이 대상 API를 선택할 수 있다.
이는 스케줄러 이벤트가 발생되었을 때, 발생 대상을 어디에 둘지를 세팅하는 것으로, 우리는 SQS 대기열에 메시지를 보내야 하므로 Amazon SQS의 SendMessage를 선택해준다.
이후 대기열로 보낼 메시지 형식을 작성하면 되는데, 우리는 Firebase로 바로 보내줄 것이므로 파이어베이스 메시지에 필요한 정보 (FCMRequestDto)대로 구성하여 메시지 형식을 지정해주면 된다.