5 min read

[Spring ๊ณต๋ถ€] Spring ํ•ต์‹ฌ ์›๋ฆฌ - 2

Table of Contents

Spring์— ๋Œ€ํ•ด ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์ •๋ฆฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์˜ค๊ฐœ๋… ๋“ฑ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€๋กœ ๊ฐ€๊ฐ์—†์ด ์ง€์ ํ•ด์ฃผ์„ธ์š”! ํ™•์ธํ•˜๋Š” ๋Œ€๋กœ ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜ํ•ด ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

์ด๋ฒˆ Spring Boot ์Šคํ„ฐ๋””๋Š” ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ์˜ ๊น€์˜ํ•œ๋‹˜๊ป˜์„œ ์ธํ”„๋Ÿฐ์— ์˜ฌ๋ ค์ฃผ์‹œ๋Š” ์ž๋ฐ” ์Šคํ”„๋ง ์™„์ „ ์ •๋ณต ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. ๊ทธ ์‹œ๋ฆฌ์ฆˆ์˜ ๊ฐ€์žฅ ์ฒซ ๊ฐ•์˜์ธ ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ๋๋‚ด๊ณ , ๋‹ค์Œ ๊ฐ•์˜์ธ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์จ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋ฌธ์ œ ์ธ์‹

์ „ ํฌ์ŠคํŠธ์—์„œ ๋‹คํ˜•์„ฑ๋งŒ์œผ๋กœ๋Š” SOLID๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™•์ธํ–ˆ๋‹ค. ํŠนํžˆ, ๊ทธ ์ค‘์—์„œ OCP์™€ DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๋” ๊ฐ„๋‹จํžˆ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ ธ์™€ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

public class DriverA implements Driver {
    private Car driverACar = new Sonata();
}

์šด์ „์ž ์—ญํ• ์„ ๊ตฌํ˜„ํ•˜๋Š” DriverA ํด๋ž˜์Šค์—์„œ, ์ž๋™์ฐจ ์—ญํ• ์„ ๊ตฌํ˜„ํ•˜๋Š” Sonata ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ OCP์™€ DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์›ํ‰์€ DriverA ๋‚ด๋ถ€์—์„œ Sonata ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์— ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ๋งŒ SOLID๋ฅผ ๋งŒ์กฑ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ํ•ด๊ฒฐ

์ผ๋‹จ DIP๋ถ€ํ„ฐ ์ง€์ผœ๋ณด์ž

DIP ์œ„๋ฐ˜์„ ๋จผ์ € ํ•ด๊ฒฐํ•ด๋ณด์ž. DIP๋ฅผ ๋งŒ์กฑํ•˜๋ ค๋ฉด ์ผ๋‹จ ๊ตฌ์ฒด์  ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ ์ถ”์ƒ์—๋งŒ ์˜์กดํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค.

public class DriverA implements Driver {
    private Car driverACar;
}

์–ด๋ผ? ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ๋Š” ๋‹น์—ฐํžˆ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ๊ตฌํ˜„์ฒด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งˆ์น˜ ์šด์ „ํ•˜๋Š” ์ž์„ธ๋กœ DriverA ํ˜ผ์ž์„œ ์Šค์ฟผํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ฌ๊นŒ. ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํ โ€ฆ ๋ˆ„๊ตฐ๊ฐ€ ์ด DriverA ์—๊ฒŒ Sonata ๋ฅผ ๊ฐ–๋‹ค์ฃผ๋ฉด ์–ด๋–จ๊นŒ?

๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•ด๋ฆฌ ํฌํ„ฐ ์˜ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๋ฐฐ์—ญ(ํ•ด๋ฆฌ, ๋ก , ํ—ค๋ฅด๋ฏธ์˜จ๋А ๋“ฑ)์„ ๊ฐ๊ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž. ๊ทธ๋Ÿผ ์ด ํ•ด๋ฆฌ๋ผ๋Š” ๋ฐฐ์—ญ์„ ๋‹ค๋‹ˆ์—˜ ๋ž˜๋“œํด๋ฆฌํ”„์—๊ฒŒ, ๋ก ์€ ๋ฃจํผํŠธ ๊ทธ๋ฆฐํŠธ์—๊ฒŒ, ํ—ค๋ฅด๋ฏธ์˜จ๋А๋Š” ์— ๋งˆ ์™“์Šจ์—๊ฒŒ ๋ฐฐ์ •ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ผ๊นŒ? ๋ฌผ๋ก , ์ •๋ง ๋งŽ์€ ๋ถ„๋“ค์ด ๊ณ ์‹ฌ์„ ํ•˜์‹œ๊ฒ ์ง€๋งŒ ๊ทธ ๋ถ„๋“ค์„ ํ†ตํ‹€์–ด์„œ ๊ธฐํš์ž ์ •๋„๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ์ด๋Ÿฌํ•œ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์„ ๋ฐฐ์ •ํ•ด์ฃผ๋Š” ๊ธฐํš์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ตฌ์ฒด ํด๋ž˜์Šค์™€ ๋ฐฐ์ •์ž์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ™•์‹คํžˆ ๋ถ„๋ฆฌํ•˜๋ฉด ์–ด๋–จ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ž๋™์ฐจ ํด๋ž˜์Šค๋ฅผ ๊ธฐํš ํ˜น์€ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด DriveConfig ๋ผ๋Š” ์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

