1. 서론

 

Axon Server는 이벤트 저장소인 EventStore, 어플리케이션 간의 Message 전달하는 역할을 수행합니다.

하지만 AxonFramework를 도입하는데 있어 필수 사항은 아닙니다. AxonIQ에서는 EventStore와 Message Broker를 다른 제품군으로 대체할 수 있도록 지원합니다.

 

따라서 비즈니스 환경에 맞게 취사선택이 가능합니다.

 

AxonIQ에서 제공하는 외부 모듈은 다음과 같으며, 예제 혹은 소스 파일은 깃헙에서 확인하실 수 있습니다.

 

  • Kafka
  • JGroups
  • Spring Cloud
  • Kotlin
  • Mongo
  • AMQP
  • Tracing

저는 AxonFramework + AxonServer를 사용하여 포스팅을 진행하겠습니다.


2. AxonServer 설치

 

1. AxonIQ 홈페이지에 접속후에 Download 버튼을 클릭합니다.

 

 

2. 메일 주소 입력 후에 Download 버튼을 클릭합니다.

 

 

 

 

3. AxonQuickStart.zip 파일을 원하는 위치로 다운로드 후 압축을 풀어줍니다.

 

 

 

4. 압축푼 경로 기준으로 axonquickstart-4.2.2\AxonServer 위치로 이동합니다.

 

 

 

5. 아래 표시된 파일이 우리가 구동해야할 AxonServer 입니다. 생각보다 너무 간단하죠?

 

 

 

6. jar 파일 실행을 위해 도스창을 열도록 하겠습니다. [WINDOW + R] 키를 동시에 누른 후 cmd를 입력합니다. 그리고 확인 버튼을 눌러줍니다.

 

 

 

7. AxonServer 파일 위치로 이동하기 위해서 탐색기 상단의 주소를 복사합니다.

 

 

 

8. 도스창 cd 명령어를 이용하여 Axonserver 위치로 이동합니다.

 

 

9. jar 명령어를 사용하여 Axonserver를 구동합니다.

 

 

 

10. 아래와 같은 화면이 나온다면 정상적으로 실행된 것입니다.

 

참고사항(기본 설정 시, Default 포트 매핑)

 - 메시지 라우팅 : 8124

 - Dashboard : 8024

 

 

11. 정상 수행 확인을 위해 브라우저를 열고, 대시보드 페이지로 접속합니다.

 


3. 마치며

 

AxonFramework를 사용하기 위한 기초 단계 작업을 마쳤습니다.

다음 포스팅부터는 에제 프로젝트 실습을 통해 하나하나씩 개념을 익혀보도록 하겠습니다.

 


Tip)

AxonServer 위치에 axonserver.properties 파일 생성하게 되면 default로 제공되는 속성을 변경할 수 있습니다.

변경 가능한 속성은 Axon 공식 문서를 참고하시기 바랍니다.

 

 

참고로 저는 Event 테스트 후 데이터 삭제를 위해 axoniq.axonserver.devmode.enabled=true 설정하여 사용하고 있습니다.

 

 

개발 모드 적용 후 AxonServer를 기동하게되면, 위 화면과 같이 Development Mode가 활성화되며 Reset Event Store 버튼이 생긴 것을 확인할 수 있습니다.

1. 개요

 

앞으로 진행될 포스팅은 MSA에 관심 많은 분을 대상으로 DDD, CQRS 및 Event Sourcing 내용을 알고 있다고 가정하고, Spring 환경에서 AxonFramework를 활용해 개념 구현하는 방법에 대해 소개하고자 합니다. 

 

만약 CQRS와 Event Sourcing에 대해서 궁금하다면 아래 블로그 및 Spring Camp 2017 영상을 참고하시면 좋을것 같습니다.

 

CQRS 소개

CQRS 

 

이벤트 소싱 소개

- 이벤트 소싱(이론부) 영상

- 이벤트 소싱(구현부) 영상

- 이벤트 소싱 소개 블로그

 

 

EventSourcing, CQRS 관련하여 Java 진영에서 사용되는 프레임워크를 검색한 결과, 크게 AxonFramework랑 Eventuate 두 가지를 주로 사용되고 있었습니다.

 

저는 그 중 대중적이고 Spring Boot에 친화적인(?) AxonFramework를 선정하여 공부한 흔적을 남겨보고자 합니다. 포스팅 중간 AxonIQ 기술 블로그 및 웨비나 자료 첨부는 원저작자에게 사용허가를 받았음을 알립니다.


2. Axon Framework 소개

 

출처 : https://youtu.be/GEN0jRkyEtU

 

Axon Framework는 2010년 최초 프로젝트가 시작되었으며, 2015년 이전까지는 관심도가 미비하였지만 이후 MSA가 열풍을 불게되면서 다운로드 수가 폭발적으로 증가하였습니다. 지금은 대략 월간 10만건 정도의 다운로드 수를 기록하고 있으며, 앞으로 점점 더 증가할 것으로 기대하고 있습니다.

 

해당 제품은 오픈소스로써 네덜란드에서 설립된 AxonIQ 회사에서 개발을 주도하고 있습니다. 주력 제품으로는 DDD, EventSourcing, CQRS를 구현할 수 있는 AxonFramework와 EventStore, 마이크로 서비스간 메시지 Routing을 담당하는 Axon Server 입니다.

(※ Axon Server는 Enterprise 버전이 별도로 있으며, 구매시 Cluster 구성 및 Security 설정 등이 가능합니다.)

 

출처 : https://axoniq.io/

 

프레임워크의 아키텍처는 대략 아래와 같습니다.

 

출처 : https://docs.axoniq.io/reference-guide/architecture-overview

 

 

기본적으로 CQRS 구조를 따르고 있습니다. 즉 외부로부터 명령(Command)이 들어오면, 해당 명령에 대한 이력을 EventStore에 저장하고 동시에 Event를 발생시킵니다.

 

발생된 이벤트는 EventHandler를 통하여 Read Model에 반영되고, 사용자 입장에서는 Read Model에 대한 Query를 통하여 데이터를 읽는 구조입니다.

(※ 사용자 편의에 따라 Command와 Query Model은 동일 DBMS에 설정할 수도 분리할 수도 있으며, 종류 또한 다르게 구성할 수 있습니다.)

 

 

 

앞으로 IntelliJ IDE를 사용해서 Spring Boot 기반 AxonFramework을 활용하여 EventSourcing, CQRS, Saga 등을 구현하는 방법에 대해서 포스팅을 진행하려고 합니다.

 

AxonFramework가 DDD(Domain Driven Development), EDD(Event Driven Development)에 기반하고 있으나 샘플코드를 간략하게 작성하기 위해서 DDD스러움은 배제하고(개발 실력, 도메인 지식 부족으로 인한 getter 남용 등....) Axon 제공 기능에 집중하여 소개하도록 하겠습니다.


향후 다룰 주제

  • AxonServer 기본 사용법
  • Gradle을 활용한 Multi Project 설정
  • AxonFramework 프로젝트 기본 설정
  • AxonFramework 데모 프로젝트 구현(계좌 입출금)
  • 기본 아키텍처 소개(Command, Query, Event)
  • Replay
  • Event Tracking Architecture
  • EventStore
  • Version
  • Saga

+ Recent posts