Backend/๐ŸŒฑ Spring

Spring Bean ์ƒ๋ช… ์ฃผ๊ธฐ

HS0601 2026. 1. 12. 16:33

 

Bean์ด ๋ญ์ž„?

newํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ Spring์ด ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ž„

Bean ์ƒ๋ช… ์ฃผ๊ธฐ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Bean์„ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ๋„ฃ๊ณ  ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•œ ํ›„ ์†Œ๋ฉธ ์‹œํ‚ค๋Š” ์ผ๋ จ์˜ ๊ณผ์ •

  1. ์ƒ์„ฑ Create - Spring์ด ๋นˆ ๊ฐ์ฒด๋ฅผ new ๋กœ ๋งŒ๋“ฆ
  2. ์˜์กด์„ฑ ์ฃผ์ž… DI - ํ•„์š”ํ•œ ์ž๋ฃŒ๋‚˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋„ฃ์–ด์คŒ
  3. ์ตœ์ ํ™” Initialize - ์‚ฌ์šฉํ•  ์ค€๋น„๋ฅผ ํ•จ
  4. ์‚ฌ์šฉ use - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰
  5. ์†Œ๋ฉธ Destroy - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ์ •๋ฆฌ

์‹ค์ œ ์ฝ”๋“œ๋กœ ๋ณด๋Š” ์ƒ๋ช…์ฃผ๊ธฐ

@Component
public class MyService{
	public MyService(){
		System.out.println("1. ์ƒ์„ฑ์ž ํ˜ธ์ถœ -> Bean ๊ฐ์ฒด ์ƒ์„ฑ");
	}
	@PostContstruct // ์ดˆ๊ธฐํ™”
	public void init(){
		System.out.println("2. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ -> ํ•„์š”ํ•œ ์ž์› ์—ฐ๊ฒฐ");
	}
	@PreDestroy // ์†Œ๋ฉธ
	public void destroy(){
		System.out.println("3. ์†Œ๋ฉธ ๋‹จ๊ณ„ -> ์ž์› ๊ด€๋ฆฌ");
	}
}

์Šคํ”„๋ง์ด ์ดˆ๊ธฐํ™”/์†Œ๋ฉธ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

@PostConstruct, @PreDestroy - ๋ฉ”์„œ๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ™์ž„

์™œ ์ค‘์š”ํ• ๊นŒ?

์ƒ์„ฑ → ์ดˆ๊ธฐํ™” → ์‚ฌ์šฉ → ์†Œ๋ฉธ ๊ณผ์ • ์ค‘ ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ ๋‹จ๊ณ„๊ฐ€ ํŠนํžˆ ์ค‘์š”ํ•ด ๋ณด์ž„

DB์—ฐ๊ฒฐ, Socket, Redis ๋“ฑ ์™ธ๋ถ€ ์ž์› ์—ฐ๊ฒฐ์ด ๋“ฑ์žฅํ•˜๋Š”๋ฐ,,,

Bean์€ ๊ฐ์ฒด

์™ธ๋ถ€ ์ž์›์€ ์„œ๋ฒ„ ๋ฐ–์— ์žˆ๋Š” ๋ฌด๊ฑฐ์šด ๊ฒƒ(DB, Redis)

@PostConstruct // Bean ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„
public void connect(){ 
	// DB ์—ฐ๊ฒฐ ์ฝ”๋“œ๋ฅผ ์—ฌ๊ธฐ์— ๋„ฃ์Œ
}
@PreDestroy // Bean ์†Œ๋ฉธ ๋‹จ๊ณ„
public void close(){
	// DB ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ์ฝ”๋“œ
}

์—ฌ๊ธฐ์„œ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ผ

์†Œ๋ฉธ ๋‹จ๊ณ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ผ์„ ๋งํ•œ๋‹ค

์—ฐ๊ฒฐ/์ •๋ฆฌ ์ฆ‰, ์‹œ์ ๊ณผ ๊ด€๋ จ์ด ์žˆ์–ด๋ณด์ž„

DB ์ปค๋„ฅ์…˜์„ ์—ด๊ณ  @PostConstruct, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋๋‚  ๋•Œ ๋‹ซ์•„์ฃผ๋Š” @PreDestroy ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

๋งŒ์•ฝ ์ด๊ฑธ ์•ˆํ•˜๋ฉด?

  1. ์ปค๋„ฅ์…˜์ด ๋‹ซํžˆ์ง€ ์•Š์Œ
  2. ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปค๋„ฅ์…˜ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ
  3. ์„œ๋ฒ„ ํญํŒ”

๋”ฐ๋ผ์„œ Bean ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์™ธ๋ถ€ ์ž์›์˜ ์—ฐ๊ฒฐ/ ์ •๋ฆฌ ์‹œ์ ์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

 

์ปค๋„ฅ์…˜์ด๋ž€?

์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ(DB/Redis/์†Œ์ผ“ ๋“ฑ)๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“œ๋Š” ํ†ต๋กœ

๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ์ƒํƒœ

ํ•„์š”ํ•œ ์ด์œ ๋Š”?

DB๋‚˜ Redis๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด ๊ทธ ์‹œ์Šคํ…œ๊ณผ ์†Œํ†ตํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•จ

๋ฐ์ดํ„ฐ ๋‹ฌ๋ผ๊ณ  ๋งํ•  ๊ธธ์ด ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ๊ทธ ๊ธธ์ด connection

 

๋“  ์˜๋ฌธ, ์ธ์Šคํ„ด์Šคํ™” ๋œ ๊ฐ์ฒด๋„ Bean์ธ๊ฐ€? - X

private Service service = new Service();

์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ new๋กœ ๋งŒ๋“  ๊ฐ์ฒด = ์ผ๋ฐ˜ ๊ฐ์ฒด

Bean ์•„๋‹˜

@Service
public class Service{}

์ด๊ฒŒ Bean.

์ •ํ™•ํžˆ ๋งํ•˜๋ฉด Spring container๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด

 

๋”ฐ๋ผ์„œ

  • @PostConstruct๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„
  • @PreDestroy๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์†Œ๋ฉธ๋‹จ๊ณ„์— ํ•ด๋‹น๋œ๋‹ค ์ƒ์„ฑ→์˜์กด์„ฑ์ฃผ์ž…→์ดˆ๊ธฐํ™”→์‚ฌ์šฉ→์†Œ๋ฉธ ์ „๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค
  • ์Šคํ”„๋ง Bean ์ƒ์„ฑ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ชฉ์  : ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์ดˆ๊ธฐํ™”/์†Œ๋ฉธ ํƒ€์ด๋ฐ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค

 

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

GlobalException & ErrorException  (0) 2026.01.12
MVC(Modelโ€“Viewโ€“Controller)  (0) 2026.01.12
[Spring]API ๋กœ๊น…  (0) 2025.08.21
[Spring]ํŒŒ์ผ๊ตฌ์กฐ (์ค‘์š”)  (0) 2025.07.29
[Spring]Filter  (0) 2025.07.29