1. 서론

이번 시간에는 지난 포스팅에 이어서 AxonFramework 구성AxonServer 연동에 대해 다루도록 하겠습니다. 진행하기 앞서 몇가지 사전 작업이 필요합니다.

 


2. AxonFramework 설정

 

1. Command 모듈 build.gradle 파일을 엽니다. 이후 아래와 같이 의존성을 추가합니다.

 

 

추가된 의존성 중 AxonFramework와 직접 연관된 항목은 다음과 같습니다.

ext{
    axonVersion = "4.2.1"
}

dependencies{
    implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
    implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
}

2. lombok 사용을 위해 Annotation Processing을 활성화 합니다.

(File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors)

 


3. 환경설정을 위해 resources 폴더 밑에 application.yml 파일을 생성합니다. 이후 다음과 같이 작성합니다.

 

 

server:
  port: 8080

spring:
  application:
    name: eventsourcing-cqrs-command
  datasource:
    platform: postgres
    url: jdbc:postgresql://localhost:5432/command
    username: command
    password: command
    driverClassName: org.postgresql.Driver
  jpa:
    hibernate:
      ddl-auto: update

axon:
  serializer:
    general: xstream
  axonserver:
    servers: localhost:8124


4. Axon Server 연동 테스트를 위해 CommandApplication 클래스에 CommandHandler 메소드를 추가합니다.

(※ 연동 테스트 이후 해당 메소드는 삭제합니다.)

 


5. Command 모듈을 실행시킵니다. App이 정상적으로 실행되고, AxonServerCommandBus가 할당된 것을 확인합니다.

 


6. Axon Server 대시보드(http://localhost:8024) Overview 화면에서 Command App과 연결된 토폴로지를 확인합니다.

 

 


7. Query 모듈 설정을 위해 build.gradle 파일을 엽니다. 이후 Command 모듈 build.gradle과 동일하게 의존성을 추가합니다.

(※ 만약 Read Model을 MongoDB로 사용할 경우 Mongo DB 관련 의존성을 추가합니다.)

 


8. Query 모듈 resources 폴더 밑에 application.yml 파일을 생성합니다. 이후 다음과 같이 작성합니다.

(※ Command 모듈과 조금씩 다른 부분에 주의합니다.)

 

 

server:
  port: 9090

spring:
  application:
    name: eventsourcing-cqrs-query
  datasource:
    platform: postgres
    url: jdbc:postgresql://localhost:5432/query
    username: query
    password: query
    driverClassName: org.postgresql.Driver
  jpa:
    hibernate:
      ddl-auto: update

axon:
  serializer:
    general: xstream
  axonserver:
    servers: localhost:8124

9. Axon Server 연동 테스트를 위해 QueryApplication 클래스에 EventHandler 메소드를 추가합니다.

(※ Command와 마찬가지로 연동 테스트 이후 해당 메소드는 삭제합니다.)

 


10. Query 모듈을 실행합니다. App이 정상적으로 실행되고, AxonServer 연결과 이벤트 추적을 위한 TrackingEventProcessor가 할당된 것을 확인합니다.

 


11. Axon Server 대시보드(http://localhost:8024) Overview 화면에서 기존에 연결된 Command App과 새로 연결된 Query App 토폴로지를 확인합니다.

 

 


12. 테스트를 위해 Command, Query 모듈에 작성한 핸들러 메소드를 삭제합니다.


3. 마치며

이번 포스팅을 통해서 AxonFramework의 기본 설정 및 Axon Server와의 연동을 살펴보았습니다. 하지만 중간에 등장한 CommandHandler, EventHandler, CommandBus, TrackingEventProcessor 등의 용어는 아직 생소합니다. 다음 포스팅부터는 본격적으로 Command, Query 프로그램 작성하면서 위 개념등을 살펴보겠습니다.

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 버튼이 생긴 것을 확인할 수 있습니다.

+ Recent posts