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 ํ”Œ๋žซํผ์€ ๋น ๋ฅด๊ฒŒ ์ง„ํ™”ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์—์„œ ์šด์˜๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ ๊ธฐ์—…์— ํ•„์ˆ˜์ ์ธ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ์™„๋ฒฝํ•˜๊ฒŒ ๊ธฐ๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์ข…์†์„ฑ ์ฃผ์ž…์˜ ํšจ์œจ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.