Web
수정·

[Spring CQRS] Axon을 이용한 CQRS 시작 - 1

by Dohoon Kim · 23년 06월 26일 09:00:00

본 테스트 환경은 M2 Macbook Air를 이용하였습니다.

우선 아래 docker-compose 코드를 이용하여

Postgres와 Axon Server를 실행시킵니다

version: "3.0"

services:
  postgres-command:
    image: postgres:latest
    environment:
    - POSTGRES_DB=commands
    - POSTGRES_PASSWORD=admin
    - POSTGRES_USER=admin
    - PG_DATA=/var/lib/postgresql/data
    volumes:
    - "$HOME/.volumes/pg_commands:/var/lib/postgresql/data"
    ports:
    - "35432:5432"

  axon:
    image: axoniq/axonserver:4.5.7-dev-arm
    ports:
    - "8024:8024"
    - "8124:8124"

그리고 spring boot project의 application.yaml 을 다음과 같이 설정합니다.

spring:
  application:
    name: blog-cqrs-command
  datasource:
    platform: postgres
    url: jdbc:postgresql://localhost:35432/commands
    username: admin
    password: admin
    driverClassName: org.postgresql.Driver
  jpa:
#    database: POSTGRESQL
#    properties:
#      hibernate:
#        dialect: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: update
    show-sql: true

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

다음과 같이 설정 한 뒤 CommandApplication.kt 파일에서 아래와 같이 설정합니다.


package kr.dohoonkim.blog.command

import org.axonframework.commandhandling.CommandHandler
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class CommandApplication

fun main(args : Array<String>) {
    runApplication<CommandApplication>(*args)
}

@CommandHandler
fun CommandApplication.test(command : Unit) {
    print("command handler")
}

이 코드를 실행시켰을 때 정상 동작할 경우 아래와 같이 로그가 뜹니다.

2023-06-26T20:49:42.258+09:00  INFO 48378 --- [           main] i.a.a.c.impl.AxonServerManagedChannel    : Requesting connection details from localhost:8124
2023-06-26T20:49:42.525+09:00  INFO 48378 --- [           main] i.a.a.c.impl.AxonServerManagedChannel    : Successfully connected to localhost:8124
2023-06-26T20:49:42.529+09:00  INFO 48378 --- [           main] i.a.a.connector.impl.ControlChannelImpl  : Connected instruction stream for context 'default'. Sending client identification

이후 브라우저에서 http://localhost:8024/ 로 연결하여 axon server 대시보드에 연결한 뒤, overview 를 클릭하면 아래와 같은 그림이 뜬다면, 정상적으로 연결된 상태입니다. imageURL