๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ErgoFramework 2.2 ์ถœ์‹œ

ErgoFramework 2.2์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜์–ด ์™„์ „ํ•œ Erlang ๋„คํŠธ์›Œํฌ ์Šคํƒ๊ณผ OTP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Go ์–ธ์–ด๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ธฐ์„ฑ ๋ฒ”์šฉ ๋””์ž์ธ ํŒจํ„ด์ธ gen.Application, gen.Supervisor ๋ฐ gen.Server์™€ ํŠน์ˆ˜ ํŒจํ„ด(gen. Stage(๋ถ„์‚ฐ pub/sub), gen. Saga(๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜, SAGA ๋””์ž์ธ ํŒจํ„ด ๊ตฌํ˜„) ๋ฐ gen.Raft(Raft ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„).

๋˜ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Erlang/OTP ๋ฐ Elixir์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ข…๋‹จ ๊ฐ„ ์•”ํ˜ธํ™”๊ฐ€ ํฌํ•จ๋œ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Go ์–ธ์–ด์—๋Š” Erlang ํ”„๋กœ์„ธ์Šค์™€ ์ง์ ‘์ ์ธ ์œ ์‚ฌ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ ˆ์ž„์›Œํฌ๋Š” "๋ณต๊ตฌ" ๋ž˜ํผ๊ฐ€ ์žˆ๋Š” gen.Server์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

ErgoFramework์˜ ๋„คํŠธ์›Œํฌ ์Šคํƒ์€ Erlang ํ”„๋กœํ† ์ฝœ์˜ DIST ์‚ฌ์–‘์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ErgoFramework๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Erlang ๋˜๋Š” Elixir ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(Erlang ๋…ธ๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ ์˜ˆ). gen.Stage ๋””์ž์ธ ํŒจํ„ด์€ Elixir GenStage ์‚ฌ์–‘์— ๋”ฐ๋ผ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋œ๋‹ค๋Š” ์ ๋„ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๊ตฌํ˜„ ์˜ˆ).

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • ์ƒˆ ํ…œํ”Œ๋ฆฟ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • gen.Web์€ ์›น API ๊ฒŒ์ดํŠธ์›จ์ด(ํ”„๋ŸฐํŠธ์—”๋“œ์šฉ ๋ฐฑ์—”๋“œ๋ผ๊ณ ๋„ ํ•จ) ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์˜ˆ.
    • gen.TCP๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ ์ž‘์„ฑ ๋…ธ๋ ฅ์œผ๋กœ TCP ์—ฐ๊ฒฐ ์ˆ˜๋ฝ์ž ํ’€์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์˜ˆ.
    • gen.UDP - gen.TCP ํ…œํ”Œ๋ฆฟ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ UDP ํ”„๋กœํ† ์ฝœ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์˜ˆ.
  • ๋…ธ๋“œ ๋‚ด๋ถ€์— ๊ฐ„๋‹จํ•œ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ ๊ธฐ๋Šฅ์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์ด๋ฒคํŠธ(pub/sub)๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ.
  • ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ณธ Golang ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์ž๋™ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ˜• ๋“ฑ๋ก์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์‹ ๋œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ๋” ์ด์ƒ etf.TermIntoStruct๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ์œ ํ˜•์€ ์ž๋™์œผ๋กœ ์ง€์ •๋œ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฏ€๋กœ ๋ถ„์‚ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€