๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

[Spring] ์Šคํ”„๋ง ๋นˆ(Bean)์˜ ๊ฐœ๋…๊ณผ ์ƒ์„ฑ ์›๋ฆฌ

by Leica 2020. 2. 28.
๋ฐ˜์‘ํ˜•

[Spring] ์Šคํ”„๋ง ๋นˆ(Bean)์˜ ๊ฐœ๋…๊ณผ ์ƒ์„ฑ ์›๋ฆฌ

๋นˆ(Bean)

Spring IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋นˆ(Bean)์ด๋ผ๋Š” ์šฉ์–ด๋กœ ๋ถ€๋ฅธ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ new ์—ฐ์‚ฐ์ž๋กœ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ ๊ทธ ๊ฐ์ฒด๋Š” ๋นˆ์ด ์•„๋‹ˆ๋‹ค.

ApplicationContext.getBean()์œผ๋กœ ์–ป์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋นˆ์ด๋‹ค.

์ฆ‰ Spring์—์„œ์˜ ๋นˆ์€ ApplicationContext๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ฐ์ฒด, ์ฆ‰ ApplicationContext๊ฐ€ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์•ˆ์— ๋‹ด๊ณ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์–ด๋–ป๊ฒŒ Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์„ ๋“ฑ๋กํ• ๊นŒ?

๋นˆ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

โ‘  Component Scanning

โ‘ก ๋นˆ ์„ค์ •ํŒŒ์ผ์— ์ง์ ‘ ๋นˆ์„ ๋“ฑ๋ก

 

Component Scan

@ComponentScan ์–ด๋…ธํ…Œ์ด์…˜๊ณผ @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์„œ ๋นˆ์„ ๋“ฑ๋กํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์€ ์–ด๋Š ์ง€์ ๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ์œผ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  @Component๋Š” ์‹ค์ œ๋กœ ์ฐพ์•„์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

Spring IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ๋นˆ์„ ๋“ฑ๋กํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฝœ๋ฐฑ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฝœ๋ฐฑ ์ค‘์—๋Š” @Component ์• ๋…ธํ…Œ์ด์…˜์„ ์ฐพ์•„์„œ ์ด ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋“ฑ๋ก๋ผ์žˆ๋‹ค.

 

Spring Boot ํ”„๋กœ์ ํŠธ์—์„œ @ComonentScan ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ด์— ํ•ด๋‹นํ•œ๋‹ค.

 

๋‹ค์Œ์€ Spring์˜ PetClinic ์˜ˆ์ œ ์†Œ์Šค์ด๋‹ค.

 

PetClinicApplication ํด๋ž˜์Šค์— @SpringBootApplication ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ

 

์ด ์• ๋…ธํ…Œ์ด์…˜์€ ๋‚ด๋ถ€์ ์œผ๋กœ @ComponentScan ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ด @ComponentScan ์• ๋…ธํ…Œ์ด์…˜์€ ์–ด๋””์„œ๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ์•„๋ณผ ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

@ComponentScan์ด ๋ถ™์–ด์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ํŒจํ‚ค์ง€์—์„œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ•˜์œ„ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ํ›‘์–ด๋ณด๋ฉฐ @Component ์• ๋…ธํ…Œ์ด์…˜(๋˜๋Š” @Component ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์• ๋…ธํ…Œ์ด์…˜)์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฐพ๋Š”๋‹ค.

Spring์ด IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋•Œ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

Spring์˜ PetClinic ์˜ˆ์ œ์—์„œ

 

์œ„์˜ ํด๋ž˜์Šค๋Š” @Controller ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ

 

๋‚ด๋ถ€์ ์œผ๋กœ @Component ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ฆ‰ OwnerController๋Š” Spring์— ์˜ํ•ด IoC ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

 

๋นˆ ์„ค์ •ํŒŒ์ผ์— ์ง์ ‘ ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•

์œ„์™€ ๊ฐ™์ด @Component ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„ ๋นˆ ์„ค์ •ํŒŒ์ผ์— ์ง์ ‘ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นˆ ์„ค์ •ํŒŒ์ผ์€ XML๊ณผ ์ž๋ฐ” ์„ค์ •ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ตœ๊ทผ ์ถ”์„ธ๋Š” ์ž๋ฐ” ์„ค์ •ํŒŒ์ผ์„ ์ข€ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

์ž๋ฐ” ์„ค์ •ํŒŒ์ผ์€ ์ž๋ฐ” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ xxxxConfiguration์™€ ๊ฐ™์ด ๋ช…๋ช…ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค์— @Configuration ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค.

๊ทธ ์•ˆ์— @Bean ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ง์ ‘ ๋นˆ์„ ์ •์˜ํ•œ๋‹ค.

 

1
2
3
4
5
6
7
@Configuration
public class SampleConfiguration {
    @Bean
    public SampleController sampleController() {
        return new SampleController;
    }
}
cs

sampleController()์—์„œ ๋ฆฌํ„ด๋˜๋Š” ๊ฐ์ฒด๊ฐ€ IoC ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

 

๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ๋นˆ์„ ์ง์ ‘ ์ •์˜ํ•ด์„œ ๋“ฑ๋กํ•˜๋ฉด @Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

@Configuration ์• ๋…ธํ…Œ์ด์…˜์„ ๋ณด๋ฉด ์ด ์• ๋…ธํ…Œ์ด์…˜๋„ @Component๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— @ComponentScan์˜ ์Šค์บ” ๋Œ€์ƒ์ด ๋˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋นˆ ์„ค์ •ํŒŒ์ผ์ด ์ฝํž๋•Œ ๊ทธ ์•ˆ์— ์ •์˜ํ•œ ๋นˆ๋“ค์ด IoC ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

References

์ธํ”„๋Ÿฐ - ๋ฐฑ๊ธฐ์„ ๋‹˜์˜ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์ž…๋ฌธ(๊ฐœ์ •ํŒ)์„ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€