๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅDEV/Java || Spring

@Component์™€ @Configuration์˜ ์ฐจ์ด

by bdd 2022. 7. 24.

@Component์™€ @Comfiguration์˜ ์ฐจ์ด์— ๊ด€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด @Component๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํด๋ž˜์Šค๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ  @Configuration + @Bean์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•˜๊ธฐ ํž˜๋“  ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. **์ฐธ์กฐ

 

์ข…๋ฅ˜ ์„ ์–ธ ์‚ฌ์šฉ ์šฉ๋„
@Component ํด๋ž˜์Šค ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ํด๋ž˜์Šค
@Bean ๋ฉ”์„œ๋“œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

 

 

 

 

 

1. @Component / @Configuration


@Component๊ฐ€ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋Š” ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ Bean์„ ๋“ฑ๋กํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์— ๋‹ฌ๋ ค ์žˆ๋Š”๋ฐ์š”, ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž…์ด๋ž€ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” @Controller, @Service, @Repository ๋“ฑ์˜ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ๊ด€๋ฆฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์‹๋ณ„ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋‹จ์ˆœํ•œ ๋งˆ์ปค๋ผ๊ณ  ๋ณด๋ฉด๋ฉ๋‹ˆ๋‹ค. 

 

 

์ด์ „ ๋ฒ„์ „์—์„œ๋Š” XML ํŒŒ์ผ์— Bean์„ ๋ชจ๋‘ ๋ช…์‹œํ•˜๊ณ  ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ ์ด๋•Œ๋ฌธ์— XML ํŒŒ์ผ์ด ๊ฑฐ๋Œ€ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ๋ฒ„์ „๋ถ€ํ„ฐ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋“ฑ์žฅํ–ˆ๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ๋นˆ์„ ๋“ฑ๋ก/์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

    -  Spring 2.0 : @Repository

    - Spring 2.5 : @Component, @Controller, @Service, @Configuration

 

 

 

 

 

 

์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

@Configuration ํด๋ž˜์Šค์—๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํ•˜๋‚˜ ์ด์ƒ์˜ @Bean ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค @Configuration ๋‚ด๋ถ€์—๋Š” @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘ ์›๋ฆฌ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค. **๋ฟ๋งŒ ์•„๋‹ˆ๋ผ @Component + @Bean์˜ ์กฐํ•ฉ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

JPAQueryFactory์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋Š” @Bean์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

 

 

 

 

๋˜ํ•œ ๊ตฌํ˜„ ๋‚˜๋ฆ„์ด๊ฒ ์ง€๋งŒ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“ค์—ˆ๊ณ  ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด์„œ ๋‚ด๋ถ€์— ๊ฐ’์„ ์ €์žฅํ• ๋•Œ๋„ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋นˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. **Component๋กœ ๋งŒ๋“ค๊ณ  ์ƒ์„ฑ์ž ๋ธ”๋ก์—์„œ ์ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ตฌํ˜„ ๋‚˜๋ฆ„์ž…๋‹ˆ๋‹ค. 

 

 

 

 

 

 

2. ์ฐจ์ด์ 


@Configuration ๋‚ด๋ถ€์—๋Š” @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— @Bean๊ณผ @Component๋ฅผ ๋น„๊ตํ•ด๋ด์•ผํ•ฉ๋‹ˆ๋‹ค. @Component๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํด๋ž˜์Šค์— ์„ ์–ธ๋˜์–ด ๋นˆ์œผ๋กœ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ๋‚ด์žฅ ํด๋ž˜์Šค๋“ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋“ค๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ @Bean์„ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ๋กํ•ด์ค„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

JPAQueryFactory์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋Š” @Bean์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

 

 

 

 

3. Conclusion


์ฆ‰, @Component๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, @Configuration + @Bean์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

๋Œ“๊ธ€