λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Spring-study🌱/Spring-Basic60

Section 9-3. ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„ - 싱글톀 빈과 ν•¨κ»˜ μ‚¬μš©μ‹œ 문제점 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— ν”„ν† ν† νƒ€μž… μŠ€μ½”ν”„μ˜ λΉˆμ„ μš”μ²­ν•˜λ©΄ 항상 μƒˆλ‘œμš΄ 객체 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€. ν•˜μ§€λ§Œ 싱글톀 빈과 ν•¨κ»˜ μ‚¬μš©ν•  λ•ŒλŠ” μ˜λ„ν•œ λŒ€λ‘œ 잘 λ™μž‘ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€. ν”„λ‘œν† νƒ€μž… 빈 직접 μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ AλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— ν”„λ‘œν† νƒ€μž… λΉˆμ„ μš”μ²­ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν”„λ‘œν† νƒ€μž… λΉˆμ„ μƒˆλ‘œ μƒμ„±ν•΄μ„œ λ°˜ν™˜(x01)ν•œλ‹€. ν•΄λ‹Ή 빈의 count ν•„λ“œ 값은 0이닀. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‘°νšŒν•œ ν”„λ‘œν† νƒ€μž… λΉˆμ— addCount()λ₯Ό ν˜ΈμΆœν•˜μ—¬ countν•„λ“œλ₯Ό +1ν•œλ‹€. 결과적으둜 ν”„λ‘œν† νƒ€μž… 빈(x01)의 count ν•„λ“œμ˜ 값은 1이닀. ν΄λΌμ΄μ–ΈνŠΈ BλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— ν”„λ‘œν† νƒ€μž… λΉˆμ„ μš”μ²­ν•œλ‹€. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν”„λ‘œν† νƒ€μž… λΉˆμ„ μƒˆλ‘œ μƒμ„±ν•˜μ—¬ λ°˜ν™˜(x02)ν•œλ‹€. ν•΄λ‹Ή 빈의 count ν•„λ“œ 값은 0이닀. 클라.. 2022. 5. 2.
Section 9-2. ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„ 싱글톀 μŠ€μ½”ν”„μ˜ λΉˆμ„ μ‘°νšŒν•˜λ©΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 항상 같은 μΈμŠ€ν„΄μŠ€μ˜ μŠ€ν”„λ§ λΉˆμ„ λ°˜ν™˜ν•œλ‹€. λ°˜λ©΄μ— ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ‘°νšŒν•˜λ©΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 항상 μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€. 싱글톀 빈 μš”μ²­ 싱글톀 μŠ€μ½”ν”„μ˜ λΉˆμ„ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” μŠ€ν”„λ§μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μŠ€ν”„λ§ λΉˆμ„ λ°˜ν™˜ 이후에 λ˜‘κ°™μ€ μš”μ²­μ΄μ™€λ„ λ˜‘κ°™μ€ 객체 μΈμŠ€ν„΄μŠ€μ˜ μŠ€ν”„λ§ λΉˆμ„ λ°˜ν™˜ ν”„λ‘œν† νƒ€μž… 빈 μš”μ²­ ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„μ˜ λΉˆμ„ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 이 μ‹œμ μ— ν”„λ‘œν† νƒ€μž… λΉˆμ„ μƒμ„±ν•˜κ³ , ν•„μš”ν•œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž… 3. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” μƒμ„±ν•œ ν”„λ‘œν† νƒ€μž… λΉˆμ„ ν΄λΌμ΄μ–ΈνŠΈμ— λ°˜ν™˜ 4. 이후, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 같은 μš”μ²­μ΄ 였면 항상 μƒˆλ‘œμš΄ ν”„λ‘œν† νƒ€μž… λΉˆμ„ μƒμ„±ν•΄μ„œ λ°˜ν™˜ 핡심은 μŠ€ν”„λ§ μ»¨ν…Œμ΄.. 2022. 5. 2.
Section 9-1. 빈 μŠ€μ½”ν”„λž€? μ§€κΈˆκΉŒμ§€ μš°λ¦¬λŠ” μŠ€ν”„λ§ 빈이 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ μƒμ„±λ˜μ–΄μ„œ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ  λ•Œ κΉŒμ§€ μœ μ§€λœλ‹€κ³  ν•™μŠ΅ν–ˆλ‹€. μ΄κ²ƒμ€μŠ€ν”„λ§ 빈이 기본적으둜 싱글톀 μŠ€μ½”ν”„λ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. μŠ€μ½”ν”„λŠ” λ²ˆμ—­ κ·ΈλŒ€λ‘œ 빈이 μ‘΄μž¬ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λœ»ν•œλ‹€. μŠ€ν”„λ§μ€ λ‹€μŒκ³Ό 같은 λ‹€μ–‘ν•œ μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•œλ‹€. 싱글톀: κΈ°λ³Έ μŠ€μ½”ν”„, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘κ³Ό μ’…λ£ŒκΉŒμ§€ μœ μ§€λ˜λŠ” κ°€μž₯ 넓은 λ²”μœ„μ˜ μŠ€μ½”ν”„μ΄λ‹€. ν”„λ‘œν† νƒ€μž…: μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν”„λ‘œν† νƒ€μž… 빈의 생성과 μ˜μ‘΄κ΄€κ³„ μ£Όμž…κΉŒμ§€λ§Œ κ΄€μ—¬ν•˜κ³  λ”λŠ” κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ” 맀우 짧은 λ²”μœ„μ˜ μŠ€μ½”ν”„μ΄λ‹€. (μ΄ˆκΈ°ν™” λ©”μ„œλ“œκΉŒμ§€λŠ” κ΄€μ—¬ν•˜κ³  κ·Έ μ΄ν›„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•΄μ€€ λ’€ 더이상 μŠ€ν”„λ§μ΄ κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉, μ’…λ£Œ λ©”μ„œλ“œλŠ” ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.) μ›Ή κ΄€λ ¨ μŠ€μ½”ν”„ request: μ›Ή μš”μ²­μ΄ λ“€.. 2022. 5. 2.
Section 8-4. μ• λ…Έν…Œμ΄μ…˜ @PostConstruct, @PreDestroy μ•žμ—μ„œ 빈 생λͺ…μ£ΌκΈ° μ½œλ°±μ— λŒ€ν•΄ 2κ°€μ§€λ₯Ό ν•™μŠ΅ν–ˆμ—ˆλ‹€. ν•˜μ§€λ§Œ μ΄λ²ˆμ— λ°°μš°λŠ” 방법을 주둜 μ‚¬μš©ν•˜μž. (μŠ€ν”„λ§μ—μ„œλ„ 이방법을 ꢌμž₯ν•œλ‹€.) μœ„μ™€ 같이 μž‘μ„±ν•˜λ©΄ 끝이닀. @PostConstruct, @PreDestroy μ• λ…Έν…Œμ΄μ…˜ νŠΉμ§• μ΅œμ‹  μŠ€ν”„λ§μ—μ„œ κ°€μž₯ ꢌμž₯ν•˜λŠ” 방법이닀. μ• λ…Έν…Œμ΄μ…˜ ν•˜λ‚˜λ§Œ 뢙이면 λ˜λ―€λ‘œ 맀우 νŽΈλ¦¬ν•˜λ‹€. νŒ¨ν‚€μ§€λ₯Ό 잘 보면 javax.annotation.PostConstruct 이닀. μŠ€ν”„λ§μ— 쒅속적인 기술이 μ•„λ‹ˆλΌ JSR-250λΌλŠ” μžλ°” ν‘œμ€€μ΄λ‹€. λ”°λΌμ„œ μŠ€ν”„λ§μ΄ μ•„λ‹Œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ—μ„œλ„ λ™μž‘ν•œλ‹€. μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”κ³Ό 잘 μ–΄μšΈλ¦°λ‹€. μœ μΌν•œ 단점은 μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” μ μš©ν•˜μ§€ λͺ»ν•œλ‹€λŠ” 것이닀. μ™ΈλΆ€ 라이브러리λ₯Ό μ΄ˆκΈ°ν™”, μ’…λ£Œ ν•΄μ•Ό ν•˜λ©΄ @Bean의 κΈ°λŠ₯을 μ‚¬μš©ν•˜μž. 정리 @PostConstruct.. 2022. 5. 2.
Section 8-3. 빈 등둝 μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œ μ„€μ • 정보에 @Bean(initMethod = "init", destroyMethod = "close") 처럼 μ΄ˆκΈ°ν™”, μ†Œλ©Έ λ©”μ„œλ“œλ₯Ό μ§€μ •ν•˜λŠ” 방법이 μžˆλ‹€. μ•žμ—μ„œ μ‚¬μš©ν–ˆλ˜ afterPropertiesSet() λ©”μ„œλ“œμ™€ destroy()λ©”μ„œλ“œλ₯Ό initλ©”μ„œλ“œμ™€ closeλ©”μ„œλ“œλ‘œ λ³€κ²½ν•˜μ˜€λ‹€. 그리고 Bean을 등둝할 λ•Œ μ΄ˆκΈ°ν™” λ©”μ„œλ“œμ™€ μ†Œλ©Έ λ©”μ„œλ“œλ₯Ό μš°λ¦¬κ°€ λ§Œλ“  λ©”μ„œλ“œλ‘œ μ§€μ •ν•΄μ£Όλ©΄ λœλ‹€. ν…ŒμŠ€νŠΈ 성곡 μ„€μ • 정보 μ‚¬μš© νŠΉμ§• λ©”μ„œλ“œ 이름을 자유둭게 쀄 수 μžˆλ‹€. μŠ€ν”„λ§ 빈이 μŠ€ν”„λ§ μ½”λ“œμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. μ½”λ“œκ°€ μ•„λ‹ˆλΌ μ„€μ • 정보λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œλ₯Ό κ³ μΉ  수 μ—†λŠ” μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—λ„ μ΄ˆκΈ°ν™”, μ’…λ£Œ λ©”μ„œλ“œλ₯Ό μ μš©ν•  수 μžˆλ‹€. μ’…λ£Œ λ©”μ„œλ“œ μΆ”λ‘  @Bean의 destroyMethodμ†μ„±μ—λŠ” νŠΉλ³„ν•œ κΈ°λŠ₯이 μžˆλ‹€.. 2022. 5. 2.