๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Spring

[Spring] ์Šคํ”„๋ง ๋นˆ(Bean)์ด๋ž€?

by HanaV 2023. 7. 5.
728x90

๋นˆ(Bean)์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ์กฐ๋ฆฝ๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋ฐ” ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋“ฑ๋ก๋œ ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑ๋˜๊ณ , ํ•„์š”ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋นˆ์„ ๋“ฑ๋กํ•˜๋ ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์— @Component, @Service, @Repository, @Controller ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, ๊ฐ๊ฐ ์ปดํฌ๋„ŒํŠธ, ์„œ๋น„์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ, ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ์˜ ์—ญํ• ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์Šคํ”„๋ง ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ: https://hanav.tistory.com/191

 

Spring ์•„๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ

@Component: ์Šคํ”„๋ง์˜ ์ปดํฌ๋„ŒํŠธ ์Šค์บ๋‹์— ์˜ํ•ด ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋  ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. @Controller: ์Šคํ”„๋ง MVC์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. @Service:

hanav.tistory.com

 
๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑ๋œ ํ›„์—๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ๋นˆ๊ณผ์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ณ , ์œ ์—ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๋˜ ์Šคํ”„๋ง ๋นˆ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์— ๋”ฐ๋ผ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค, ํ”„๋กœํ† ํƒ€์ž… ๋“ฑ์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ์†Œ๋ฉธ ์ฃผ๊ธฐ๋ฅผ ์ œ์–ดํ•œ๋‹ค.

Scope์˜ ์ข…๋ฅ˜

1. Singleton: ๊ธฐ๋ณธ ์Šคํ”„๋ง ๋นˆ์˜ Scope์ด๋‹ค. Singleton Scope๋กœ ์ •์˜๋œ ๋นˆ์€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด์—์„œ ๊ณต์œ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋™์ผํ•œ ๋นˆ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ํ•ญ์ƒ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
2. Prototype: Prototype Scope๋กœ ์ •์˜๋œ ๋นˆ์€ ๋งค๋ฒˆ ์š”์ฒญ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ๋นˆ์˜ ์ƒํƒœ๊ฐ€ ์š”์ฒญ ๊ฐ„์— ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
3. Request: Request Scope๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” Scope์ด๋‹ค. ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ™์€ ์š”์ฒญ ๋‚ด์—์„œ๋Š” ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์š”์ฒญ ์‚ฌ์ด์—๋Š” ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
4. Session: Session Scope๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” Scope๋กœ, ํ•˜๋‚˜์˜ ์„ธ์…˜์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๋™์ผํ•œ ์„ธ์…˜ ๋‚ด์—์„œ๋Š” ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์„ธ์…˜ ๊ฐ„์—๋Š” ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
5. Application: Application Scope๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ๊ณต์œ ๋œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ์œ ์ง€๋˜๋ฉฐ, ๋ชจ๋“  ์„ธ์…˜ ๋ฐ ์š”์ฒญ์—์„œ ๊ณต์œ ๋œ๋‹ค.

 
๋นˆ์€ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“ˆํ™”์™€ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ์Šคํ”„๋ง์˜ IoC(Inversion of Control) ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋นˆ์€ ์Šคํ”„๋ง์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ธ ์˜์กด์„ฑ ์ฃผ์ž…, AOP ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค.

728x90

"); wcs_do();