Blazor with Akka.net

์†Œ๊ฐœ:
๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌํˆดํ‚ท์ธ akka.net ์˜ ์•กํ„ฐ๋ชจ๋ธ์„ Blazor๋ฅผ ํ†ตํ•ด ์‹œ๊ฐํ™”ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ Blazor์— ์†์ด ๋” ๊ฐ€๊ฒŒ๋˜๋„ค์š”~

๋‹ค์Œ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ž์„ธํ•œ๊ฒƒ์€ ์†Œ์Šค๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰๋ฐ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • Actor - ์•กํ„ฐ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  • Router - ๋ฉ”์‹œ์ง€ ๋ถ„๋ฐฐ๋ฅผ์œ„ํ•œ ๋ถ„๋ฐฐ์ฒ˜๋ฆฌ๊ธฐ ์ด์šฉ
  • Throttle - ๋ฉ”์‹œ์ง€์˜ ํ๋ฆ„(์†๋„)๋ฅผ ์ œ์–ดํ•˜๋Š” ์žฅ์น˜๋ฅผ ์ด์šฉ
  • RemoteActor - ์›๊ฒฉ์ง€ ๋‹ท๋„ท์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š”๋ฐฉ๋ฒ•
  • UnitTest - ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ์œ ๋‹›๊ฒ€์‚ฌํ• ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด๊ณผ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฐฉ๋ฒ•

git : GitHub - psmon/NetCoreLabs: ๋‹ท๋„ท์ฝ”์–ด ์—ฐ๊ตฌ์†Œ

19๊ฐœ์˜ ์ข‹์•„์š”

์™€โ€ฆ ์ด๊ฑด ๋˜ ๋ญ์ฃ โ€ฆ
๋Œ€๋‹จํ•˜์‹œ๋„ค์š”~! :+1:

5๊ฐœ์˜ ์ข‹์•„์š”

์™€ github ๋‚ด์šฉ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋Œ€๋‹จํ•˜์‹œ๋„ค์š”

4๊ฐœ์˜ ์ข‹์•„์š”

๋ฐ๋ชจ์•ฑ ์ž„์‹œ๊ธฐ๊ฐ„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค

http://code.webnori.com/actor/roundrobin

7๊ฐœ์˜ ์ข‹์•„์š”

์šฐ์™€ ๋Œ€๋‹จ ํ•œ๋ฐ์š”โ€ฆ
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ์ž˜ ๋˜๋Š”์ง€ ๊ถ๊ธˆ ํ•˜๋„ค์š”

6๊ฐœ์˜ ์ข‹์•„์š”

@ํ”ผ์Šค๋ชฌ ์ข‹์€ ํ”„๋กœ์ ํŠธ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :smile:

๋ณ„ ๋ˆ„๋ฅด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

์Šค๋ ˆ๋“œ ๋ชจ๋ธ์ด๋ฉด 1๊ฐœ์˜ ์ž‘์—…์ž๋‹น 1MB์˜ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ
์•กํ„ฐ ๋ชจ๋ธ์ธ๊ฒฝ์šฐ ์ˆ˜์‹ญ๋งŒ๊ฐœ์˜ ์•กํ„ฐ๊ฐ€ 1GB ํž™๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ๋ผ๊ณ  ์†Œ๊ฐœ๋ฅผ ํ•˜๊ณ  ์žˆ๋„ค์š”~

๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ๋Ÿ‰ 2GB๊ฐ€ ๋„˜์œผ๋ฉด ํ…Œ์ŠคํŠธ์•ฑ ์ข…๋ฃŒ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

๊ถ๊ธˆํ•œ๊ฒƒ์ด ๋ช‡๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.
akka๋ฅผ ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜์‹ ๋‹ค๋ฉด ๋ถ„๋ช…ํžˆ APM ํˆด๋„ ์šด์šฉํ•˜์‹ค๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ์šด์šฉํ•˜์‹œ๋‚˜์š”?
์ €๋Š” actor model ์„ ์‹ค๋ฌด์— ์ ์šฉํ•ด๋ณธ์ ์€ ์—†๋Š”๋ฐ
CI/CD ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ํ•˜์‹ ๋‹ค๋ฉด ? ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”??

๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๊ถ๊ธˆํ•œ๊ฒƒ์ด ํ•ด๋‹น ์•„ํ‚คํ…์ณ๋ฅผ ํŒ€์›๋“ค์ด ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋”ฐ๋ž๋‚˜์š”??
๊ทธ๋Ÿฌ์‹œ๋‹ค๋ฉด ๋งจํŒŒ์›Œ๊ฐ€ ์—„์ฒญ๋‚˜์‹œ๋„ค์š”

3๊ฐœ์˜ ์ข‹์•„์š”

์‹ฌ๋„์žˆ๋Š” ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ์œ„ํ•ด ์กฐ๊ธˆ ์ง€๋ฃจํ•˜์ง€๋งŒ ๊ธด ์ปจํ…์ŠคํŠธ๋กœ ๋‹ต๋ณ€๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•กํ„ฐ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์œˆ๋„์šฐ ํผํฌ๋จผ์Šค/์• ์ ธ/ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค/๋ฐ์ดํ„ฐ๋…๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์—ฐ๋™๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋งŒ JVM/CLR(๋‹ท๋„ท) APM์ˆ˜์ค€๊นŒ์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋‹น์—ฐ Object์˜ ์ƒ์„ฑ ๋นˆ๋„์™€ GC๋ฐœ์ƒ๋นˆ๋„์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šด์˜์ค‘ ์ด ์ˆ˜์ค€๊นŒ์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€์ง„ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง์ด๋ผ๋„ ์ œ๋Œ€๋กœ ํ•œํ›„ ๋„์ž…ํ• ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๊ธฐ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์•กํ„ฐ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์€ APM์ˆ˜์ค€๋ณด๋‹ค ๋” ๋””ํ…Œ์ผํ•˜๋ฉฐ ๋‹ค์Œ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋„์ž…ํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.
( ๋” ๊ณ ๋„ํ™”๋œ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์œ ๋ฃŒํ™”์ž…๋‹ˆ๋‹ค. -์•กํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•จ)

์ฐธ๊ณ ๋งํฌ : Real time performance counters - WebFrameWork - WEBNORI

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ์ƒํƒœ์—†๋Š” rest api ๊ฒฝ์šฐ ๋ธ”๋ฃจ๊ทธ๋ฆฐ ๋ฐฐํฌ์ „๋žต์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ๋‹จ 1๊ฑด์ด๋ผ๋„ ์œ ์‹ค์—…์—†๋Š” ๋ฐฐํฌ๊ฐ€ ์ค‘์š”ํ•˜๋ฉฐ

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ ์šฐ์•„ํ•œ ์ข…๋ฃŒ(์ž๋™ ์ข…๋ฃŒ) ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋˜์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์„ค๊ณ„๋œ ์ข…๋ฃŒ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋งํฌ :

์•กํ„ฐ๋ชจ๋ธ์€ ๋””์ž์ธ ํŒจํ„ด์ค‘ ์•กํ‹ฐ๋ธŒ์˜ค๋ธŒ์ ํŠธ ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋ฉฐ ํ•ด๋‹น ํŒจํ„ด์„ ํ•ญ์ƒ ์ ์šฉํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ผ๋ฐ˜์ ์ธ ์›น์„œ๋น„์Šค์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ 1๊ฐœ์˜ ๊ณต์œ  ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ  N๊ฐœ์˜ ์Šค๋ ˆ๊ฐœ๋ฐœ์„ ํ•˜๋ ค๊ณ  ํ• ๋•Œ ์•กํ„ฐ๋ชจ๋ธ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์•กํ„ฐ๋ชจ๋ธ์€ ์ˆ˜์ค€๋†’์€ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๋•Œ ํ›จ์”ฌ ๋” ์–ด๋ ค์šฐ๋ฉฐ ์˜คํžˆ๋ ค ์•กํ„ฐ๋ชจ๋ธ์€ ์ด๊ฒƒ๊ณผ ๋น„๊ตํ•ด ๋‹จ์ˆœํ™”๋œ ๋ชจ๋ธ์ด๋ผ๊ณ  ์ด์•ผ๊ธฐ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ์€ ํŒ€์›์—๊ฒŒ akka๋ฅผ ์ „๋ฉด ์ฑ„ํƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์—๋Œ€ํ•ด์„œ ์ผ๋ถ€ ๋กœ์ปฌ ์•กํ„ฐ๋ชจ๋ธ๋กœ์˜ ์ „ํ™˜์„ ๊ถŒ์žฅํ•˜๋ฉฐ

