2. TSyringe
External Store์ ๋ํ ๊ฐ์ ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๊ฐ์์ธ๋ฐ, ํ ๋ฒ๋ง ๋ด์๋ ์ดํด๊ฐ ์ ์๋๋ค. ์๊ณ ์์ง๋ง ๋ฏ์ ๊ฐ๋ ์ธ ์ฑ๊ธํค ๊ฐ์ ๊ฒ ๋๋ฌธ์ธ๋ฐ ๊ฐ๋ ์ ์ผ๋ก ํ๋์ ํด๋์ค์์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ์์ฑํ๋ค๋ ์๋ฏธ๋ ์๊ณ ์์์ง๋ง, ์ฝ๋์ ํจํด์ ์ง์ ์ ์ฉํ๋ '์ฅ ๋ญ์ง?' ๋ผ๋ ์๊ฐ์ด ๊ณ์ ๋ค์ด ์ด๋ฒ ํํธ๋ ์ฝ๋์ ๋ํ ์ดํด๋ฅผ ์๋ฒฝํ๊ฒ ํก์ํด์ผ๊ฒ ๋ค.
์ค๊ฐ์ Count ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฒ ํธ์ถํ๋ฉด์ ๋์ค์ ํธ์ถํ ์ปดํฌ๋ํธ์ count๋ง ์ฆ๊ฐํ๋ ๊ฒ์ ๋ฎ์ด์ด๋ค๊ณ ํํ์ ํ๋๋ฐ ๋ฌด์จ ๋ง์ด์ง? publish๋ฅผ ๊ฐ๋ก์ฑ์ ๋ง์ง๋ง ์ปดํฌ๋ํธ์ forceUpdate๋ง ๋ฑ๋ก๋๊ฑด๊ฐ?
new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ Store๋ฅผ ์ ์ญ์ผ๋ก ํ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ Singleton ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๋งํ๊ณ ์ถ์๋๊ฑด๊ฐ? ์์์ ํํ์ด ํท๊ฐ๋ฆฐ๋ค.
Keyword
TSyringe
์์กด์ฑ ์ฃผ์ (Dependency Injection)
reflect-metadata
sington (์ฑ๊ธํค)
1. TSyringe
Typescript์ฉ ์์กด์ฑ ์ฃผ์ ์ปจํ ์ดํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํด๋์ค, ํจ์ ๋ฑ์ ์์กด์ฑ์ ์ฃผ์ ํ ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํจ.
์ฝ๋์ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ, ํ ์คํธ ์ฉ์ด์ฑ์ ํฅ์์ํจ๋ค.
Counter ์ปดํฌ๋ํธ์์ container.resolve()๋ฅผ ํธ์ถํ๋ฉด Store ํด๋์ค์ ๋ฆฌํ๋ ์ ์ผ๋ก ์์ฑ์์ ๋ฉค๋ฒ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๋ฆฌํ๋ ์ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด reflect-metadata ๋ชจ๋์ ์ค์นํ ๊ฒ
2. ์์กด์ฑ ์ฃผ์
(Dependency Injection)
์์กด์ฑ ์ฃผ์ ์ ์ปดํฌ๋ํธ(React ์ปดํฌ๋ํธ ์๋, ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ์์๋ฅผ ์๋ฏธ) ๊ฐ์ ๊ฒฐํฉ์ ์ต์ํํ๊ณ ์ฝ๋๋ฅผ ๋ชจ๋ํํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ, ํ ์คํธ ์ฉ์ด์ฑ์ ํฅ์์ํจ๋ค.
ํด๋์ค, ํจ์ ๋ฑ์ ์์กด์ฑ ๊ด๋ฆฌ ๋ก์ง์ ์ธ๋ถ๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ ์ปดํฌ๋ํธ๋ ์์ ์ ์ญํ ์๋ง ์ง์คํ ์ ์๋ค.
์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํ๋ฉด ๋๊ฐ ์์กดํ๊ฒ ๋๋๊ฑด์ง ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ๋์ ๋๋ ๊ทน๋จ์ ์ธ ์์๋ก ์ดํดํ๋๋ฐ, ๋ง์ฝ์ ์ฃผ์ฌ๊ธฐ๋ก ๋์๊ฒ ์ฃผ์ ํ๋ฉด ์ค๋ ์ฑ์ผ๋ก ์ธํด ๋๋ ๋ง์ฝ์ ์์กดํ๋ค.
3. reflect-metadata
metadata๋ ๋ฐ์ดํฐ๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ ํด๋์ค, ํ๋กํผํฐ, ๋ฉ์๋ ๋ฑ์ ์์์ ์ถ๊ฐ์ ๋ณด๋ฅผ ์ ๊ณตํ๋๋ฐ ์ฌ์ฉํ๋ค.
reflect-metadata๋ Typescript์์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํ์ฉํ ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
Typescript๋ ์ปดํ์ผ ํ์์ ํ์ ์ ๋ณด๋ฅผ ํ์ฉํ ์ ์์ง๋ง, ๋ฐํ์์๋ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ด๋ ค์ reflect-metadata๋ฅผ ์ฌ์ฉํด ํ์ ์ ๋ณด๋ฅผ ๋ฐํ์์ ํ์ฉ ๊ฐ๋ฅํ๋ค.
์ฃผ๋ก ํด๋์ค๋ ํ๋กํผํฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ฝ์ด์ค๋๋ฐ ์ฌ์ฉํ๋ค.
container ์ฌ์ฉ์ ํญ์ reflect-metadata ๋ชจ๋์ import ํ๋๋ฐ ์ด๊ฒ์ด reflection์ ์ง์ํ๋ค.
์ฌ์ฉ ์์
๋ฐ์ฝ๋ ์ดํฐ(@)์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค.
ํด๋์ค์ ๋ฐ์ฝ๋ ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐ
๋ฉ์๋ ๋ฐ์ฝ๋ ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐ
4. sington (์ฑ๊ธํค)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ํ๋์ ํด๋์ค๋ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ์์ฑํ๋ ๋์์ธ ํจํด
์ธ์คํด์ค๊ฐ ์ค์ง ํ๋๋ง ์กด์ฌํ๋ฉฐ, ์ด๋์๋ ๋์ผํ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๊ณ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ์ญ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ์ค์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฑ์ ๊ณต์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ I/O ๋ฐ์ด๋ ์์ ์ ์ค๋ฒํค๋๊ฐ ํฐ ์์ ์ด๋ผ ์ฑํดํค ํจํด์ ํ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ์ปค๋ฅ์ ํ์ ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.
์ฌ์ฉ ์์
singleton ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด ํด๋์ค๋ฅผ ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์๋ค.
๋ฐ์ฝ๋ ์ดํฐ(@)
๋ฐ์ฝ๋ ์ดํฐ๋ ํด๋์ค, ๋ฉ์๋, ํ๋กํผํฐ ๋ฑ์ ์ ์ธ๋ถ์ ์ฌ์ฉํด ๋์์ ์์ ํ๊ฑฐ๋ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ ๊ณตํ๋ ๋ฌธ๋ฒ์ด๋ค. ์์ ์ฌ์ฉ์์ ์ฝ๋์์ Store ํด๋์ค
์ ์ฑ๊ธํค ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ธ์คํด์ค๊ฐ ๋จ ํ๋๋ง ์์ฑํ ์ ์๊ฒ๋๋ค.
Last updated