Notice
Recent Posts
Link
Today
Total
07-07 22:50
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

Spring Bean, Spring Container ๋ณธ๋ฌธ

๐ŸSpring/Basic

Spring Bean, Spring Container

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 17. 12:51

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

๋นˆ ( Bean )

Spring Ioc ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด.

์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด์„œ ์ž๋ฐ” ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด ์ง€๊ฒŒ ๋˜๋ฉด ์ด ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ๋นˆ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ œ์–ด์˜ ์—ญ์ „ Ioc

 

๊ธฐ์กด์˜ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  new๋กœ ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Spring์—์„œ๋Š” new๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ, Spring์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์–ด์ง€๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, Spring์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

Spring Bean, Ioc Container์— ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• 

1. Annotation ์ด์šฉ

    •  @Component ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ๋‹ค๋ฉด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก ๋ฉ๋‹ˆ๋‹ค.

    •  @Controller, @Service, @Repository ์• ๋…ธํ…Œ์ด์…˜๋„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

 

2. Bean Configuration File์— ์ง์ ‘ Bean ๋“ฑ๋ก

    •  @Configuration๊ณผ @Bean Annotation ์„ ์ด์šฉํ•˜์—ฌ Bean์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    •  @Configuration์„ ์ด์šฉํ•˜๋ฉด Spring Project ์—์„œ์˜ Configuration ์—ญํ• ์„ ํ•˜๋Š” Class๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    •  ๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” Class์— @Bean Annotation์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ Bean์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Configuration
public class HelloConfiguration {
    @Bean
    public HelloController sampleController() {
        return new SampleController;
    }
}

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ž€?

    •  ์ž๋ฐ” ๊ฐ์ฒด(Bean)์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ƒ์„ฑ๋œ ์ž๋ฐ” ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

    •  Ioc(Inversion of Control)์™€ DI(Dependency Injection)์˜ ์›๋ฆฌ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

    •  ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    •  ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ™์€ ์Šคํ”„๋ง ๋นˆ์ด๋ฉด ๋ชจ๋‘ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. 

 

* ์‹ฑ๊ธ€ํ†ค : ์œ ์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•ด์„œ ๊ณต์œ 

 

์ œ์–ด์˜ ์—ญ์ „๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…

์‹ฑ๊ธ€ํ†ค

 

๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ new ์—ฐ์‚ฐ์ž, ์ธํ„ฐํŽ˜์ด์Šค ํ˜ธ์ถœ, ํŒฉํ† ๋ฆฌ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๋ฉธ์‹œ์ผฐ๋‹ค๋ฉด, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น ์—ญํ• ์„ ์œ„์ž„๋ฐ›์•„ ๋Œ€์‹  ํ•ด์ค๋‹ˆ๋‹ค. 

 

ex) AppConfig๋ฅผ ์‚ฌ์šฉํ•ด ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ–ˆ๋‹ค๋ฉด, ์Šคํ”„๋ง์—์„œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ(๊ฐ์ฒด) ๊ด€๋ฆฌ 

 

์ฆ‰, ์ œ์–ดํ๋ฆ„์„ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ œ์–ด์˜ ์—ญ์ „) ๋˜ํ•œ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Ÿฐํƒ€์ž„ ๊ณผ์ •์—์„œ ์•Œ์•„์„œ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. 

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฅ˜

1) BeanFactory

    •  ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์ƒ์„ฑํ•˜๊ณ  ์กฐํšŒํ•˜๊ณ  ๋Œ๋ ค์ฃผ๋Š” ๋“ฑ ๋นˆ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 

    •  getBean() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋นˆ์„ ์ธ์Šคํ„ด์Šคํ™” 

    •  ์ฒ˜์Œ์œผ๋กœ getBean() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ ์‹œ์ ์—์„œ์•ผ ํ•ด๋‹น ๋นˆ์„ ์ƒ์„ฑ

   •   BeanFactory๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค.

 

2) ApplicationContext

    •  BeanFactory์˜ ์ƒ์†์„ ๋ฐ›์•„ ํ™•์žฅํ•œ ๊ฒƒ์œผ๋กœ ๋นˆ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    •  ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

    •  XML์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, @๊ธฐ๋ฐ˜ ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. @Configuration

    •  ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ, ์ด๋ฏธ์ง€๊ฐ™์€ ํŒŒ์ผ ์ž์›์„ ๋กœ๋“œ, ๋ฆฌ๋„ˆ์Šค๋กœ ๋“ฑ๋ก๋œ ๋นˆ์—๊ฒŒ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์•Œ๋ฆผ ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ

    •  ์ดˆ๊ธฐํ™” ์‹œ์ ์— ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ€๋™ ํ›„์—๋Š” ๋นˆ์„ ์ง€์—ฐ ์—†์ด ๋ฐ›์Œ

// ์‚ฌ์šฉ ์˜ˆ์ œ
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
// ๋ฉ”์„œ๋“œ ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด, ๋ฐ˜ํ™˜ํƒ€์ž…
// SpringContainer๋Š” ์„ค์ •์ •๋ณด(AppConfig.class)๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…(DI)ํ•œ๋‹ค.

2-1)  Bean ์š”์ฒญ ์‹œ  ApplicationContext์—์„œ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ • 

 

์ถœ์ฒ˜ : https://mangkyu.tistory.com/151

ApplicationContext๋Š” @Configuration์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์„ค์ •์ •๋ณด๋กœ ๋“ฑ๋กํ•ด๋‘ก๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค์ •์ •๋ณด ํด๋ž˜์Šค ๋‚ด์—์„œ @Bean์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ๋นˆ ๋ชฉ๋ก์œผ๋กœ ์ƒ์„ฑํ•œ ํ›„ ๋นˆ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒ์„ฑํ•œ ๋นˆ ๋ชฉ๋กํ•ด์„œ ํ•ด๋‹น @Bean์„ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

 

ํ•™์Šต์— ๋งŽ์€ ๋„์›€์ด ๋œ ๋ธ”๋กœ๊ทธ ๋งํฌ๋ฅผ  ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

 

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜

์Šคํ”„๋ง ๋นˆ(Spring Bean)์ด๋ž€? ๊ฐœ๋…์ •๋ฆฌ

[Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ๋นˆ์ด๋ž€?

[Spring] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(Application Context)์™€ ์Šคํ”„๋ง์˜ ์‹ฑ๊ธ€ํ†ค(Singleton)

Comments