Axon Framework란?
Axon Framework란 EventSourcing, CQRS, DDD 세가지 Concept을 중심으로 어플리케이션을 개발할 수 있게 도와주는 프레임워크이다.
따라서, Axon Framework를 사용하기 위해서는 Event Sourcing, CQRS, DDD 세가지의 개념을 숙지하는 것이 중요하다.
여기서는 Axon Framework가 주요 내용이므로, 이 세가지 개념은 정말 간단히 정리할 것이다.
위 그림을 보면 명령을 호출하고, DB에 저장한다.
DB에 저장을 하는 동시에 상태 변화 이벤트를 발행한다.
이벤트가 발행되면 한개 이상의 이벤트 핸들러가 이벤트를 처리한다.
Event Sourcing ?
이벤트 소싱이란 정말 간단히 말해, 상태 변경이 일어나는 이벤트를 그대로 모두 저장한다는 것이다.
이렇게 한번 일어난 이벤트는 변경될 일이 없기 때문에, 이러한 이벤트를 저장하는 저장소는 append 수행 능력이 중요하다.
CQRS ?
위 그림을 보면 이해하기 쉽다.
Client가 CUD(= Command)와 R(= Query)를 분리해서 요청하는 것을 볼 수 있다.
DDD ?
말그대로 도메인을 주도로 설계하는 방식인데, 간단히 말하기가 어렵기도 하고, 나조차도 제대로 이해한 개념이 아니기 때문에 계속해서 파악해보기로 한다.
Axon Server
Axon Framework가 Event Sourcing, CQRS, DDD를 중심으로 애플리케이션을 작성하게 도와주는 프레임워크라면, Axon Server는 그러한 프레임워크를 작동하게 하는 서버이다.
Axon Server는 메세지 라우팅, 이벤트 저장소 등의 역할을 수행한다.
Axon Framework + Axon Server 조합이 필수는 아니다.
Axon Server대신 Kafka + NoSQL 등을 사용할 수도 있다.
하지만, Axon Server는 Event Store에 특화되어있으므로, 다른 것으로 대체하기엔 무리가 있을 수 있다.
Event Store의 역할은 이벤트를 저장하는 것은 물론이고, 이벤트 전파, 스냅샷 저장등의 특성을 가져야 하기 때문이다.
Axon Server는 다음과 같은 특징이 있다.
- 높은 가용성
- 클러스터 모드를 지원함
- 핸들러가 먹통이 되었더라도 큐에 메세지를 저장
- 서비스간 통신은 gRPC 방식을 사용
Axon Server 띄우기
Axon 서버는 Axon 공식홈페이지(https://axoniq.io/)에서 다운받아 띄울 수도 있지만, docker hub에도 이미지가 등록되어 있기 때문에, docker만 설치되어있다면 아래와 같이 간단하게 실행이 가능하다.
$ docker run -d --name axonserver -p 8024:8024 -p 8124:8124 axoniq/axonserver
메세지 종류
Axon은 메세지에 종류가 있다. 또한 이러한 메세지는 명시적으로 Label을 가진다.
예를 들어, 애플리케이션의 자바클래스가 Label처럼 발행된다. 이러한 명시적 메세지는 약간의 오버헤드가 발생하지만, 장점이 더욱 많다.
또한, 메세지는 요구되는 의도에 따라 라우팅 패턴이 다르다.
Commands
- 액션을 취할 때(= Client가 명령을 내릴 때) 사용된다.
- 커맨드는 하나의 목적지로 라우팅되고, 응답을 제공할 수 있다.
- 커맨드는 동시성을 피하기 위해 항상 같은 애플리케이션 인스턴스로 전달한다.
Queries
- 액션이 된 정보가 필요할 때 사용된다.
- 전략에 따라 하나 이상의 목적지로 라우팅된다.
- Multiple 인스턴스로 구성했다면, 그 중 하나로만 쿼리가 전달된다.
Events
- 발생된 액션을 알릴 때 사용된다.
- 이벤트는 이벤트 저장소에 저장되고, 구독하고 있는 모든 목적지에 라우팅된다.
- 이벤트에 보통 비즈니스 결정사항을 담지 않는다.
이렇게 명시적으로 분리된 메세지 컴포넌트는 각자 역할에 관심이 없다.
이러한 관심사의 분리는 MSA에도 잘맞는 개념이다.
(Axon 에서는 MSA환경에도 물론 잘맞는다고 하지만, 모놀리스 환경에서도 유용하게 사용될 수 있다고 말한다.)
개념은 이정도에서 마치고, 다음글에서부턴 실제로 구현해보며 학습해보기로 한다.
※ 참조
'Knowledge' 카테고리의 다른 글
Axon Framework (Command와 Event 구현) (0) | 2021.08.01 |
---|