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

Spring

[Spring] ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์‹œ์ž‘ํ•˜๊ธฐ

๐Ÿ“Œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… 

  • ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ๋Š” ์ž๋ฐ” ์ฝ”๋“œ์˜ @Bean์ด๋‚˜ XML์˜ <bean> ๋“ฑ์„ ํ†ตํ•ด์„œ ์„ค์ • ์ •๋ณด์— ์ง์ ‘ ๋“ฑ๋กํ•  ์Šคํ”„๋ง ๋นˆ์„ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋“ฑ๋กํ•ด์•ผ ํ•  ์Šคํ”„๋ง ๋นˆ์ด ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ๋˜๋ฉด ์ผ์ผํžˆ ๋“ฑ๋กํ•˜๊ธฐ๋„ ๊ท€์ฐฎ๊ณ , ์„ค์ • ์ •๋ณด๋„ ์ปค์ง€๊ณ .. ์ด๋Ÿฐ ์ €๋Ÿฐ ๋‹จ์ ๋“ค์ด ๋งŽ์ง€๋งŒ,,,, ๋ฌด์—‡๋ณด๋‹ค ๊ท€์ฐฎ๋‹ค ;
  • ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ComponentScan ์ด๋‹ค. 
  • ์—ฌ๊ธฐ์— ์˜์กด ๊ด€๊ณ„๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋Š” @Autowired๋ผ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.

 

 

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € @ComponenetScan์„ ์„ค์ • ์ •๋ณด์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. 
  • ๊ธฐ์กด์˜ AppConfig์™€๋Š” ๋‹ค๋ฅด๊ฒŒ @Bean์œผ๋กœ ๋“ฑ๋กํ•œ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค. 
์ฐธ๊ณ   ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜๋ฉด @Configuration์ด ๋ถ™์€ ์„ค์ • ์ •๋ณด๋„ ์ž๋™์œผ๋กœ ๋“ฑ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์—, AppConfig, TestConfig ๋“ฑ ์•ž์„œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ ์„ค์ • ์ •๋ณด๋„ ํ•จ๊ป˜ ๋“ฑ๋ก๋˜๊ณ , ์‹คํ–‰๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ excludeFilters๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์ •์ •๋ณด๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ–ˆ๋‹ค. ๋ณดํ†ต ์„ค์ • ์ •๋ณด๋ฅผ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ƒํ™ฉ์ƒ ์—ฌ๊ธฐ์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋‹ค. 

 

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•ด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. 
์ฐธ๊ณ   @Configuration์ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋œ ์ด์œ ๋„ @Configuration ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ณด๋ฉด @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

  • ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ํด๋ž˜์Šค์— @Component ์ถ”๊ฐ€ํ•œ๋‹ค. 

์˜ˆ์‹œ 

  • @Bean์œผ๋กœ ์ง์ ‘ ์„ค์ • ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ์˜์กด๊ด€๊ณ„๋„ ์ง์ ‘ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค. ํ˜„์žฌ AppConfig์—๋Š” ์ด๋Ÿฐ ์„ค์ • ์ •๋ณด ์ž์ฒด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๋„ ์ด ํด๋ž˜์Šค ์•ˆ์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. 
  • @Autowired๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ค€๋‹ค. ์ƒ์„ฑ์ž์—์„œ ์—ฌ๋Ÿฌ ์˜์กด ๊ด€๊ณ„๋„ ํ•œ๋ฒˆ์— ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

  • AnnotationConfigApplicationContext๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๋‹ค.
  • ์‹คํ–‰ ์ •๋ณด๋กœ  AutoAppConfig ํด๋ž˜์Šค๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

 

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. @ComponentScan

 

  • @ComponentScan์€ @Component๊ฐ€ ๋ถ™์€ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  • ์ด๋•Œ ์Šคํ”„๋ง ๋นˆ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์€ ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ•˜๋˜ ๋งจ ์•ž๊ธ€์ž๋งŒ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋นˆ ์ด๋ฆ„ ๊ธฐ๋ณธ ์ „๋žต : MemberServlceImpl ํด๋ž˜์Šค -> memberServiceImpl
๋นˆ ์ด๋ฆ„ ์ง์ ‘ ์ง€์ • : ๋งŒ์•ฝ ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด
@Component("memberService2")์ด๋Ÿฐ ์‹์œผ๋กœ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๋ฉด ๋œ๋‹ค.

 

 

2. @Autowired ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…

  • ์ƒ์„ฑ์ž์— @Autowired๋ฅผ ์ง€์ •ํ•˜๋ฉด, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•œ๋‹ค.
  • ์ด๋•Œ ๊ธฐ๋ณธ ์กฐํšŒ ์ „๋žต์€ ํƒ€์ž…์ด ๊ฐ™์€ ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•œ๋‹ค.
getBean(MemberRepository.class)์™€ ๋™์ผํ•˜๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด๋œ๋‹ค. 

 

 

 

  • ์ƒ์„ฑ์ž์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์•„๋„ ๋‹ค ์ฐพ์•„์„œ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค.