Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

Bean Life Cycle ๋ณธ๋ฌธ

๐ŸSpring/Basic

Bean Life Cycle

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 23. 02:23

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

Bean Life Cycle

โ€ข Spring์˜ Bean์€ Java ๋˜๋Š” XML bean ์ •์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ธ์Šคํ„ด์Šคํ™” ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข Bean์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์ „, ์‚ฌํ›„ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข ๊ทธ ํ›„ Bean์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด Ioc Container์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
โ€ข ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์†Œ๋ฉธ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, Bean์˜ Life Cycle์ด๋ž€ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜์–ด ์†Œ๋ฉธ๋˜๊ธฐ ์ „๊นŒ์ง€ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์†Œ๋ฉธ๋˜๋Š”์ง€ ์ผ๋ จ์˜ ๊ณผ์ •์„ ์ด๋ฅด๋Š” ๋ง์ž…๋‹ˆ๋‹ค.  



Spring Container๋Š” ์ด๋Ÿฐ ๋นˆ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋‚ด์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐ์ฒด ์ƒ์„ฑ์ด๋‚˜ ์†Œ๋ฉธ ์‹œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š” ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โ€ข Spring Container
- ์ดˆ๊ธฐํ™” : Bean์„ ๋“ฑ๋ก, ์ƒ์„ฑ, ์ฃผ์ž…
- ์ข…๋ฃŒ : Bean ๊ฐ์ฒด๋“ค์„ ์†Œ๋ฉธ

โ€ข ์ฝœ๋ฐฑ
: ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด์ด๋ฉฐ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋จ
: ์ฆ‰, ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹คํ–‰๋  ์ˆ˜๋„ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฐœ๋…

์ด๋ฅผ ํ† ๋Œ€๋กœ ๊ฐ„๋‹จํžˆ ์Šคํ”„๋ง Bean Life Cycle ์„ ์š”์•ฝํ•˜๋ฉด

1 ) ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
2 ) ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ
3 ) ์˜์กด์„ฑ ์ฃผ์ž…
4 ) ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ : ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ , ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ
5 ) ์‚ฌ์šฉ
6 ) ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ : ๋นˆ์ด ์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
7 ) ์Šคํ”„๋ง ์ข…๋ฃŒ

โ€ข ์ด์ฒ˜๋Ÿผ ์Šคํ”„๋ง ๋นˆ์€ ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๋๋‚œ ํ›„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ์ ๊ณผ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์€ ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Bean ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ

Spring ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ

Spring Framework๋Š” ๋นˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค.

1. InitializingBean, DisposableBean callback interfaces
2. ์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ init( ), ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ destory( ) ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
3. @PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜

๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ด…์‹œ๋‹ค.

1. InitializingBean, DisposableBean callback interfaces

โ€ข InitializingBean
: ๋นˆ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์†์„ฑ์ด ์ปจํ…Œ์ด๋„ˆ์— ์„ค์ •๋œ ํ›„์— ๋นˆ์˜ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

void afterPropertiesSet() throws Exception;

: afterPropertiesSet() ๋ฉ”์„œ๋“œ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
: ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚œ ํ›„ ์ดˆ๊ธฐํ™” ์ง„ํ–‰

โ€ข DisposableBean
: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ์„ ์†Œ๋ฉธ์‹œํ‚ค๊ธฐ ์ „์— ์ฝœ๋ฐฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

void destroy() throws Exception;

: destory() ๋ฉ”์†Œ๋“œ๋กœ ์†Œ๋ฉธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
: Bean ์ข…๋ฃŒ ์ „ ๋งˆ๋ฌด๋ฆฌ ์ž‘์—… ex) ์ž์›ํ•ด์ œ close( ) ๋“ฑ

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class DemoBean implements InitializingBean, DisposableBean
{
	//Other bean attributes and methods 

	@Override
	public void afterPropertiesSet() throws Exception
	{
		//Bean initialization code
	}

	@Override
	public void destroy() throws Exception
	{
		//Bean destruction code
	}
}

๋‹จ์ 
: ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•œ๋‹ค.
: ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๋ช…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
: ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ดˆ๊ธฐํ™” ๋ฐ ์ข…๋ฃŒ ๋ฐฉ๋ฒ•์€ ์Šคํ”„๋ง ์ดˆ์ฐฝ๊ธฐ์— ๋‚˜์˜จ ๋ฐฉ๋ฒ•๋“ค์ด๋ฉฐ, ์ง€๊ธˆ์€ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2. ์„ค์ • ์ •๋ณด์— ์‚ฌ์šฉ์ž ์ •์˜ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •

์œ„ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  @Bean ์–ด๋…ธํ…Œ์ด์…˜์— initMethod, destroyMethod ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ๊ฐ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public class ExampleBean {
    public void init() throws Exception {
    	//์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ 
    }
    
    public void close() throws Exception {     
        // ์†Œ๋ฉธ ์ „ ์ฝœ๋ฐฑ 
    }
}

@Configuration
class LifeCycleConfig {
	 @Bean(initMethod = "init", destroyMethod = "close")
     public ExampleBean exampleBean() {
	
     }
}


โ€ข ์ด๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค, ์ •ํ™•ํžˆ ์œ„์˜ ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋ฉ”์†Œ๋“œ ๋ช…์„ ์ž์œ ๋กญ๊ฒŒ ๋ถ€์—ฌํ•  ์ˆ˜์žˆ๊ณ , ์Šคํ”„๋ง ์ฝ”๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€ข ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋„ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. @PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜

โ€ข @PostConstruct
: ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์š”์ฒญ ๊ฐ์ฒด์— ๋ฐ˜ํ™˜๋˜๊ธฐ ์ง์ „์— ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

โ€ข @PreDestroy
: @PreDestroy์ฃผ์„์ด ๋‹ฌ๋ฆฐ ๋ฉ”์†Œ๋“œ๋Š” bean์ด bean ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์—์„œ ํŒŒ๊ดด๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค .

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class DemoBean
{
	@PostConstruct
	public void customInit()
	{
		System.out.println("Method customInit() invoked...");
	}

	@PreDestroy
	public void customDestroy()
	{
		System.out.println("Method customDestroy() invoked...");
	}
}

โ€ข ์ตœ์‹  ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์• ๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋งŒ ๋ถ™์ด๋ฉด ๋˜๋ฏ€๋กœ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
โ€ข ํŒจํ‚ค์ง€๋ฅผ ์ž˜ ๋ณด๋ฉด javax.annotation.PostConstruct ๋กœ ์Šคํ”„๋ง์— ์ข…์†์ ์ธ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ JSR-250 ๋ผ๋Š” ์ž๋ฐ” ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.๋”ฐ๋ผ์„œ ์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
โ€ข ์œ ์ผํ•œ ๋‹จ์ ์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


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

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜
Spring โ€“ Bean Life Cycle
Spring์˜ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ(Bean Lifecycle)

[Spring] ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ(Bean LifeCycle) ์ฝœ๋ฐฑ ์•Œ์•„๋ณด๊ธฐ

'๐ŸSpring > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Bean Scope - ProtoType Scope  (0) 2022.06.23
Spring Singleton  (0) 2022.06.22
JDBC vs JDBC Template vs JPA  (0) 2022.06.18
Spring Framework, Spring Boot  (0) 2022.06.18
Spring Bean, Spring Container  (0) 2022.06.17
Comments