[Spring boot] Axon Framework ๋ง›๋ณด๊ธฐ

๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ํฌ์ŠคํŠธ๋ถ€ํ„ฐ Spring์„ ์ด์šฉํ•œ CQRS์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช‡ ํŒŒํŠธ๊ฐ€ ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ ์ค‘ ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

2021.03.21 - [Architecture/MSA] - [MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS

 

[MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS

์ด๋ฒคํŠธ ์†Œ์‹ฑ์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ 2017 SpringCamp์—์„œ์˜€์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” MSA๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€๋„ ๋ชปํ–ˆ๊ณ , MSA๋Š” ๋Œ€๊ธฐ์—…์—์„œ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์ ์šฉ๊ฐ€๋Šฅํ•œ ์—„์ฒญ๋‚˜๊ฒŒ ํฐ ์•„ํ‚คํ…์ฒ˜์˜€๋‹ค. ๋ผ๊ณ ๋งŒ ์ธ

blog.neonkid.xyz

CQRS์™€ ์ด๋ฒคํŠธ ์†Œ์‹ฑ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ œ๋Œ€๋กœ ์ดํ•ด๋˜์—ˆ์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๋Š”์ง€ ์ž˜ ๊ฐ์ด ์•ˆ์˜ค์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ € ๋˜ํ•œ ์ฒ˜์Œ CQRS์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ๋Š” ๊ทธ ๊ฐœ๋… ์กฐ์ฐจ๋„ ์ƒ์†Œํ–ˆ๊ณ , ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ธฐ์กด์˜ ํŠธ๋žœ์žญ์…˜์ด ์ •๋ง ๋งŒ์กฑ์Šค๋Ÿฌ์šด๋ฐ, ์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜์ด ์™œ ํ•„์š”ํ•œ์ง€๋„ ์ž˜ ๋ชฐ๋ž์—ˆ์Šต๋‹ˆ๋‹ค. 

 

ํ•˜์ง€๋งŒ ์„œ๋น„์Šค์˜ ๋ถ„๋ฆฌ, ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์— ๋Œ€ํ•ด ๊ทธ ํ•„์š”์„ฑ์„ ๋ผˆ์•„ํ”„๊ฒŒ ๋Š๋ผ๊ณ  ์ง€๊ธˆ ์ด ์ˆœ๊ฐ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜์„ ์˜์กดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠธ๋žœ์žญ์…˜๊นŒ์ง€ ๋งก๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๊ฐœ๋…์ด ํ•„์š”ํ•  ์ˆ˜ ๋ฐ–์— ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ๊ฐ€์žฅ ์ž์‹  ์žˆ๋Š” Spring Framework๋ฅผ ๊ณจ๋ผ์„œ CQRS๋ฅผ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž๋Š” ๋‹ค์ง์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

Axon Framework

Java, ํŠนํžˆ Spring ์ง„์˜์—์„œ๋Š” CQRS๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ทธ ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด ๋ฐ”๋กœ Axon Framework ์ž…๋‹ˆ๋‹ค. 

 

https://axoniq.io 

 

Axon, the open source Java platform supporting event sourcing, CQRS and DDD architecture through Axon Framework, Axon Server, GD

We use cookies to analyze our traffic, to optimize the site functionality and to make sure you get the best experience on our website. We do not place cookies to invade your privacy. By continuing to use this site you are giving us your consent to our cook

axoniq.io

Axon์€ ๋„ค๋œ๋ž€๋“œ์˜ AxonIQ์—์„œ ๊ฐœ๋ฐœํ•˜์—ฌ ์˜คํ”ˆ ์†Œ์Šค์™€ ์ƒ์šฉ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” CQRS ๊ตฌํ˜„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. CQRS๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ Axon์€ CQRS๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋„ ์‰ฝ๊ฒŒ ๊ทธ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ฝค ์žฅ์ ์œผ๋กœ ๊ผฝํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ Axon Framework, EventStore, Axon Server ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ CQRS๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

Architecture

 

์ถœ์ฒ˜; https://docs.axoniq.io/reference-guide/architecture-overview

๋งจ ์™ผ์ชฝ์— ์žˆ๋Š” UI(Front)์ด๊ฑฐ๋‚˜ API๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ Command๋ผ ์ •์˜ํ•˜๊ณ , ํ•ด๋‹น ๋ช…๋ น์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๋ช…๋ น์„ EventStore์— ์ €์žฅํ•˜๊ณ  Event Broker์— ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

 

์ด ๊ณผ์ •์€ CQRS์™€ ๋™์ผํ•˜๋ฉฐ Axon์ด CQRS๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. 

 

 

 

 

Axon Server ์„ค์น˜

Axon Server๋Š” CQRS์—์„œ EventStore์™€ Event Broker์˜ ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Axon Framework๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐ ์žˆ์–ด ํ•„์ˆ˜๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ์‚ฌํ•ญ์€ ์•„๋‹ˆ๋ฉฐ Axon Framework๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • Kafka
  • Spring Cloud
  • MongoDB
  • AMQP
  • Open Tracing

๋จผ์ € Axon Server๋ฅผ ์„ค์น˜ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

https://axoniq.io/download

 

Download - Axon

You can also download a ZIP file with Axon Server as a standalone JAR. This will also give you the Axon Server CLI and information on how to run and configure the server.

axoniq.io

์œ„์˜ ๋งํฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ ํ›„, ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ฑฐ๋‚˜ ์••์ถ• ํŒŒ์ผ ํ˜น์€ Docker ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ €๋Š” ์—ฌ๊ธฐ์„œ Docker Image๋กœ ์ง„ํ–‰ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ docker run -d --name axonserver -p 8024:8024 -p 8124:8124 axoniq/axonserver

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ Axon Server๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ 2๊ฐœ์˜ ํฌํŠธ๋ฅผ ์—ด๊ณ  axonserver๋ฅผ Docker ์œ„์— ๋„์›Œ์ค๋‹ˆ๋‹ค.

 

์œ„์˜ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค๋ฉด ์ž˜ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

docker ps ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ Axon Server๊ฐ€ ์ž˜ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋˜์—ˆ๋‹ค๋ฉด Axon Server์˜ ์„ค์น˜๋Š” ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ฐ ํฌํŠธ ์ฃผ์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋ƒ๋ฉด..

 

  • 8024: Dashboard (Web)
  • 8124: Message Routing

๋Œ€์‹œ๋ณด๋“œ์—์„œ Axon์œผ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์›น์œผ๋กœ ์‹œ๊ฐํ™”๋œ ํ˜•ํƒœ์˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

Axon ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋Š” ์„œ๋ฒ„์˜ ์ƒํƒœ์™€ Command, Query์˜ ์ƒํƒœ ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋งˆ์น˜๋ฉฐ..

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ Axon์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ดค์Šต๋‹ˆ๋‹ค. Axon ์„œ๋ฒ„๋Š” Spring ๊ธฐ๋ฐ˜์œผ๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ JVM ํŠœ๋‹์„ ํ†ตํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค์— ๋งž๊ฒŒ ํŠœ๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋‹๋ณด์˜€๋Š”๋ฐ์š”.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ง์ ‘ Spring ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ Axon์„ ์‚ฌ์šฉํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments