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

Spring๐Ÿƒ/๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ์™„์ „์ •๋ณต

์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ ๋…ธํŠธ ์ •๋ฆฌ (3) : ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด ๊ด€๊ณ„

728x90

์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค๊ณ  ํ‘œํ˜„

 

- @Controller ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋‹ค๋ฉด, ์Šคํ”„๋ง ๊ตฌ๋™ ์‹œ ๊ทธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค

- @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ์ƒ์„ฑ์ž์— ์‚ฌ์šฉํ•˜๋ฉด ์Šคํ”„๋ง ๊ตฌ๋™ ์‹œ ๊ทธ ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค, DI !

(์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋งŒ ์žˆ๋‹ค๋ฉด ์ƒ๋žต๊ฐ€๋Šฅ)

 

~ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ์Šคํ”„๋ง ๊ตฌ๋™ ์‹œ ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค

(@Controller, @Service, @Repository)

** ์•„๋ฌด ํด๋ž˜์Šค์—์„œ @Component๋ฅผ ๋ถ™์—ฌ๋„ ๋˜๋‚˜?

-> ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋˜๋Š” ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ์ง€ ์•Š์€ ํด๋ž˜์Šค๋Š” @Component๋ฅผ ๋ถ™์—ฌ๋„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค

(@SpringBootApplication ์•ˆ์— @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ์Œ)

 

cf) ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜๋Š” Bean์€ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋‹ค(๋™์‹œ์— 1๊ฐœ๋งŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค) -> ํ•œ ๊ฐœ๋งŒ ๋“ฑ๋กํ•˜์—ฌ ๊ณต์œ ํ•œ๋‹ค

์„ค์ •์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์€ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค..

(๊ถ๊ธˆ์ฆ : ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๋ผ๋ฉด, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•ด ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์˜์กด์„ฑ ์ฃผ์ž…์ด ์•ˆ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ์ง€...? ์–ธ์  ๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ํ”ˆ ์งˆ๋ฌธ)

 

2. ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

@Service, @Repository๊ฐ€ ์•„๋‹Œ @Configuration์ด ๋ถ™์–ด์žˆ๋Š” SpringConfig ํด๋ž˜์Šค์—์„œ ๊ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ค€๋‹ค

 

-> @Controller๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ด๋ฏ€๋กœ ๋ณ„๋„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  @ComponentScan์„ ํ†ตํ•ด ์ž๋™ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค + @Autowired

 

cf) ๊ทธ ์™ธ์—๋„ xml๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ƒ๋žต

cf) DI์—๋Š” ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ์žˆ๊ณ , ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ๊ถŒ์žฅ๋œ๋‹ค

ex) ํ•„๋“œ ์ฃผ์ž… : ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค

@Autowired private MemberService memberService;

setter ์ฃผ์ž… : public์œผ๋กœ ๋…ธ์ถœ๋˜์–ด ์•„๋ฌด๋‚˜ ๊ทธ ์ดˆ๊ธฐํ™” ๊ฐ’์„ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ 

@Autowired
public void setMemberService(MemberService memberService) {
	this.memberService = memberService;
}

์ƒ์„ฑ์ž ์ฃผ์ž… : ์ฒ˜์Œ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ ๊ทธ ๊ฐ’์„ ๊ณ ์ •ํ•˜๊ณ  ์ดํ›„ ๋ณ€๊ฒฝ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค

@Autowired
public MemberService(MemberRepository memberRepository) {
	this.memberRepository = memberRepository;
}

cf) ์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉ. ๊ทธ๋ฆฌ๊ณ  ์ •ํ˜•ํ™”๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉด ์„ค์ •์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค(2๋ฒˆ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค)

 

1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ์žฅ๋‹จ์ 

1๋ฒˆ : ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜๋‹ค

2๋ฒˆ : ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, @Bean ์ƒ์„ฑ์ž๋งŒ ๋ฐ”๊พธ๋ฉด ์ „๋ถ€ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ๋ณ€๊ฒฝ์ด ๊ฐ„ํŽธํ•˜๋‹ค

 

@Autowired๋Š” 1๋ฒˆ ํ˜น์€ 2๋ฒˆ, ์–ด๋–ค ๊ฒƒ์ด๋“  Bean์œผ๋กœ ๋“ฑ๋ก๋œ ํ›„(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก)์— ๊ทธ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•œ๋‹ค

 

 

728x90