public class DriveConfig {
    public DriverA driverA() {
        return new DriverA(new Sonata());
    }
}

๊ทธ๋ฆฌ๊ณ , DriverA ๋Š” ์–ด๋–ค ์ž๋™์ฐจ๋“  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์ƒ์„ฑ์ž๋ฅผ ์กฐ๊ธˆ ๋ฐ”๊ฟ”์ฃผ์ž.

public class DriverA implements Driver {
    public DriverA(Car car) {
        this.car = car;
    }
    private Car car;
}

์ž, ์–ด๋–ค๊ฐ€? DriverA ๋Š” ์™„๋ฒฝํžˆ Car ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๊ณ  ์žˆ๊ณ , ์–ด๋–ค ์ฐจ(Sonata , TeslaModel3 ๋“ฑ)๊ฐ€ ๋“ค์–ด์˜ฌ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ DriverA ๋Š” ์˜์กด ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ DriveConfig ๋ผ๋Š” ๊ตฌ์„ฑ ํด๋ž˜์Šค์— ๋งก๊ธฐ๊ณ , ์ž์‹ ์˜ ๊ตฌํ˜„๊ณผ ์‹คํ–‰์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ฌ์ง€์–ด, ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Car ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ผ๋ฉด ๋ฌด์—‡์ด๋“ ์ง€ DriverA ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

DIP๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ , ๋™์‹œ์— OCP๋„ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. ์ด์ œ ์ƒˆ๋กœ์šด ์ž๋™์ฐจ G90 ์„ ๊ฐœ๋ฐœํ•˜๋”๋ผ๋„, DriverA ์˜ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก , ๊ตฌ์„ฑ์„ ํ•˜๋Š” DriveConfig ๋Š” ๋ณ€๊ฒฝ์ด ๋˜๊ฒ ์ง€๋งŒ, ์‹ค์ œ๋กœ ์ž๋™์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ ์˜์—ญ์ธ DriverA ์˜ ์ฝ”๋“œ๋Š” ์ „ํ˜€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋กœ์จ, ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด SOLID๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค.

์•„๋‹ˆ DI ๋งํ•œ๋‹ค๋ฉฐ

๋„ˆ๋ฌด ์ž์—ฐ์Šค๋Ÿฌ์›Œ์„œ ๋ˆˆ์น˜๋ฅผ ์ฑ„์ง€ ๋ชปํ•˜์‹  ๋ถ„๋“ค๋„, ์•„๋‹ˆ๋ฉด ์• ์ง„์ž‘์— ๋ˆˆ์น˜๋ฅผ ์ฑ„์‹  ๋ถ„๋“ค๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ž, ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋ณด์ž.

public class DriverA implements Driver {
    public DriverA(Car car) {
        this.car = car;
    }
    private Car car;
}

public class DriveConfig {
    public DriverA driverA() {
        return new DriverA(new Sonata());
    }
}

์ง€๊ธˆ DriveConfig ์—์„œ DriverA ์—๊ฒŒ Sonata ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ณ , ๋‹ค๋ฅธ ๋ง๋กœ ์ฃผ์ž…ํ•˜๊ณ  ์žˆ๋‹ค.

