[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 24. ๋นˆ ์Šค์ฝ”ํ”„

2023. 2. 9. 16:06ยทSpring/Spring ๊ธฐ๋ณธ

 

๋นˆ ์Šค์ฝ”ํ”„๋ž€?

 

์Šคํ”„๋ง ๋นˆ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋˜์–ด์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค๊ณ  ํ•™์Šตํ–ˆ๋‹ค.

 

์ด๊ฒƒ์€ ์Šคํ”„๋ง ๋นˆ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์Šค์ฝ”ํ”„๋Š” ๋ฒˆ์—ญ ๊ทธ๋Œ€๋กœ ๋นˆ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค.

 

 

 

 

๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„ ์ง€์›

 

 ์‹ฑ๊ธ€ํ†ค: ๊ธฐ๋ณธ ์Šค์ฝ”ํ”„, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ฐ€์žฅ ๋„“์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค.

 

 

ํ”„๋กœํ† ํƒ€์ž…: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ 

 

๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์งง์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค.

 

 

 


์›น ๊ด€๋ จ ์Šค์ฝ”ํ”„

 

request: ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค.

 

session: ์›น ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค.

 

application: ์›น์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ์™€ ๊ฐ™์€ ๋ฒ”์œ„๋กœ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค.

 

 

 

์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„

 

์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์˜ ๋นˆ์„ ์กฐํšŒํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค์˜ ์Šคํ”„๋ง ๋นˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์‹ฑ๊ธ€ํ†ค ๋นˆ ์š”์ฒญ

 

1. ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์˜ ๋นˆ์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญํ•œ๋‹ค.

 

2. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณธ์ธ์ด ๊ด€๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ๋นˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


3.
์ดํ›„์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ™์€ ์š”์ฒญ์ด ์™€๋„ ๊ฐ™์€ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์Šคํ”„๋ง ๋นˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„

 

๋ฐ˜๋ฉด์— ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์กฐํšŒํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ญ์ƒ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํ”„๋กœํ†  ํƒ€์ž… ๋นˆ ์š”์ฒญ1

 

1. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„์˜ ๋นˆ์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญํ•œ๋‹ค.


2.
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ์‹œ์ ์— ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

 

ํ”„๋กœํ†  ํƒ€์ž… ๋นˆ ์š”์ฒญ2

 

3. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒ์„ฑํ•œ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.


4.
์ดํ›„์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ™์€ ์š”์ฒญ์ด ์˜ค๋ฉด ํ•ญ์ƒ ์ƒˆ๋กœ์šด ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

 ์ฝ”๋“œ

 

@PostConstruct
public void init() {
    System.out.println("SingletonBean.init");
}

@PreDestroy
public void destroy() {
    System.out.println("SingletonBean.destroy");
}

 

@PostConstruct : ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ 

 

@ PreDestroy : ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ 

 

์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ์ƒ์„ฑ -> ์Šคํ”„๋ง๋นˆ์ƒ์„ฑ -> ์˜์กด๊ด€๊ณ„์ฃผ์ž… -> ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ -> ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ  -> ์Šคํ”„๋ง ์ข…๋ฃŒ

 

 

์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์˜ ๋นˆ์„ ์กฐํšŒ

 

@Scope("singleton")
static class SingletonBean {

 

@Test
void singletonBeanFind() {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class);

 

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ 

 

System.out.println("find singletonBean1");
SingletonBean singletonBean1 = ac.getBean(SingletonBean.class);
System.out.println("singletonBean1 = " + singletonBean1);

System.out.println("find singletonBean2");
SingletonBean singletonBean2 = ac.getBean(SingletonBean.class);
System.out.println("singletonBean2 = " + singletonBean2);

Assertions.assertThat(singletonBean1).isSameAs(singletonBean2);

ac.close();

 

singletonBean1 , singletonBean2 ๊ฐ์ฒด ๋‘๊ฐœ ์ƒ์„ฑ  

 

๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ 

 

 

 

์‹ฑ๊ธ€ํ†ค ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์‹œ์ ์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰

 

 

-- > init : @PostConstruct ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ ํ˜ธ์ถœ 

 

 

๊ฐ™์€ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์Šคํ”„๋ง ๋นˆ์„ ๋ฐ˜ํ™˜ ( singletonBean1 == singletonBean2 , ์ฐธ์กฐ๊ฐ’์ด ๊ฐ™๋‹ค ) 

 

์‹ฑ๊ธ€ํ†ค ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋นˆ์˜ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰

 

--> destroy : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฃŒ๊ฐ€ ํ˜ธ์ถœ๋˜์ž ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋œ ๊ฒƒ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ ํ…Œ์ŠคํŠธ

 

@Scope("prototype")
static class PrototypeBean {

 

@Test
void PrototypeBeanFind() {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class);

 

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ 

 

System.out.println("find prototypeBean1");
PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class);
System.out.println("prototypeBean1 = " + prototypeBean1);

System.out.println("find prototypeBean2");
PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class);
System.out.println("prototypeBean2 = " + prototypeBean2);

Assertions.assertThat(prototypeBean1).isNotSameAs(prototypeBean2);

ac.close();

 

prototypeBean1 , prototypeBean2 ๊ฐ์ฒด ๋‘๊ฐœ ์ƒ์„ฑ  

 

๋‘ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ 

 

 

 

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


ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ 2๋ฒˆ ์กฐํšŒํ–ˆ์œผ๋ฏ€๋กœ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์Šคํ”„๋ง ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ , ์ดˆ๊ธฐํ™”๋„ 2๋ฒˆ ์‹คํ–‰๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•ญ์ƒ ์ƒˆ๋กœ์šด ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜

 

 

ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๊ณผ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๊ทธ๋ฆฌ๊ณ  ์ดˆ๊ธฐํ™” ๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ , ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋”ฐ๋ผ์„œ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ @PreDestroy ๊ฐ™์€ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ํŠน์ง• ์ •๋ฆฌ

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ ์ƒ์„ฑ๋œ๋‹ค.


์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…, ์ดˆ๊ธฐํ™”๊นŒ์ง€๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š”๊ฒƒ์ด๋‹ค.

 

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

 

ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ๊ด€๋ฆฌํ•  ์ฑ…์ž„์€ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ์— ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ @PreDestroy ๊ฐ™์€ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 26. ์›น ์Šค์ฝ”ํ”„  (0) 2023.02.10
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 25. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ / Provider  (0) 2023.02.09
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 23. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ  (0) 2023.02.08
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 22. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ / List, Map  (0) 2023.02.07
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 21. @Autowired ํ•„๋“œ ๋ช… / @Qualifier, @Primary  (0) 2023.02.07
'Spring/Spring ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 26. ์›น ์Šค์ฝ”ํ”„
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 25. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ / Provider
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 23. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 22. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ / List, Map
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 24. ๋นˆ ์Šค์ฝ”ํ”„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”