๋‹ค๋งŒ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ์— ๊ด€์‹ฌ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ํ•œ๋‹ค๊ณ ํ•˜๋ฉด akka์˜ ์ฑ„ํƒ์ด์•„๋‹Œ ๊ธฐ๋ณธํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š”๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ์ด์šฉํ•ด ๋„๋ฉ”์ธ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์•ˆ๋˜๋ฉด ๋‹ค๋ฅธ๊ฒƒ์„ ์ด์šฉํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ท๋„ท์„ํฌํ•จํ•ด ๋ณต์žก์„ฑ์„ ๋‹ค๋ฃจ๋Š” ๋น„๋™๊ธฐ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ด๋ฏธ ๋ฐœ์ „ํ–ˆ๊ธฐ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋งˆ์นจ ์ž‘์„ฑ์ค‘์ธ ์•„ํ‹ฐ์ปฌ์ด ์žˆ์–ด ํ•จ๊ป˜ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

akka์˜ ์ตœ์ข…๋ชฉํ‘œ์ธ ๋‹จ์ผ์ง€์  ๋ณ‘๋ชฉ ์—†๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ๋ฐœ์ด๋ผ๋Š” ๊ณ ๊ธ‰ ์ฃผ์ œ๋Š” ๋ชจ๋‘ ์ ์šฉํ•˜์ง€ ๋ชปํ–ˆ์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘๊ฐœ๋ฐœํ•ด์•ผํ•˜๋Š” ๋‚œ์ œ๋Š” kafka๋ฅผ ํ™œ์šฉํ•จ์œผ๋กœ ๋‚ฎ์ถ”์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ akka๋ฅผ ํ•™์Šตํ•ด์•ผํ•˜๋Š” ์ด์œ  (๋„์ž…์ด ์•„๋‹Œ)

6๊ฐœ์˜ ์ข‹์•„์š”

๋Œ€๋‹จํ•˜์‹œ๋„ค์š” ์†”์งํžˆ ๊ณ ๊ฐ์ด ์šฐ๋ฆฌ ์‹œ์Šคํ…œ ์ž˜ ๋Œ์•„๊ฐ€๋‚˜์š”? ๋„ค ์ž˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค ใ…Ž
๊ตฌ๋‘๋กœ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ
image
์ž˜๋Œ์•„๊ฐ„๋‹ค ๋ณด์—ฌ์ฃผ๋ฉด ์ข‹๊ณ 
๋กœ๊ทธ๋Š”
image
ํ‚ค๋ฐ”๋‚˜๋กœ ์ถ”์  ํ•˜๊ณ  ์ด๋Ÿฌ๋ฉด ์ข‹์•„ํ•˜๊ธด ํ•˜์ฃ 

์•„๋งˆ ์˜ˆ์ œ๋กœ ๋งŒ๋“œ์‹ ๊ฒƒ๋„ ์‹ค์‹œ๊ฐ„ ํŒŒ์•…์„ ์œ„ํ•ด visual ์ ์œผ๋กœ ๋ณด๊ธฐ์œ„ํ•ด์„œ ๋งŒ๋“œ์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ €๋Š” ์•„์ง CQRS ํŒจํ„ด ์ˆ˜์ค€์—์„œ ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š”๋ฐ ์ €๋Ÿฐ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ํ•˜๊ณ  ์‹ถ๋„ค์š”

6๊ฐœ์˜ ์ข‹์•„์š”