ํํ ํฌ์์๋ ์๋นํ ๋ฐฉ๋ํ ์์ ํ์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ํ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ป์ต๋๋ค. ๊ฐ ์์ค๋ ๋ด์ผ, ๋ชจ๋ , ๋ค์ ๋ฌ, ํฅํ XNUMX๋ ์ ๋ํ ํ์จ์ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ฒด ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๊ธ๋ฆฌ๋ฅผ ์์ธกํ ์ ์๋ค๋ฉด ๋ฐ๋ฅด๊ฒ, ์ด์ ์ฌ์ ์ ๋ซ๊ณ ์ด๋ฆฌ์๊ฒ ๋์ ์๋ค๋ก ๋ฐ๊ฟ ์๊ฐ์ด ๋ ๊ฒ์ ๋๋ค. ์ผ๋ถ ์์ค๋ ๋ ์ ๋ขฐํ ์ ์๊ณ ์ผ๋ถ ์์ค๋ ์์ ํ ์ฐ๋ ๊ธฐ๋ฅผ ์ ๊ณตํ๋ฉฐ ๊ฑฐ์ ์ ํํ ๊ฐ์ด ๋๋ฌผ๊ฒ ํฌํจ๋์ง๋ง ์ด๊ตญ์ ์ธ ์ปคํ์๊ฒ๋ ์ ํฉํฉ๋๋ค. ์ฐ๋ฆฌ์ ์๋ฌด๋ ์ด๋น ์๋ง ๊ฐ์ ๊ฐ์ ์ ๋ณํ์ฌ ๊ณ ๊ฐ์๊ฒ ์ ํํ ๋ฌด์์ ๋ณด์ฌ์ค์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค. ํ๋ผ๋ฐ๊ณ ๊ฐ ์ ์ฌ ์๊ฐ์ ํ๋ ๊ฒ์ฒ๋ผ ์ฐ๋ฆฌ๋ ์๋ง์ ํ๊ณผ ๋ฏธ์ฌ์์ ํ๋์ ์ ํํ ๊ฐ์ ๊ฑธ๋ฌ๋ด์ผ ํฉ๋๋ค.
ํ๋ผ๋ฐ๊ณ ์ ํน๋ณํ ํน์ง์ ์๋์ชฝ์ผ๋ก ๊ตฝ์ ๊ฑฐ๋ํ ๋ถ๋ฆฌ๋ก ๋ฌผ์ด๋ ์งํ์์ ๋จน์ด๋ฅผ ๊ฑธ๋ฌ๋ ๋๋ค.
-์ํค
๊ทธ๋ฆฌํ์ฌ ๋์๊ด์ด ํ์ํ๋ค Vela
์ธ ๊ฐ์ง ํตํ์์ ๋ํ ํ์จ์ ์์งํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ์ ์ Vela
ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
defmodule Pairs do
use Vela,
eurusd: [sorter: &Kernel.<=/2],
eurgbp: [limit: 3, errors: 1],
eurcad: [validator: Pairs]
@behaviour Vela.Validator
@impl Vela.Validator
def valid?(:eurcad, rate), do: rate > 0
end
๊ฐ ์ ๋ฐ์ดํธ
Vela.put/3
- ์์ธ์ด๋ฉ๋๋ค
validator
์ ์๋ ๊ฒฝ์ฐ ๊ฐ์ ๋ํด(์ฅ ์ฐธ์กฐ) ํ์ธ ์๋์); - ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฑ๊ณตํ๋ฉด ์ข์ ๊ฐ ํ์ ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์๋น์ค ํ์ ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
:__errors__
๊ทธ๋ ์ง ์์ผ๋ฉด; - ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ ๋ ฌ์ด ๋ฐ์ํฉ๋๋ค.
sorter
์ฃผ์ด์ง ํค์ ๋ํด ์ ์๋๊ฑฐ๋ ๋จ์ํ ๋ชฉ๋ก์ ๋จธ๋ฆฌ ๋ถ๋ถ์ ๊ฐ์ ๋ฃ์ต๋๋ค(LIFO, ์ฅ ์ฐธ์กฐ ์ ๋ ฌ ์๋์); - ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ํ์ ์๋ฆ
๋๋ค.
:limit
์ฐฝ์กฐ ์ ์ ๋ฌ๋จ; - ์
๋ฐ์ดํธ๋ ๊ตฌ์กฐ๋ฅผ ๋ฐํํฉ๋๋ค
Vela
.
iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#โ %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#โ %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#โ %Pairs{... eurusd: [1.0, 2.0]}
๋ํ Vela
๊ตฌํํ๋ค Access
Kernel
Kernel.get_in/2
Kernel.put_in/3
Kernel.update_in/3
Kernel.pop_in/2
Kernel.get_and_update_in/3
ํ์ธ
์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
- ์ธ์๊ฐ ํ๋์ธ ์ธ๋ถ ํจ์(
&MyMod.my_fun/1
), ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํ ๊ฐ๋ง ๋ฐ์ต๋๋ค. - ๋ ๊ฐ์ ์ธ์๊ฐ ์๋ ์ธ๋ถ ํจ์,
&MyMod.my_fun/2
, ๊ทธ ์ฌ๋์ ํ ์ผค๋ ์ด ๊ฑฐ์์serie, value
๊ฒ์ฆ์ ์ํด; - ๋ชจ๋ ๊ตฌํ
;Vela.Validator
- ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์
threshold
๋ฐ - ์ ํ์ ์ผ๋ก -compare_by
, ์ฅ ์ฐธ์กฐ ๋น๊ต ์๋์.
์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ฑ๊ณตํ๋ฉด ๊ฐ์ด ํด๋น ํค ์๋ ๋ชฉ๋ก์ ์ถ๊ฐ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํํ {serie, value}
๋ก ์ด๋ :__errors_
.
๋น๊ต
์ด ํ์ ์ ์ฅ๋ ๊ฐ์ ๋ฌด์์ด๋ ๋ ์ ์์ต๋๋ค. ๊ฐ๋ฅด์น๋ค Vela
๋น๊ตํ๋ ค๋ฉด ์ ์ก์ด ํ์ํฉ๋๋ค. compare_by
์๋ฆฌ์ฆ ์ ์์ ๋งค๊ฐ๋ณ์(๊ฐ์ ํ์ค๊ณผ ๋น๊ตํ ์ ์๋ ๊ฒฝ์ฐ ์ ์ธ) Kernel.</2
); ์ด ๋งค๊ฐ๋ณ์๋ ์ ํ์ด์ด์ผ ํฉ๋๋ค. (Vela.value() -> number())
. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฐ๋จํฉ๋๋ค & &1
.
๋ํ ํ ์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์๋ ์์ต๋๋ค. comparator
๋ธํ ๊ฐ์ ๊ณ์ฐํ๋ ค๋ฉด โโ(min
/max
); ์๋ฅผ ๋ค์ด ์ ์ก์ ํตํด Date.diff/2
๋น๊ต๊ธฐ๋ก ๋ ์ง์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ธํ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ํธ๋ฆฌํ ์์
๋ฐฉ๋ฒ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค. threshold
, ์ ๊ฐ์ ์ต๋ ํ์ฉ ๋น์จ์ ์ ์ํฉ๋๋ค. {min, max}
๊ฐ๊ฒฉ. ๋ฐฑ๋ถ์จ๋ก ์ง์ ๋๋ฏ๋ก ์ํ์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค. comparator
ํ์ง๋ง ์์ง๋ ์ฌ์ฉํ๊ณ ์์ด์ compare_by
. ์๋ฅผ ๋ค์ด, ๋ ์ง ์๊ฐ์ ๋ํ ์๊ณ๊ฐ์ ์ง์ ํ๋ ค๋ฉด ๋ค์์ ์ง์ ํด์ผ ํฉ๋๋ค. compare_by: &DateTime.to_unix/1
(์ ์ ๊ฐ์ ์ป๊ธฐ ์ํด) ๊ทธ๋ฆฌ๊ณ threshold: 1
, ์๋ก์ด ๊ฐ์ด ๋ค์์ ์๋ ๊ฒฝ์ฐ์๋ง ํ์ฉ๋ฉ๋๋ค. ยฑband
ํ์ฌ ๊ฐ์ ๊ฐ๊ฒฉ์
๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Vela.equal?/2
๋ ์บ์๋ฅผ ๋น๊ตํฉ๋๋ค. ๊ฐ์ด ํจ์๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ equal?/2
๋๋ compare/2
, ๊ทธ๋ฌ๋ฉด ์ด ํจ์๋ ๋น๊ต์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฆฌ์๊ฒ ์ฌ์ฉํฉ๋๋ค. ==/2
.
๊ฐ์น ์ป๊ธฐ
ํ์ฌ ์ํ ์ฒ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํธ์ถ๋ก ์์๋ฉ๋๋ค. Vela.purge/1
, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค(๋ง์ฝ validator
์ ๋ฌถ์ฌ timestamps
). ๊ทธ๋ฐ ๋ค์ ์ ํ๋ฅผ ๊ฑธ ์ ์์ต๋๋ค. Vela.slice/1
๋ฐํ๋ฉ๋๋ค keyword
ํ ์ด๋ฆ์ ํค๋ก ์ฌ์ฉํ๊ณ ์ฒซ ๋ฒ์งธ ์ค์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋น์ ์ ๋ํ ์ฌ์ฉํ ์ ์์ต๋๋ค get_in/2
/pop_in/2
๊ฐ ํ์ ๊ฐ์ ๋ํ ๋ฎ์ ์์ค์ ์ก์ธ์ค๋ฅผ ์ํด.
์ ์ฒญ
Vela
๋ค์๊ณผ ๊ฐ์ ํ๋ก์ธ์ค ์ํ์์ ์๊ณ์ด ์บ์๋ก ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. GenServer
/Agent
. ์ฐ๋ฆฌ๋ ์ค๋๋ ์ฝ์ค ๊ฐ์ ์ ๋ ์ฌ์ฉํ์ง ์๊ธฐ๋ฅผ ์ํ๋ฉฐ ์ด๋ฅผ ์ํด ๋จ์ํ ์ํ๊ฐ ์ฒ๋ฆฌ๋ ํ๋ก์ธ์ค๋ฅผ ์ ์งํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. Vela
, ์๋์ ํ์๋ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
do: Rate.age(rate) < @death_age
ะธ Vela.purge/1
๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค ๋ชจ๋ ์ค๋๋ ๊ฐ์ ์กฐ์ฉํ ์ ๊ฑฐํฉ๋๋ค. ์ค์ ๊ฐ์ ์ก์ธ์คํ๋ ค๋ฉด ๊ฐ๋จํ ํธ์ถํ๋ฉด ๋ฉ๋๋ค. Vela.slice/1
, ์ฝ์ค์ ์์ ๊ธฐ๋ก(์ ์ฒด ์๋ฆฌ์ฆ)์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒ์ฆ๋ ๊ฐ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฐํํฉ๋๋ค.
ํ๋ณตํ ์๊ณ์ด ์บ์ฑ!
์ถ์ฒ : habr.com