์ž, ๋‹ค์‹œ, DriverA ๊ฐ€ ์˜์กดํ•˜๋Š” Car ์˜ ๊ตฌํ˜„์ฒด์ธ Sonata ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ, ํ•„์š”ํ•œ ์˜์กด ๊ด€๊ณ„์— ์žˆ๋Š” ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ฃผ์ž…ํ•ด์ค€๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฅผ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…, ์˜์กด์„ฑ ์ฃผ์ž…, ๊ทธ๋ฆฌ๊ณ  ์˜์–ด๋กœ๋Š” Dependency Injection ๋‹ค์‹œ ์ค„์—ฌ์„œ DI๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์—„์ฒญ ์–ด๋ ค์šด ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ฒ์„ ์ž”๋œฉ ๋จน์—ˆ์—ˆ๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์ดํ•ดํ• ๋งŒ ํ–ˆ๊ณ , ๊ทธ ๋™๊ธฐ๋„ ํฌ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.

IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ

์ œ์–ด์˜ ์—ญ์ „

Java๋‚˜ C ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์ฝ”๋”ฉ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๋ฉด, ๋Œ€๊ฐœ main ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๋ฉฐ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์šฐ๋ฆฌ, ์ฆ‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ–ˆ๋‹ค.

๋‹น์—ฐํ•œ ๊ฒƒ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ๋‚ด๊ฐ€ ์ง  ๋Œ€๋กœ ์›€์ง์ด๋‹ˆ๊นŒ.

ํ•˜์ง€๋งŒ, ์œ„์˜ DriveConfig ๋“ฑ์˜ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๋ณด๋ฉด ์ด์ œ ๊ตฌํ˜„ ๊ฐ์ฒด์ธ DriverA ์™€ Sonata ๋Š” ์ž์‹ ์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ๋งŒ ๋‹ด๋‹นํ•  ๋ฟ, ์‹ค์ œ๋กœ ์ฃผ๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์น˜, DriverA ๋Š” Car ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ๋„๋Œ€์ฒด ์–ด๋–ค ์ž๋™์ฐจ๊ฐ€ ์‹คํ–‰๋  ์ง€๋Š” ๋ชจ๋ฅด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ชจ๋‘ DriveConfig ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์‹ฌ์ง€์–ด, DriverA ์˜ ์ธ์Šคํ„ด์Šค ๋˜ํ•œ DriveConfig ๊ฐ€ ์ƒ์„ฑํ•œ๋‹ค. ๋˜ํ•œ ์ด ์ƒ์„ฑ ์‹œ์— Sonata ๊ฐ€ ๋„˜์–ด์˜ค๋Š”์ง€, TeslaModel3 ๊ฐ€ ๋„˜์–ด์˜ค๋Š”์ง€ ์ด DriverA ๋Š” ์ „ํ˜€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ์ €, ์šด์ „์„ ํ• (์ž์‹ ์˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ• ) ๋ฟ์ด๋‹ค.

์ด๋ ‡๊ฒŒ, ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ๊ตฌํ˜„ ๊ฐ์ฒด์—์„œ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ **์ œ์–ด์˜ ์—ญ์ „(Inversion Of Control, IoC)**์ด๋ผ ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ

์ด๋Ÿฐ DriveConfig ์ฒ˜๋Ÿผ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ, ๋˜๋Š” ์ด ๊ธฐ์ˆ ์„ IoC ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” DI ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค. ์ตœ๊ทผ์—๋Š” ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถ”์–ด์ ธ ์žˆ์–ด์„œ ์ฃผ๋กœ DI ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋ช…์นญ์œผ๋กœ ๋” ์ž์ฃผ ๋ถ€๋ฅด๊ณค ํ•œ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ช…์นญ์œผ๋กœ๋Š”, ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ์–ด์…ˆ๋ธ”๋Ÿฌ, ํ˜น์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•ด์„œ ์˜ค๋ธŒ์ ํŠธ ํŒฉํ† ๋ฆฌ ๋“ฑ์œผ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. Spring ์—์„œ๋„ BeanFactory, ApplicationContext๊ฐ€ ์ด ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋‹ค.

๋‹ค์Œ์€

์ด ๋‚ด์šฉ์„ ๊ฐ•์˜์—์„œ ๋ฐฐ์šฐ๋ฉด์„œ, ์ •๋ง ๊ฐ€์Šด์ด ๋‘๊ทผ๊ฑฐ๋ฆฌ๋Š”(?) ๊ฒฝํ—˜์„ ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์Šคํ† ๋ฆฌํ…”๋ง ํƒ„ํƒ„ํ•˜๊ฒŒ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์›Œ๋ณธ ๊ฒฝํ—˜์ด ์—†์–ด์„œ ๋” ๊ทธ๋žฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring ์ปจํ…Œ์ด๋„ˆ์™€ Spring ๋นˆ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋.