Spring

[Spring] 핡심 원리 κΈ°λ³Έ (8) - 빈 생λͺ…μ£ΌκΈ° 콜백

Sue 2022. 3. 14. 20:24

πŸ“Œ λΉˆ 생λͺ…μ£ΌκΈ° 콜백

λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ ν’€μ΄λ‚˜ λ„€νŠΈμ›Œν¬ μ†ŒμΌ“μ²˜λŸΌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œμ μ— ν•„μš”ν•œ 연결을 미리 해두고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ μ‹œμ μ— 연결을 λͺ¨λ‘ μ’…λ£Œν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체의 μ΄ˆκΈ°ν™”μ™€ μ’…λ£Œ μž‘μ—… ν•„μš”

 

 πŸ“Œ μŠ€ν”„λ§ 빈의 라이프 사이클

μŠ€ν”„λ§ λΉˆμ€ 객체λ₯Ό μƒμ„±ν•˜κ³  μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•˜λŠ” 라이프사이클을 κ°€μ§„λ‹€. 이 단계가 λ‹€ λλ‚˜κ³ λ‚˜μ„œμ•Ό ν•„μš”ν•œ 데이터λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. λ”°λΌμ„œ μ΄ˆκΈ°ν™” μž‘μ—…μ€ μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ΄ λͺ¨λ‘ μ™„λ£Œλ˜κ³  λ‚œ λ’€ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. μŠ€ν”„λ§μ€ μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ΄ μ™„λ£Œλ˜λ©΄ μŠ€ν”„λ§ λΉˆμ—κ²Œ 콜백 λ©”μ„œλ“œλ₯Ό 톡해 μ΄ˆκΈ°ν™” μ‹œμ μ„ μ•Œλ €μ£Όκ³ , μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜κΈ° 전에 μ†Œλ©Έ μ½œλ°±μ„ μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. κ°œλ°œμžλŠ” 콜백 λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ 빈의 μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ΄ λλ‚œ μ‹œμ κ³Ό μ†Œλ©Έ 직전 μ‹œμ μ„ μ•Œ 수 μžˆλ‹€.

 

β€»μ°Έκ³ β€» : 객체λ₯Ό μƒμ„±ν•˜λŠ” λΆ€λΆ„κ³Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 뢀뢄을 λͺ…ν™•νžˆ λ‚˜λˆ„λŠ” 것이 μœ μ§€λ³΄μˆ˜ κ΄€μ μ—μ„œ μ’‹μŒ

 

βœ… μŠ€ν”„λ§ 빈의 이벀트 라이프사이클

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 생성 → μŠ€ν”„λ§ 빈 생성  μ˜μ‘΄κ΄€κ³„ μ£Όμž…  μ΄ˆκΈ°ν™” 콜백  빈 μ‚¬μš©  μ†Œλ©Έ μ „ 콜백  μŠ€ν”„λ§ μ’…λ£Œ 

  • μ΄ˆκΈ°ν™” 콜백 : 빈이 μƒμ„±λ˜κ³ , μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ΄ μ™„λ£Œλœ ν›„ 호좜
  • μ†Œλ©Έμ „ 콜백 : 빈이 μ†Œλ©Έλ˜κΈ° 직전에 호좜

 

 πŸ“Œ μŠ€ν”„λ§μ˜ 빈 생λͺ…μ£ΌκΈ° 콜백 지원

βœ… μΈν„°νŽ˜μ΄μŠ€ InitializingBean, DisposableBean

  • 빈으둜 등둝될 ν΄λž˜μŠ€λŠ” InitializingBean, DisposableBean을 μƒμ†λ°›λŠ”λ‹€.
  • μ΄ˆκΈ°ν™”λ₯Ό μ§€μ›ν•˜λŠ” afterPropertiesSet()을 override ν•œλ‹€.
  • μ†Œλ©Έμ„ μ§€μ›ν•˜λŠ” destory()λ₯Ό override ν•œλ‹€.

 

πŸ”» 단점

  • 이 μΈν„°νŽ˜μ΄μŠ€λŠ” μŠ€ν”„λ§ μ „μš© μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. 
  • μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œμ˜ 이름을 λ³€κ²½ν•  수 μ—†λ‹€.
  • λ‚΄κ°€ μ½”λ“œλ₯Ό κ³ μΉ  수 μ—†λŠ” μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ μš©ν•  수 μ—†λ‹€.
  • 거의 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° μ§€κΈˆμ€ λ‹€λ₯Έ 방법듀을 많이 μ‚¬μš©ν•œλ‹€.

 

