DI(์ข ์์ฑ ์ฃผ์ )๋ ๊ตฌ์ฑ ์์์ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ, ํ ์คํธ ๊ฐ๋ฅ์ฑ ๋ฐ ๋ชจ๋์ฑ์ ํฅ์์ํค๋ ํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ ๋ฐ ๋์์ธ ํจํด์ ํน์ง์ ๋๋ค. ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ๋งฅ๋ฝ์์ ์ข ์์ฑ์ ์๋๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ์ํํธ์จ์ด ๊ตฌ์ฑ ์์ ๋๋ ๋ชจ๋์ด ๋ค๋ฅธ ์ฝ๋ ์กฐ๊ฐ์ ์์กดํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ข ์์ฑ ์ฃผ์ ์ ๊ตฌ์ฑ ์์๊ฐ ์์ฒด์ ์ผ๋ก ์ข ์์ฑ์ ์์ฑํ๊ฑฐ๋ ๊ฒ์ํ๋๋ก ํ๋ ๊ฒ์ด ์๋๋ผ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์์ ์ข ์์ฑ์ ์ ๊ณตํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ข ์์ฑ ๊ด๋ฆฌ ์ฑ ์์ DI ์ปจํ ์ด๋ ๋๋ ์ข ์์ฑ ์ฃผ์ ํ๋ ์์ํฌ๋ก ์๋ ค์ง ์ธ๋ถ ์ํฐํฐ์ ์์ํ๋ IoC(Inversion of Control) ํจํด์ ํต์ฌ ์์น์ ์ค์ํฉ๋๋ค.
์ด ์ธ๋ถ ์ํฐํฐ๋ ๋ณธ์ง์ ์ผ๋ก ์ํํธ์จ์ด ๊ตฌ์ฑ ์์์ ํด๋น ์ข ์์ฑ ๊ฐ์ ์ค๊ฐ์ ์ญํ ์ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ข ์์ฑ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ถ์ํํ๋ฉด์ ๊ตฌ์ฑ ์์์ ํต์ฌ ๊ธฐ๋ฅ์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ข ์์ฑ ์ฃผ์ ์ ์ฌ์ฉ์ ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํฐ ๋ถ์ฐํ ๋ง์ดํฌ๋ก์๋น์ค ์ํ๊ณ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ํคํ ์ฒ ๋ฐ ๋์์ธ ํจํด์ ๊ฐ์ถ ๊ด๋ฒ์ํ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก ์ ์ฆ๋์์ต๋๋ค.
์ข ์์ฑ ์ฃผ์ ์ ๋ํ์ ์ธ ์๋ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ, ๋น์ฆ๋์ค ํ๋ก์ธ์ค ๋ฐ API๋ฅผ ์๊ฐ์ ์ผ๋ก ๋์์ธํ์ฌ ์ ๊ตํ ๋ฐฑ์๋, ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ AppMasterno-code ํ๋ซํผ์ ๋๋ค. AppMaster ํ๋ซํผ์ ์ข ์์ฑ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์์ฑ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ๊ตฌ์ฑ ์์ ๊ฐ์ ์ํธ ์ข ์์ฑ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ๋ฐ์ดํธ๋ ์ฒญ์ฌ์ง๊ณผ ์ค๊ณ ์ฌ์์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์๋ถํฐ ์ง์์ ์ผ๋ก ๋ค์ ์์ฑํ์ฌ ๊ฐ๋ฐ ๋ฆฌ๋ ํ์์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ฅผ ๊ฐ์ํํ๋ฉฐ ์ ๋ฐ์ ์ธ ํจ์จ์ฑ์ ๋์ด๊ณ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์์กด์ฑ ์ฃผ์ ์ ์์ฑ์ ์ฃผ์ , ์ค์ ์ ์ฃผ์ , ์ธํฐํ์ด์ค ์ฃผ์ ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ์ ์์ต๋๋ค. ๊ฐ ์ ๊ทผ ๋ฐฉ์์๋ ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ง๋ง ๊ณตํต ๋ถ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ๋ค๋ ๋ชฉํ์ ๋๋ค. ์ด๋ฌํ ๊น๋ํ ๋ถ๋ฆฌ๋ ๋ณต์กํ ์ํํธ์จ์ด ์์คํ ์์ ์ฌ์ฌ์ฉ์ฑ, ๋ชจ๋์ฑ ๋ฐ ํ ์คํธ ์ฉ์ด์ฑ์ ์ด์งํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์์ฑ์ ์ฃผ์ ์๋ ์ข ์ ํด๋์ค์ ์์ฑ์๋ฅผ ํตํด ์ข ์์ฑ์ ์ ๋ฌํ์ฌ ๊ฐ์ฒด ์ธ์คํด์คํ ํ๋ก์ธ์ค ์ค์ ์ข ์์ฑ์ด ์ฃผ์ ๋๋๋ก ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๊ฐ์ฒด๊ฐ ์๋ํ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์์ํ๊ธฐ ์ ์ ํญ์ ํ์ํ ์ข ์์ฑ์ ํ๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ ํจ๋ฌ๋ค์๊ณผ ๊ฐ๋ ฅํ ์ ํ ์ง์ ์์คํ ์ ํตํด ๊ฐ๋ฐ์๊ฐ ์ข ์์ฑ ์ธ์คํด์คํ ๋ฐ ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ ์ดํ ์ ์๋ Java, C#, Kotlin๊ณผ ๊ฐ์ ์ธ์ด์์ ํนํ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ฉด์ Setter ์ฃผ์ ์๋ Setter ๋ฉ์๋๋ ์์ฑ์ ํตํด ์ข ์์ฑ์ ์ฃผ์ ํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์ธ์คํด์คํ ํ์๋ ์ข ์์ฑ์ ์์ ํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ฒด์ ์ ์ฐ์ฑ๊ณผ ์ ์์ฑ์ด ํฅ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ๋์ ์ ์ฌ์ ์ธ ๋ถ์์ฉ์ด๋ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ํ์ ์ ์คํ๊ฒ ๊ด๋ฆฌ๋๊ณ ์ํ๋์ด์ผ ํฉ๋๋ค. Setter ์ฃผ์ ์ ๋ฐํ์ ์ค์ ๊ตฌ์ฑ ์์๋ฅผ ์ ํ์ ์ผ๋ก ํ์ฅํ๊ฑฐ๋ ์์ ํ ์ ์๋ ํ๋ ์์ํฌ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋๊ท๋ชจ ์์คํ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
์ธํฐํ์ด์ค ์ฃผ์ ์ ๋ ์ผ๋ฐ์ ์ด์ง๋ง ๋ณ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ข ์์ฑ์ ์ฃผ์ ํ ๋ค์ ์ข ์ ํด๋์ค์ ์ํด ๊ตฌํ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ข ์ ํด๋์ค์ ํด๋น ์ข ์์ฑ ๊ฐ์ ์๊ฒฉํ ๊ณ์ฝ ์ค์ ์ ์ฉ์ดํ๊ฒ ํ๋ฉฐ ๊ฐ์ฒด ์ข ์์ฑ์ ๋ณด๋ค ๋ช ์์ ์ผ๋ก ํํํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฆ๊ฐ๋ ๋ณต์ก์ฑ๊ณผ ์ฅํฉํจ์ ์ผ๋ถ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋จ์ ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
Spring(Java), .NET Core(C#), Angular(TypeScript) ๋ฑ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ง์ ์ํํธ์จ์ด ํ๋ ์์ํฌ์๋ ์ข ์์ฑ ์ฃผ์ ์ง์์ด ๋ด์ฅ๋์ด ์์ด ๊ฐ๋ฐ์๊ฐ DI๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ๋ ์ข ์์ฑ์ ์ธ์คํด์คํ, ๊ด๋ฆฌ ๋ฐ ์ญ์ ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ DI ์ปจํ ์ด๋ ๋๋ ์ข ์์ฑ ์ฃผ์ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ ์ฒด ์ข ์์ฑ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ๊ฒฐํฉ ๋ฐ ์ฝ๋ ์ค๋ณต ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค.
์์ฝํ๋ฉด, ์ข ์์ฑ ์ฃผ์ ์ ๊ตฌ์ฑ ์์์ ๋ถ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ๊ณผ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ํฅ์์ํค๋ฉฐ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ๋ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ๊ฐ๋ ฅํ ์ํคํ ์ฒ ๋ฐ ๋์์ธ ํจํด์ ๋๋ค. ๋ฌธ์ ์ ๋ช ํํ ๋ถ๋ฆฌ๋ฅผ ์ด์งํจ์ผ๋ก์จ ์ข ์์ฑ ์ฃผ์ ์ ์ข ์์ฑ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ๋จ์ํํ๊ณ ์ต์ ์ ์ํํธ์จ์ด ์ ์ฐ์ฑ๊ณผ ์ ์์ฑ์ ๋ณด์ฅํจ์ผ๋ก์จ ๊ฐ๋ฐ์์๊ฒ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. AppMaster ํ๋ซํผ์ ๋น ๋ฅด๊ฒ ์งํํ๋ ์ํํธ์จ์ด ํ๊ฒฝ์์ ์ด์๋๋ ๋น์ฆ๋์ค ๋ฐ ๊ธฐ์ ์ ํ์์ ์ธ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ต์ํํ๋ฉด์ ์๋ฒฝํ๊ฒ ๊ธฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํจ์ผ๋ก์จ ์ข ์์ฑ ์ฃผ์ ์ ํจ์จ์ฑ์ ๋ณด์ฌ์ค๋๋ค.