[Javascript] joi
์๋ฒ ๋ก์ง์ ์ง๋ , ๊ธฐํ ์ด๋ค ํจ์๋ฅผ ์ง๋ ๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ํ ๊ฒ์ฆ์ ํญ์ ๋นผ๋์ ์ ์๋ ๋ถ๋ถ์ด๋ค.
๋ง์ฝ ์ด๋ฆ๊ณผ ๋์ด๊ฐ์ ๋ฐ๋ foo๋ผ๋ ํจ์๊ฐ ์๋ค๊ณ ์น์.
๊ทธ๋ ๋ค๋ฉด foo ํจ์๋ ๋ค์ด์จ ์ด๋ฆ๊ฐ๊ณผ ๋์ด๊ฐ์ด ์ ํจํ์ง๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ฆํด์ผ ํ ๊ฒ์ด๋ค.
์ด๋ฆ์ ๋น์ฐํ ๋ฌธ์์ด์ด์ด์ผ ํ๊ณ , ๋์ด๋ ๋น์ฐํ ์ซ์์ฌ์ผ ํ๋ค.
๊ทธ๋ฐ ๋ก์ง ์ฒดํฌ๋ฅผ ์์ผ๋ก ํ๋ฉด ๋์ถฉ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.

์ผ๋จ ๋น์ฐํ ๋์์ ํ์ง๋ง, ๊น๋ํ ๋ฐฉ๋ฒ์ ์๋๋ค.

๊ฐ์ด ๋ง์ผ๋ฉด ๋ง์์๋ก ์ฝ๋๊ฐ ์กฐ์กํด์ง ๊ฒ์ด๊ณ , ์ข๋ ์ธ์ฌํ ๊ฒ์ฆ์ด ํ์ํ ์๋ก ์ฝ๋์ ๋ณต์ก๋๋ ํ๋์ ๋ซ์ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒ์ฆ๊ณผ์ ์ ์ข ์ฝ๊ฒ ํด์ฃผ๋ ๋ชจ๋ ์ค ํ๋๊ฐ joi๋ผ๋ ์น๊ตฌ๋ค. javascript object scehma์ ์ถ์ฝ์ผ๋ก,
๋ค๋ฅธ ๊ฒ๋ ์์ง๋ง ์ด๊ฒ ์ข ์ธ๊ธฐ๊ฐ ๋ง์ ํธ์ด๋ค.
์ค์นํ๊ณ ,

๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ฆ์ฉ ์คํค๋ง ๊ฐ์ ์์ฑํ๋ค.
๊ฒ์ฆํ ๊ฐ์ด ์์ ํํ๋ฅผ ๊ฐ์ถฐ์ผ๋ง ํจ์ ๋ช
์ํ๋ ๋ถ๋ถ์ด๋ค.
name๊ณผ age๋ผ๋ ํค๊ฐ์ ๊ฐ๋ ๊ฐ์ฒด์ด๋ฉฐ.
name์ ๋ฌธ์์ด์ด๋ฉฐ ํ์ํญ๋ชฉ์ด์ด์ผ ํ๊ณ ,
age๋ ์ ์์ด๋ฉฐ ์ต์๊ฐ์ด 0์ด์ด์ผ ํจ์ ์ง์ ํ๋ค.
๊ทธ๋ผ ์ด์ ์ ๊ธฐ์๋ค๊ฐ ๊ฒ์ฆํ ๊ฐ์ ์ง์ด๋ฃ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
validate ํจ์๋ ๊ฐ์ ๋ฐ์์ value์ error์์ ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๊ฒ์ฆ์ ์คํจํ๋ค๋ฉด error์ ๊ฐ์ด ๋ค์ด์์ ๊ฒ์ด๊ณ , ์ฑ๊ณตํ๋ค๋ฉด value์ ๊ฐ์ด ๋ค์ด์ฌ ๊ฒ์ด๋ค.

๊ทธ๋์ ์ ๋๋ก ๊ฐ์ ๋ฃ์ ๊ฒฝ์ฐ์๋

์ด๋ฐ ์์ผ๋ก ์ ๋์ํ ๊ฒ์ด๊ณ
์๋๋ผ๋ฉด ๋ญ๊ฐ ํ๋ ธ๋์ง ์ค๋ฅ๋ฉ์ธ์ง๋ฅผ ์น์ ํ๊ฒ ๋์ ธ์ค ๊ฒ์ด๋ค.


์ด์ธ์๋ ์ด๋ฉ์ผ ํ์ ๊ฒ์ฆ์ด๋ ๊ธฐํ ๋ฑ๋ฑ ํธ์๊ธฐ๋ฅ์ด ๋ง์๋ฐ,
๋ ์์ธํ ๊ฒ์ ์๋ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.
https://joi.dev/api/?v=17.4.0
์ฐธ์กฐ
https://www.npmjs.com/package/joi
https://joi.dev/api/?v=17.4.0
https://gumpcha.github.io/blog/joi-overview