본문으로 건너뛰기

EDA(Event-Driven Architecture)

CloudEvents

KeyTypeRequiredDescriptionExample
specversionStringCloudEvents spec 버전1.0
typeString이벤트 타입으로 domain, subdomain, event, command, event_version 등으로 구성domain.subdomain.event.v2
sourceURI Reference이벤트 발생 위치https://<domain>/v2/<resource>
idString이벤트 ID로 UUID, Counter 등을 이용하여 정의2c04c116-19c2-4b59-857e-2f0396ad0e98
timeTimestamp이벤트 발생 시간2022-07-02T21:59:07.975Z
datacontenttypeRFC2046attribute/valueapplication/protobuf
datadatacontenttype이벤트 payload
dataschemaURIdata의 스키마로 호환되지 않는 경우 다른 URI로 표현해야 함
subjectString
정보

source + id 조합은 동일 type 내에서 고유해야합니다.

HTTP 매핑

POST /someresource HTTP/1.1
Host: wiki.loliot.net
Ce-Specversion: 1.0
Ce-Type: domain.subdomain.event.v2
Ce-Source: https://<domain>/v2/<resource>
Ce-Id: 2c04c116-19c2-4b59-857e-2f0396ad0e98
Ce-Time: 2022-07-02T21:59:07.975Z
Content-Type: application/json; charset=utf-8
{
...data
}
  • Ce-Datacontenttype 대신 Content-Type을 사용합니다
  • Ce-Data 대신 본문을 사용합니다

Events and Commands

Events and Commands는

  • JSON 포멧을 쓰기보다 가능하면 protobuf, avro 등을 쓰는 것이 좋습니다.
  • 단일 진실 공급원(Single Source of Truth)이 되야합니다.
  • 특수한 상황이 아니면 각각 Stream을 하나씩 갖는 것이 좋습니다.
  • 데이터를 나타낼 수 있는 가장 좁은 범위의 데이터 타입을 사용합니다.
  • 하나의 목적을 위한 최소한의 데이터로 구성하는 것이 좋습니다.
  • 세마포어나 시그널로 사용하지 않는 것이 좋습니다.

Reference

  • Adam Bellemare, Building Event-Driven Microservices: Leveraging Organizational Data at Scale(번역본)