βœ… 빈 등둝 μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œ μ§€μ •

  • 빈으둜 등둝될 ν΄λž˜μŠ€μ— μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•œλ‹€.
  • 빈으둜 등둝할 λ•Œ @Bean(initMethod = "init", destoryMethod = "close") 처럼 μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œλ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

 

πŸ”» νŠΉμ§•

  • λ©”μ„œλ“œ 이름을 자유둭게 쀄 수 μžˆλ‹€.
  • μŠ€ν”„λ§ 빈이 μŠ€ν”„λ§ μ½”λ“œμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ½”λ“œκ°€ μ•„λ‹Œ μ„€μ • 정보λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œλ₯Ό κ³ μΉ  수 μ—†λŠ” μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—λ„ μ΄ˆκΈ°ν™”, μ’…λ£Œ λ©”μ„œλ“œλ₯Ό μ μš©ν•  수 μžˆλ‹€.
  • 라이브러리의 λŒ€λΆ€λΆ„ μ’…λ£Œ λ©”μ„œλ“œλŠ” close, shutdownμ΄λΌλŠ” 이름을 κ°€μ§„λ‹€. destroy 속성은 λ©”μ„œλ“œμ˜ 이름을 μΆ”λ‘ ν•˜μ—¬ μ’…λ£Œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. μ’…λ£Œ λ©”μ„œλ“œλ₯Ό close λ˜λŠ” shutdown으둜 μ„€μ •ν–ˆμ„ 경우 λ”°λ‘œ λͺ…μ‹œν•΄μ£Όμ§€ μ•Šμ•„λ„ 잘 λ™μž‘ν•œλ‹€.
  • μΆ”λ‘  κΈ°λŠ₯을 μ‚¬μš©ν•˜κ³  μ‹Άμ§€ μ•ŠμœΌλ©΄ destroyMethod=""처럼 빈 곡백을 μ§€μ •ν•œλ‹€.

 

βœ… μ• λ…Έν…Œμ΄μ…˜ @PostConstruct, @PreDestroy

  • 빈으둜 등둝될 클래슀의 μ΄ˆκΈ°ν™” λ©”μ„œλ“œμ™€ μ†Œλ©Έ λ©”μ„œλ“œμ— 각각 @PostConstruct, @PreDestroy μ• λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬μ€€λ‹€.
  • κ°€μž₯ νŽΈλ¦¬ν•˜κ²Œ μ΄ˆκΈ°ν™”μ™€ μ’…λ£Œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.

 

πŸ”» νŠΉμ§•

  • μ΅œμ‹  μŠ€ν”„λ§μ—μ„œ κ°€μž₯ ꢌμž₯ν•˜λŠ” 방법이닀.
  • μŠ€ν”„λ§μ— 쒅속적인 기술이 μ•„λ‹Œ μžλ°” ν‘œμ€€μ΄λ‹€. λ”°λΌμ„œ μŠ€ν”„λ§μ΄ μ•„λ‹Œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ—μ„œλ„ λ™μž‘ν•œλ‹€.
  • μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”κ³Ό 잘 μ–΄μšΈλ¦°λ‹€.
  • μœ μΌν•œ 단점은 μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” μ μš©ν•˜μ§€ λͺ»ν•œλ‹€λŠ” 것이닀. 이 경우 @Beanμ—μ„œ μ΄ˆκΈ°ν™”μ™€ μ†Œλ©Έ λ©”μ„œλ“œλ₯Ό μ§€μ •ν•΄μ£ΌλŠ” 방법을 μ‚¬μš©ν•˜μž!

κ°•μ˜ 링크

 

μŠ€ν”„λ§ 핡심 원리 - 기본편 - μΈν”„λŸ° | κ°•μ˜

μŠ€ν”„λ§ μž…λ¬Έμžκ°€ 예제λ₯Ό λ§Œλ“€μ–΄κ°€λ©΄μ„œ μŠ€ν”„λ§μ˜ 핡심 원리λ₯Ό μ΄ν•΄ν•˜κ³ , μŠ€ν”„λ§ κΈ°λ³ΈκΈ°λ₯Ό ν™•μ‹€νžˆ λ‹€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€., - κ°•μ˜ μ†Œκ°œ | μΈν”„λŸ°...

www.inflearn.com