๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋งฅ๋ฝ์์ DI(์ข ์์ฑ ์ฃผ์ )๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ๊ตฌ์ฑ ์์์ ๊ฐ์ฒด ๊ฐ์ ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์ ๋ํ๋ ๋๋ค. DI์ ์ฃผ์ ๋ชฉ์ ์ ๊ตฌ์ฑ ์์ ๋ถ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ์ด์งํ๊ณ ํ๋ ์ฝ๋ฉ๋ ์ข ์์ฑ์ ์ต์ํํ์ฌ ๊ตฌ์ฑ ์์ ๊ฐ์ ํจ์จ์ ์ธ ํต์ ์ ์ด์งํ๋ ๊ฒ์ ๋๋ค. ๋ณต์กํ ์ข ์์ฑ ์น์ ์ค์์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๊ฐ๋ ฅํ๊ณ ์ฝ๊ฒ ํ ์คํธ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ป์ ์ ์์ด ์์คํ ์ค๊ณ๊ฐ ์ต์ ํ๋๊ณ ์ํํธ์จ์ด ํ์ง์ด ํฅ์๋ฉ๋๋ค.
์ข ์์ฑ ์ฃผ์ ์ ๊ฐ์ฒด ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌํ์ฌ ๊ตฌ์ฑ ์์๊ฐ ์ง์ ๊ตฌ์ฑํ๋ ๋์ ์๋ํ๋ ๋ฐ ํ์ํ ์ข ์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์์ฒญํ ์ ์๋๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ด๋ฅผ ํตํด DI๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ข ์์ฑ์ ์์ ํ์ง ์๊ณ ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋์์ ์ ์ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ํฉ๋๋ค.
๋ฐฑ์๋ ๊ฐ๋ฐ์์ ์ข ์์ฑ ์ฃผ์ ํจํด์ ์ข ์์ฑ ์์ฑ ๋ฐ ๊ด๋ฆฌ ์ฑ ์์ ๊ตฌ์ฑ ์์ ์์ฒด์์ ์ค์ ์ปจํ ์ด๋ ๋๋ ์๋น์ค๋ก ์ ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ๋ ํฐ IoC(์ ์ด ๋ฐ์ ) ์์น์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. IoC๋ ๋ ์ฌ์ด ์ฝ๋ ๋ฆฌํฉํ ๋ง, ํฅ์๋ ์ฌ์ฌ์ฉ์ฑ, ์ ์ ์๋ ๋ฌธ์ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ์ฌ ๊ฐ๋ฐ์์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ๋์, ํ์ฅ์ฑ ๋ฐ ์์ ์ฑ์ ๋ํ ํฅ์๋ ์์ค์ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฐฑ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ข ์์ฑ ์ฃผ์ ์๋ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ์คํ์ผ, ์ฆ ์์ฑ์ ์ฃผ์ , ์ค์ ์ ์ฃผ์ ๋ฐ ์ธํฐํ์ด์ค ์ฃผ์ ์ด ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ฅ์ ์ด ์์ผ๋ฉฐ ํน์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
์์ฑ์ ์ฃผ์ ์๋ ํ์ ์ข ์์ฑ์ ๊ตฌ์ฑ ์์์ ์์ฑ์์ ์ฃผ์ ํ๋ ์์ ์ด ํฌํจ๋๋ฉฐ, ์ฌ๊ธฐ์ ํด๋น ์ข ์์ฑ์ ๊ฐ์ฒด ์๋ช ์ ๋ฐ์ ๊ฑธ์ณ ์ด๊ธฐํ๋๊ณ ์ฌ์ฉ๋ฉ๋๋ค. ์์ฑ์ ์ฃผ์ ์ ํ์ ์ข ์์ฑ ์ ์ฉ์ ํ์ฉํ์ฌ ๋ชจ๋ ํ์ ๊ตฌ์ฑ ์์๊ฐ ์กด์ฌํ๊ณ ํ์ฉ๋๊ธฐ ์ ์ ์ ์ ํ๊ฒ ์ด๊ธฐํ๋๋๋ก ๋ณด์ฅํ๋ฏ๋ก ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๋ํ ์ด ๋ฐฉ๋ฒ์ ์ข ์์ฑ์ ๋ถ๊ณผ๋๋ ๋ถ๋ณ์ฑ์ผ๋ก ์ธํด ๋ ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด ์ฝ๋๊ฐ ๋ฒ๊ทธ์ ๋ ์ทจ์ฝํ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค.
์์ฑ ์ฃผ์ ์ด๋ผ๊ณ ๋ ํ๋ Setter ์ฃผ์ ์ ๊ตฌ์ฑ ์์์ ์ ์ฉ setter ๋ฉ์๋(๋์ฐ๋ณ์ด์)๋ฅผ ํตํด ์ข ์์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ ์๋ฐํฉ๋๋ค. ์ด ๊ธฐ์ ์ ์ ํ์ ์ข ์์ฑ์ ํ์ฉํ๋ฏ๋ก ์์คํ ์ค๊ณ์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ข ์์ฑ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ ํน์ฑ์ผ๋ก ์ธํด ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ณ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
์ธํฐํ์ด์ค ์ฃผ์ ์ ์ข ์์ฑ์ ์ฃผ์ ํ๊ธฐ ์ํด ํน์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ด ํ์ํ๋ฉฐ, ์ฌ๊ธฐ์ ๊ตฌ์ฑ ์์๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๊ฑฐ๋ ๊ตฌํํ์ฌ ํ์ํ ์ข ์์ฑ์ ๋ช ์์ ์ผ๋ก ์๊ตฌํฉ๋๋ค. ์ธํฐํ์ด์ค ์ฃผ์ ์ ๋์ ์์ค์ ์ฌ์ฉ์ ์ ์ ๋ฐ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํ์ง๋ง ์ฝ๋์ ๋ณต์ก์ฑ๊ณผ ์ฅํฉํจ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
Spring, Laravel, Django์ ๊ฐ์ ์ต์ ๋ฐฑ์๋ ํ๋ ์์ํฌ๋ ์ข ์์ฑ ์ฃผ์ ๊ฐ๋ ์ ์์ ํ ์์ฉํ๊ณ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ์๋ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ํฌ๊ฒ ๋จ์ํํ๊ณ ๊ฐ๋ฐ์๊ฐ DI์ ์ด์ ์ ์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ ์ด ์ญ์ (Inversion of Control) ์ปจํ ์ด๋๊ฐ ๋ด์ฅ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฐฑ์๋, ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ๊ณ ๊ธ no-code ๋๊ตฌ์ธ AppMaster ํ๋ซํผ์ ๋ชจ๋์์ผ๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์์ฑ ์ฃผ์ ์์น์ ์ํํ๊ฒ ํตํฉํฉ๋๋ค. ๋ชจ๋์ฑ, ๋์จํ ๊ฒฐํฉ, ํฅ์๋ ์ ์ง ๊ด๋ฆฌ์ฑ๊ณผ ๊ฐ์ DI์ ๊ฐ๋ ฅํ ์ฅ์ ์ ํ์ฉํจ์ผ๋ก์จ AppMaster ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์์ด ๋ณํํ๋ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ํ์ฅํ๊ณ ์ ์ํ ์ ์์ต๋๋ค. ์์ ์ ์ธ ์์ค ์ฝ๋ ์์ฑ๊ณผ ๊ฒฐํฉ๋ ํ๋ซํผ์ด ์ ๊ณตํ๋ ์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํฐํ๋ผ์ด์ฆ๊ธ, ํ์ฅ ๊ฐ๋ฅํ ๋ชจ๋์ ์ํํธ์จ์ด ์๋ฃจ์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ๊ฐ๋ฐ์์ ๊ธฐ์ ๋ชจ๋์๊ฒ ์ง์ ์ผ๋ก ํ์ํ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ข ์์ฑ ์ฃผ์ ์ ๋ฐฑ์๋ ๊ฐ๋ฐ ์์ญ์ ๊ธฐ๋ณธ ๋์์ธ ํจํด์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ์ ์ฐํ๊ณ ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํด์ค๋๋ค. AppMaster ์ข ์์ฑ ์ฃผ์ ๊ธฐ์ ์ ๋ฅ์ํ๊ฒ ์ฌ์ฉํ์ฌ ํ์ฅ ๊ฐ๋ฅํ ๊ณ ํ์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ๋ณด์ฅํจ์ผ๋ก์จ ์ค์๊ธฐ์ ๊ณผ ๊ธฐ์ ๋ชจ๋์๊ฒ ํจ์จ์ ์ด๊ณ ๋น์ฉ ํจ์จ์ ์ด๋ฉฐ ์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.