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