-
- μΉ λΈλΌμ°μ -> ν°μΊ£ μλ² -> μ€νλ§ μ»¨ν μ΄λμμ μλ Controllerκ° λ°μμ viewResolverλ‘ μΉ λΈλΌμ°μ λ‘ return
-
- @ResponseBody μ΄μ©
- μΉ λΈλΌμ°μ -> ν°μΊ£ μλ² -> μ€νλ§ μ»¨ν
μ΄λμμ μλ Controllerκ° λ°μμ HttpMessateConverterλ‘ μΉ λΈλΌμ°μ λ‘ return
- κΈ°λ³Έ λ¬Έμμ²λ¦¬ : StringHttpMessageConverter
- κΈ°λ³Έ κ°μ²΄μ²λ¦¬ : MappingJackson2HttpMessageConverter(JsonConverter)
- μΉ λΈλΌμ°μ -> ν°μΊ£ μλ² -> μ€νλ§ μ»¨ν
μ΄λμμ μλ Controllerκ° λ°μμ HttpMessateConverterλ‘ μΉ λΈλΌμ°μ λ‘ return
- @ResponseBody μ΄μ©
- @Autowired
- μμ±μμ @Autowiredκ° μμΌλ©΄ μ€νλ§μ΄ μ°κ΄λ κ°μ²΄λ₯Ό μ€νλ§ μ»¨ν μ΄λμμ μ°Ύμμ λ£μ΄μ€λ€.
- μ΄λ κ² κ°μ²΄μμ‘΄ κ΄κ³λ₯Ό μΈλΆμμ λ£μ΄μ£Όλ κ²μ DI(Dependency Injection), μμ‘΄μ± μ£Όμ μ΄λΌ νλ€.
- μ€νλ§μ μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ λΉμ λ±λ‘ν λ, κΈ°λ³ΈμΌλ‘ 'μ±κΈν€'μΌλ‘ λ±λ‘νλ€(μ μΌνκ² νλλ§ λ±λ‘ν΄μ 곡μ νλ€.)
- λ°λΌμ κ°μ μ€νλ§ λΉμ΄λ©΄ λͺ¨λ κ°μ μΈμ€ν΄μ€λ€.
- μ€μ μΌλ‘ μ±κΈν€μ΄ μλκ² μ€μ ν μ μμ§λ§, νΉλ³ν κ²½μ°λ₯Ό μ μΈνλ©΄ λλΆλΆ μ±κΈν€μ μ¬μ©νλ€.
- @Component
- ν΄λΉ μ λ Έν μ΄μ μ μ°λ©΄ μ€νλ§ λΉμΌλ‘ μλ λ±λ‘λλ€.
- @Controller
- 컨νΈλ‘€λ¬κ° μ€νλ§ λΉμΌλ‘ μλ λ±λ‘λ μ΄μ λ μ»΄ν¬λνΈ μ€μΊ λλ¬Έμ΄λ€.
-
- Spring Boot κΈ°μ€
- μ»΄ν¬λνΈ μ€μΊμ main λ©μλκ° ν¬ν¨λ λλ ν 리μμλ§ μ»΄ν¬λνΈ μ€μΊμ΄ μ μ©λλ€.
- λ€λ₯Έ λλ ν 리μμλ μ μ©λκ² νλ €λ©΄ @ComponentScanμ΄ νμνλ€.
- Spring Boot κΈ°μ€
-
- μμ
- Connection μ°κ²° - Connection conn = getConnection();
- PrepareStatement μμ± - PrepareStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
- νλΌλ―Έν° μΈν - pstmt.setString(1, λ°μ΄ν° κ°);
- ResultSet μΈν - ResultSet rs = pstmt.getGeneratedKeys()
- μμ
-
- κΌ connectionμ close ν΄μΌνλ€.
-
- μΈν°νμ΄μ€λ₯Ό ν΅ν κΈ°λ³Έμ μΈ CRUD
- νμ΄μ§ κΈ°λ₯ μλ μ 곡
-
- ProceedingJoinPoint = joinPoint.proceed()λ‘ λΉμ¦λμ€ λ‘μ§ μ€νμκ° μΈ‘μ κ°λ₯
-
- ν΅μ¬ κΈ°μ : μ€νλ§ DI 컨ν μ΄λ, AOP, μ΄λ²€νΈ, κΈ°ν
- μΉ κΈ°μ : μ€νλ§ MVC, μ€νλ§ WebFlux
- λ°μ΄ν° μ κ·Ό κΈ°μ : νΈλμμ , JDBC, ORMμ§μ, XML μ§μ
- κΈ°μ ν΅ν© : μΊμ, μ΄λ©μΌ, μ격μ κ·Ό, μ€μΌμ€λ§
- ν μ€νΈ : μ€νλ§ κΈ°λ° ν μ€νΈ μ§μ
- μΈμ΄ : μ½νλ¦°, 그루λΉ
-
- μ€νλ§μ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ μ§μ, μ΅κ·Όμλ κΈ°λ³ΈμΌλ‘ μ¬μ©
- λ¨λ μΌλ‘ μ€νν μ μλ μ€νλ§ μ ν리μΌμ΄μ μ μ½κ² μμ±
- Tomcat κ°μ μΉ μλ²λ₯Ό λ΄μ₯ν΄μ λ³λμ μ°λ² μλ²λ₯Ό μ€μΉνμ§ μμλ λ¨
- μμ¬μ΄ λΉλ ꡬμ±μ μν starter μ’ μμ± μ 곡
- μ€νλ§κ³Ό 3rd parth(μΈλΆ) λΌμ΄λΈλ¬λ¦¬ μλ ꡬμ±
- λ©νΈλ¦, μν νμΈ, μΈλΆ κ΅¬μ± κ°μ νλ‘λμ μ€λΉ κΈ°λ₯ μ 곡
- κ΄λ‘μ μν κ°κ²°ν μ€μ
-
- νλ‘κ·Έλ¨μ μ μ΄ νλ¦μ μ§μ μ μ΄νλ κ²μ΄ μλλΌ μΈλΆμμ κ΄λ¦¬νλ κ²μ μ μ΄μ μμ (IOC)μ΄λΌ νλ€.
- ex)
- Junit
- ex)
- νλ‘κ·Έλ¨μ μ μ΄ νλ¦μ μ§μ μ μ΄νλ κ²μ΄ μλλΌ μΈλΆμμ κ΄λ¦¬νλ κ²μ μ μ΄μ μμ (IOC)μ΄λΌ νλ€.
-
- AppConfig μ²λΌ κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλ©΄μ μμ‘΄κ΄κ³λ₯Ό μ°κ²°ν΄ μ£Όλκ²μ IOC 컨ν μ΄λ λλ DI 컨ν μ΄λ λΌκ³ νλ€.
- μμ‘΄κ΄κ³ μ£Όμ μ μ΄μ μ λ§μΆμ΄ μ΅κ·Όμλ DI 컨ν μ΄λλΌ νλ€.
- λλ μ΄μλΈλ¬, μ€λΈμ νΈ ν©ν 리 λ±μΌλ‘ λΆλ¦¬κΈ°λ νλ€.
-
- ApplicationContextλ₯Ό μ€νλ§ μ»¨ν
μ΄λλΌ νλ€.
- ex) AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
- ApplicationContextλ μΈν°νμ΄μ€μ΄λ€.
- XML κΈ°λ°μΌλ‘ λ§λ€ μ μκ³ , μ λ Έν μ΄μ κΈ°λ°μ μλ° μ€μ ν΄λμ€λ‘ λ°λ€ μ μλ€.
- @Configurationμ΄ λΆμ μ€μ μ 보 ꡬμ±μ μ¬μ©νλ©° @Beanμ΄ λΆμ λ©μλλ₯Ό λͺ¨λ νΈμΆν΄μ λ°νλ κ°μ²΄λ₯Ό μ€νλ§ μ»¨ν μ΄λμ λ±λ‘νλ€ (μ±κΈν€ λ°©μ)
- μ€νλ§ μ»¨ν μ΄λλ νλΌλ―Έν°λ‘ λμ΄μ¨ μ€μ ν΄λμ€ μ 보(default : ν΄λμ€ λͺ μ 맨 μκΈμλ§ μλ¬Έμλ‘ μ¬μ©)λ₯Ό μ¬μ©ν΄μ μ€νλ§ λΉμ λ±λ‘νλ€.
- μ€νλ§ μ»¨ν μ΄λλ μ€μ μ 보λ₯Ό μ°Έκ³ ν΄μ μμ‘΄κ΄κ³λ₯Ό μ£Όμ (DI)νλ€.
- μ€νλ§ μ»¨ν μ΄λμ κΈ°λ³Έ λΉ λ±λ‘λ°©μμ μ±κΈν€μ΄μ§λ§ μμ²ν λ λ§λ€ μλ‘±γ΄ κ°μ²΄λ₯Ό μμ±ν΄μ λ°ννλ κΈ°λ₯λ μ 곡νλ€ (λΉ μ€μ½ν)
- μ€νλ§ μ»¨ν μ΄λλ μ±κΈν€ ν¨ν΄μ μ μ©νμ§ μμλ, κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ±κΈν€μΌλ‘ κ΄λ¦¬νλ€.
- μ€νλ§ μ»¨ν μ΄λλ μ±κΈν€ 컨ν μ΄λ μν μ νλ€. μ΄λ κ² μ±κΈν€ κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλ κΈ°λ₯μ μ±κΈν€ λ μ§μ€νΈλ¦¬λΌ νλ€.
- μ€νλ§ μ»¨ν
μ΄λμ μ΄λ° κΈ°λ₯ λλΆμ μ±κΈν€ ν¨ν΄μ λͺ¨λ λ¨μ μ ν΄κ²°νλ©΄μ κ°μ²΄λ₯Ό μ±κΈν€μΌλ‘ μ μ§ν μ μλ€.
- μ±κΈν€ ν¨ν΄μ μν μ§μ λΆν μ½λκ° λ€μ΄κ°μ§ μμλ λλ€.
- DIP, OCP, ν μ€νΈ private μμ±μλ‘λΆν° μμ λ‘κ² μ±κΈν€μ μ¬μ©ν μ μλ€.
- ApplicationContextλ₯Ό μ€νλ§ μ»¨ν
μ΄λλΌ νλ€.
-
- BeanFactoryμ ApplicationContextλ λͺ¨λ μ€νλ§ μ»¨ν μ΄λλΌκ³ νλ€.
-
- μ€νλ§ μ»¨ν μ΄λμ μ΅μμ μΈν°νμ΄μ€λ€.
- μ€νλ§ λΉμ κ΄λ¦¬νκ³ μ‘°ννλ μνμ λ΄λΉνλ€.
- getBeanDefinitionNames() μΌλ‘ λͺ¨λ λΉ μ‘°ν κ°λ₯
- getBean(λΉ name, class) μΌλ‘ νΉμ λΉ μ‘°ν κ°λ₯
- Role ROLE_APPLICATION : μ§μ λ±λ‘ν μ ν리μΌμ΄μ λΉ
- Role ROLE_INFRASTRUCTURE : μ€νλ§μ΄ λ΄λΆμμ μ¬μ©νλ λΉ
- getBeansOfType() μΌλ‘ κ°μ class νμ μΌλ‘ λ±λ‘λ λΉμ λͺ¨λ μ‘°ν κ°λ₯
- λΆλͺ¨ νμ μΌλ‘ getBean() μ‘°νμ, μμμ΄ λ μ΄μ μμΌλ©΄, μ€λ³΅ μ€λ₯κ° λ°μνλ€.
- λΆλͺ¨ νμ μΌλ‘ getBean() μ‘°νμ, μμμ΄ λ μ΄μ μμΌλ©΄, λΉ μ΄λ¦μ μ§μ νλ©΄ μ μ μλνλ€.
-
- BeanFactory κΈ°λ₯μ λͺ¨λ μμλ°μμ μ 곡νλ€. (μΈν°νμ΄μ€)
- λΉ κ΄λ¦¬κΈ°λ₯ + νΈλ¦¬ν λΆκ° κΈ°λ₯μ μ 곡νλ€.
- μ ν리μΌμ΄μ
μ κ°λ°ν λλ λΉμ κ΄λ¦¬νκ³ μ‘°ννλ κΈ°λ₯μ λ¬Όλ‘ μ΄κ³ , μ λ§μ λΆκ°κΈ°λ₯μ΄ νμνλ€.
-
- ex) νκ΅μμ λ€μ΄μ€λ©΄ νκ΅μ΄λ‘, μμ΄κΆμμ λ€μ΄μ€λ©΄ μμ΄λ‘ μΆλ ₯
-
- local, dev, prod λ±μ ꡬλΆν΄μ μ²λ¦¬
-
- μ΄λ²€νΈλ₯Ό λ°ννκ³ κ΅¬λ νλ λͺ¨λΈμ νΈλ¦¬νκ² μ§μ
-
- file, classpath, μΈλΆ λ±μμ 리μμ€λ₯Ό νΈλ¦¬νκ² μ‘°ν
-
-
- BeanDefinitionμ λΉ μ€μ λ©ν μ λ³΄λΌ νλ€.
- @Bean, λΉ κ°κ° νλμ© λ©ν μ λ³΄κ° μμ±λλ€.
- μ€νλ§ μ»¨ν μ΄λλ μ΄ λ©νμ 보λ₯Ό κΈ°λ°μΌλ‘ μ€νλ§ λΉμ μμ±νλ€.
- XMLμ μ½μ΄μ BeanDefinitionμ λ§λ€λ©΄ λλ€.
- μλ° μ½λλ₯Ό μ½μ΄μ BeanDefinitionμ λ§λ€λ©΄ λλ€.
- μ€νλ§ μ»¨ν μ΄λλ μλ° μ½λμΈμ§, XMLμΈμ§ λͺ°λΌλ λλ€. μ€μ§ BeanDefinitionλ§ μλ©΄ λλ€.
- BeanClassName : μμ±ν λΉμ ν΄λμ€ λͺ (μλ° μ€μ μ²λΌ ν©ν 리 μν μ λΉμ μ¬μ©νλ©΄ μμ.)
- factoryBeanName : ν©ν 리 μν μ λΉμ μ¬μ©ν κ²½μ° μ΄λ¦, μ) appConfig
- factoryMethodName : λΉμ μμ±ν ν©ν 리 λ©μνΈ μ§μ , μ) memberService
- Scope : μ±κΈν€(κΈ°λ³Έκ°)
- lazyInit : μ€νλ§ μ»¨ν μ΄λλ₯Ό μμ±ν λ λΉμ μμ±νλ κ²μ΄ μλλΌ, μ€μ λΉμ μ¬μ©ν λ κΉμ§ μ΅λν μμ±μ μ§μ°μ²λ¦¬ νλμ§ μ¬λΆ
- InitMethodName : λΉμ μμ±νκ³ , μμ‘΄κ΄κ³λ₯Ό μ μ©ν λ€μ νΈμΆλλ μ΄κΈ°ν λ©μλ λͺ
- DestroyMethodName : λΉμ μλͺ μ£ΌκΈ°κ° λλμ μ κ±°νκΈ° μ§μ μ νΈμΆλλ λ©μλ λͺ
- Constructor arguments, properties : μμ‘΄κ΄κ³ μ£Όμ μμ μ¬μ©νλ€. (μλ° μ€μ μ²λΌ ν©ν 리 μν μ λΉμ μ¬μ©νλ©΄ μμ.)

- BeanDefinitionμ λΉ μ€μ λ©ν μ λ³΄λΌ νλ€.
-
- μλ λΉ μμ±κ³Ό μλ λΉ μμ±
-
- ν΄λΉ μ λ Έν μ΄μ μ λΆμ΄λ©΄ μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ BeanμΌλ‘ λ±λ‘λλ€.
-
- ANNOTATION : κΈ°λ³Έκ°, μ λ Έν μ΄μ μ μΈμν΄μ λμνλ€.
- ASSIGNABLE_TYPE : μ§μ ν νμ
κ³Ό μμ νμ
μ μΈμν΄μ λμνλ€.
- ex) kr.co.spring.dip.discount.FixDiscountPolicy.class
- ASPECTJ : AspectJ ν¨ν΄ μ¬μ©
- ex) kr.co.spring..*Service+
- REGEX : μ κ· ννμ
- ex) kr.co.spring.dip.*
- CUSTOM : TypeFilter λΌλ μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ μ²λ¦¬
-
- μ°Έκ³ : μ»΄ν¬λνΈ μ€μΊμ μ¬μ©νλ©΄ @Configurationμ΄ λΆμ μ€μ μ 보λ μλμΌλ‘ λ±λ‘λκΈ° λλ¬Έμ, AppConfig, TestConfig λ±
μμ λ§λ€μ΄λμλ μ€μ μ 보λ ν¨κ» λ±λ‘λκ³ , μ€νλμ΄ λ²λ¦°λ€.
κ·Έλμ excludeFiltersλ₯Ό μ΄μ©ν΄μ μ€μ μ 보λ μ»΄ν¬λνΈ μ€μΊ λμμμ μ μΈνλ€. λ³΄ν΅ μ€μ μ 보λ₯Ό μ»΄ν¬λνΈ μ€μΊ λμμμ μ μΈνμ§λ μμ§λ§, κΈ°μ‘΄ μμ μ½λλ₯Ό μ΅λν λ¨κΈ°κ³ μ μ§νκΈ° μν΄μ μ΄ λ°©λ²μ μ ννλ€. - μ»΄ν¬λνΈ μ€μΊμ μ΄λ¦ κ·Έλλ‘ @Component μ λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ₯Ό μ€μΊν΄μ μ€νλ§ λΉμΌλ‘ λ±λ‘νλ€.
- μ»΄ν¬λνΈ μ€μΊ λμ
- @Component
- @Controller : μ€νλ§ MVC 컨νΈλ‘€λ¬λ‘ μΈμ
- @Service : νΉλ³ν μ²λ¦¬λ₯Ό νμ§ μλλ€. λ€λ§ κ°λ°μλ€μ΄ λΉμ¦λμ€ κ³μΈ΅μ μΈμνλλ° λμμ΄ λ
- @Repository : μ€νλ§ λ°μ΄ν° μ κ·Ό κ³μΈ΅μΌλ‘ μΈμνκ³ , λ°μ΄ν° κ³μΈ΅μ μμΈλ₯Ό μ€νλ§ μμΈλ‘ λ³νν΄μ€λ€.
- @Configuration : μ€νλ§ μ€μ μ λ³΄λ‘ μΈμνκ³ , μ€νλ§ λΉμ΄ μ±κΈν€μ μ μ§νλλ‘ μΆκ° μ²λ¦¬λ₯Ό νλ€.
- μ°Έκ³ : μ»΄ν¬λνΈ μ€μΊμ μ¬μ©νλ©΄ @Configurationμ΄ λΆμ μ€μ μ 보λ μλμΌλ‘ λ±λ‘λκΈ° λλ¬Έμ, AppConfig, TestConfig λ±
μμ λ§λ€μ΄λμλ μ€μ μ 보λ ν¨κ» λ±λ‘λκ³ , μ€νλμ΄ λ²λ¦°λ€.
-
- μ’
λ₯ :
- μμ±μ μ£Όμ
- μμ±μ νΈμΆμμ μ λ± 1λ²λ§ νΈμΆλλ κ²μ΄ 보μ₯λλ€.
- λΆλ³, νμ μμ‘΄κ΄κ³μ μ¬μ©
- ν΄λμ€λ§λ€ μμ±μκ° 1κ°μΌ λ @AutoWired μλ΅ κ°λ₯
- μμ μ μ£Όμ
(setter μ£Όμ
)
- μ ν, λ³κ²½ κ°λ₯μ±μ΄ μλ μμ‘΄κ΄κ³μ μ¬μ©
- μλ° Bean νλ‘νΌν° κ·μ½μ μμ μ λ©μλ λ°©μμ μ¬μ©νλ λ°©λ²
- νλ μ£Όμ
(@Autowired)
- @Autowiredλ νμ λ§€μΉμ μλνκ³ , μ΄λ μ¬λ¬ λΉμ΄ μμΌλ©΄ νλ μ΄λ¦, νλΌλ―Έν° μ΄λ¦μΌλ‘ λΉ μ΄λ¦μ μΆκ° λ§€μΉνλ€.
- λΉμ΄ 2κ° μ΄μμΌ λ
- @Qualifier
- @Qualifier λ‘λ μ°Ύμ§ λͺ»νλ©΄ μ€νλ§ λΉ μ΄λ¦μΌλ‘ μΆκ°λ‘ μ°Ύλλ€. νμ§λ§ κ²½νμ @Qualifierλ @Qualifierλ₯Ό μ°Ύλ μ©λλ‘λ§ μ¬μ©νλκ² λͺ ννκ³ μ’λ€.
- μ 리
- @Qualifier λΌλ¦¬ λ§€μΉ
- λΉ μ΄λ¦ λ§€μΉ
- 1κ³Ό 2λ μ‘΄μ¬νμ§ μμΌλ©΄ NoSuchBeanDefinitionException μμΈ λ°μ
- @Primary
- @Qualifier
- μΌλ° λ©μλ μ£Όμ
- μμ±μ μ£Όμ
- κ²°λ‘ :
- μμ±μ μ£Όμ
μ μ νν΄λΌ!
- λΆλ³
- λλΆλΆμ μμ‘΄κ΄κ³ μ£Όμ μ νλ² μΌμ΄λλ©΄ μ ν리μΌμ΄μ μ’ λ£μμ κΉμ§ μμ‘΄κ΄κ³λ₯Ό λ³κ²½ν μΌμ΄ μλ€. μ€νλ € λλΆλΆμ μμ‘΄κ΄κ³λ μ ν리μΌμ΄μ μ’ λ£ μ κΉμ§ λ³νλ©΄ μλλ€.
- μμ μ μ£Όμ μ μ¬μ©νλ©΄, setXxx λ©μλλ₯Ό publicμΌλ‘ μ΄μ΄λμ΄μΌ νλ€.
- λκ΅°κ° μ€μλ‘ λ³κ²½ν μλ μκ³ , λ³κ²½νλ©΄ μλλ λ©μλλ₯Ό μ΄μ΄λλ κ²μ μ’μ μ€κ³ λ°©λ²μ΄ μλλ€.
- μμ±μ μ£Όμ μ κ°μ²΄λ₯Ό μμ±ν λ λ± νλ²λ§ νΈμΆλλ―λ‘ μ΄νμ νΈμΆλλ μΌμ΄ μλ€. λ°λΌμ λΆλ³νκ² μ€κ³ν μ μλ€.
- final ν€μλ
- μμ±μ μ£Όμ μ μ¬μ©νλ©΄ νλμ΄ final ν€μλλ₯Ό μ¬μ©ν μ μλ€. κ·Έλμ μμ±μμμ νΉμλΌλ κ°μ΄ μ€μ λμ§ μλ μ€λ₯λ₯Ό μ»΄νμΌ μμ μ λ§μμ€λ€.
- μ 리
- μμ±μ μ£Όμ λ°©μμ μ ννλ μ΄μ λ μ¬λ¬κ°μ§κ° μμ§λ§, νλ μμν¬μ μμ‘΄νμ§ μκ³ , μμν μλ° μΈμ΄μ νΉμ§μ μ μ΄λ¦¬λ λ°©λ² μ΄κΈ°λ νλ€.
- λΆλ³
- μμ±μ μ£Όμ
μ μ νν΄λΌ!
- μ’
λ₯ :
-
-
- μ€νλ§μ λΉ μλͺ
μ£ΌκΈ° μ½λ°± μ§μ 3κ°μ§
- μΈν°νμ΄μ€(InitializingBean, DisposableBean)
- νΉμ§ : μΈν°νμ΄μ€μ ꡬνλ λ©μλ λͺ μΌλ‘λ§ κ°λ₯ [afterPropertiesSet(), destroy()]
- μ€μ μ 보μ μ΄κΈ°ν λ©μλ ,μ’
λ£ λ©μλ μ§μ
- νΉμ§ :
- λ©μλ μ΄λ¦μ μμ λ‘κ² μ€ μ μλ€.
- μ€νλ§ λΉμ΄ μ€νλ§ μ½λμ μμ‘΄νμ§ μλλ€.
- μ½λκ° μλλΌ μ€μ μ 보λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ½λλ₯Ό κ³ μΉ μ μλ μΈλΆ λΌμ΄λΈλ¬λ¦¬μλ μ΄κΈ°ν, μ’ λ£ λ©μλλ₯Ό μ μ©ν μ μλ€.
- νΉμ§ :
- @PostConstruct, @PreDestroy μ λ
Έν
μ΄μ
μ§μ
- νΉμ§ :
- μ΅μ μ€νλ§μμ κ°μ₯ κΆμ₯νλ λ°©λ²μ΄λ€.
- ν¨ν€μ§λ javax.annotation.PostConstruct νμ μ΄λ€. μ€νλ§μ μ’ μμ μΈ κΈ°μ μ΄ μλλΌ JSR-550μ΄λΌλ μλ° νμ€μ΄λ€.
- λ°λΌμ μ€νλ§μ΄ μλ λ€λ₯Έ 컨ν μ΄λμλ μλ κ°λ₯νλ€.
- μ»΄ν¬λνΈ μ€μΊκ³Ό μ μ΄μΈλ¦°λ€.
- μ μΌν λ¨μ μ μΈλΆ λΌμ΄λΈλ¬λ¦¬μλ μ μ©νμ§ λͺ»νλ€λ κ²μ΄λ€. μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄κΈ°ν, μ’ λ£ ν΄μΌνλ©΄ @Beanμ κΈ°λ₯μ μ¬μ©νμ.
- νΉμ§ :
- μ 리 :
- @PostConstruct, @PreDestroy μ λ Έν μ΄μ μ μ¬μ©νμ!
- μ½λλ₯Ό κ³ μΉ μ μλ μΈλΆλΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄κΈ°ν, μ’ λ£ ν΄μΌνλ©΄ @Beanμ initMethod, destroyMethodλ₯Ό μ¬μ©νμ
- μΈν°νμ΄μ€(InitializingBean, DisposableBean)
-
- κ°μ²΄ μμ± -> μμ‘΄κ΄κ³ μ£Όμ
- (μμ±μ μ£Όμ μ μμΈλ€. μλνλ©΄ κ°μ²΄λ₯Ό λ§λ€ λ μ΄λ―Έ μ€νλ§ λΉμ΄ κ°μ΄ λ€μ΄μμΌ νκΈ° λλ¬Έμ νλΌλ―Έν°μ μμΈμ΄λ€.)
- μ€νλ§ λΉμ κ°μ²΄λ₯Ό μμ±νκ³ , μμ‘΄κ΄κ³ μ£Όμ μ΄ λ€ λλ λ€μμμΌ νμν λ°μ΄ν°λ₯Ό μ¬μ©ν μ μλ μ€λΉκ° μλ£λλ€.
- λ°λΌμ μ΄κΈ°ν μμ μ μμ‘΄κ΄κ³ μ£Όμ μ΄ λͺ¨λ μλ£λκ³ λ λ€μμ νΈμΆν΄μΌ νλ€.
- μ€νλ§μ μμ‘΄κ΄κ³ μ£Όμ
μ΄ μλ£λλ©΄ μ€νλ§ λΉμκ² μ΄κΈ°ν μ½λ°± λ©μλλ₯Ό ν΅ν΄μ μ΄κΈ°ν μμ μ μλ €μ£Όλ λ€μν κΈ°λ₯μ μ 곡νλ€.
λν μ€νλ§μ μ€νλ§ μ»¨ν μ΄λκ° μ’ λ£λκΈ° μ§μ μ μλ©Έ μ½λ°±μ μ€λ€. λ°λΌμ μμ νκ² μ’ λ£ μμ μ μ§νν μ μλ€.
- κ°μ²΄ μμ± -> μμ‘΄κ΄κ³ μ£Όμ
- μ€νλ§ λΉμ μ΄λ²€νΈ μ¬μ΄ν΄
- μ€νλ§ μ»¨ν μ΄λ μμ± -> μ€νλ§ λΉ μμ± -> μμ‘΄κ΄κ³ μ£Όμ -> μ΄κΈ°ν μ½λ°± -> μ¬μ© -> μλ©Έμ μ½λ°± -> μ€νλ§ μ’ λ£
- μ°Έκ³ : κ°μ²΄μ μμ±κ³Ό μ΄κΈ°νλ₯Ό λΆλ¦¬νμ!
- μμ±μλ νμ μ 보(νλΌλ―Έν°)λ₯Ό λ°κ³ , λ©λͺ¨λ¦¬λ₯Ό ν λΉν΄μ κ°μ²΄λ₯Ό μμ±νλ μ±
μμ κ°μ§λ€.
λ°λ©΄μ μ΄κΈ°νλ μ΄λ κ² μμ±λ κ°λ€μ νμ©ν΄μ μΈλΆ 컀λ₯μ μ μ°κ²°νλ λ± λ¬΄κ±°μ΄ λμμ μννλ€. - λ°λΌμ μμ±μ μμμ λ¬΄κ±°μ΄ μ΄κΈ°ν μμ
μ ν¨κ» νλ κ² λ³΄λ€λ κ°μ²΄λ₯Ό μμ±νλ λΆλΆκ³Ό μ΄κΈ°ν νλ λΆλΆμ λͺ
ννκ² λλλ κ²μ΄ μ μ§λ³΄μ κ΄μ μμ μ’λ€.

- μμ±μλ νμ μ 보(νλΌλ―Έν°)λ₯Ό λ°κ³ , λ©λͺ¨λ¦¬λ₯Ό ν λΉν΄μ κ°μ²΄λ₯Ό μμ±νλ μ±
μμ κ°μ§λ€.
- μ€νλ§μ λΉ μλͺ
μ£ΌκΈ° μ½λ°± μ§μ 3κ°μ§
-
- μ€λͺ : λΉμ΄ μ‘΄μ¬ν μ μλ λ²μλ₯Ό λ»νλ€.
- μ€μ½ν μ’
λ₯ :
- μ±κΈν€ : κΈ°λ³Έ μ€μ½ν, μ€νλ§ μ»¨ν
μ΄λμ μμκ³Ό μ’
λ£κΉμ§ μ μ§λλ κ°μ₯ λμ λ²μμ μ€μ½νμ΄λ€.
- λΉ μ‘°νμ νμ κ°μ μΈμ€ν΄μ€μ μ€νλ§ λΉμ λ°ννλ€.
- νλ‘ν νμ
: μ€νλ§ μ»¨ν
μ΄λλ νλ‘ν μμ
λΉμ μμ±κ³Ό μμ‘΄κ΄κ³ μ£Όμ
κΉμ§λ§ κ΄μ¬νκ³ λλ κ΄λ¦¬νμ§ μλ λ§€μ° μ§§μ λ²μ μ€μ½νμ΄λ€.
- λΉ μ‘°νμ νμ μλ‘μ΄ μΈμ€ν΄μ€μ μ€νλ§ λΉμ λ°ννλ€.
- μ€νλ§ μ»¨ν μ΄λλ νλ‘ν νμ λΉμ μμ±νκ³ , μμ‘΄κ΄κ³ μ£Όμ , μ΄κΈ°ν κΉμ§λ§ μ²λ¦¬νκ³ ν΄λΌμ΄μΈνΈμ λ°ννλ€. νμ¬ ν΄λΌμ΄μΈνΈμμ μ’ λ£λ₯Ό μν μ @PreDestroyλ₯Ό νΈμΆν΄ μ€μΌ νλ€.
- μΉ κ΄λ ¨ μ€μ½ν :
- request : μΉ μμ²μ΄ λ€μ΄μ€κ³ λκ° λ κΉμ§ μ μ§λλ μ€μ½νμ΄λ€.
- session : μΉ μΈμ μ΄ μμ±λκ³ μ’ λ£λ λ κΉμ§ μ μ§λλ μ€μ½νμ΄λ€.
- application : μΉμ μλΈλ¦Ώ 컨ν μ€μ κ°μ λ²μλ‘ μ μ§λλ μ€μ½νμ΄λ€.
- μ±κΈν€ : κΈ°λ³Έ μ€μ½ν, μ€νλ§ μ»¨ν
μ΄λμ μμκ³Ό μ’
λ£κΉμ§ μ μ§λλ κ°μ₯ λμ λ²μμ μ€μ½νμ΄λ€.
- ********* μ±κΈν€ λΉκ³Ό νλ‘ν νμ
λΉμ λμμ μΈ μ μ£Όμμ *********
- μ²μ μ€νλ§μ΄ μ€νλ λ μ±κΈν€ νμ
κ³Ό νλ‘ν νμ
μ΄ κ°μ΄ IOCμ μμ±μ΄ λλ©΄
νλ‘ν νμ
μΌλ‘ μμ±ν λΉλ μ±κΈν€μ μνλ‘ λ³ν΄λ²λ¦°λ€
μ¦ μλ‘ μμ±λλ λΉ νμ μ΄ μλλΌ, μ€νλ§ μ€ν λ λ μ£Όμ λ μ²μ μν κ·Έλλ‘ μ μ§λλ€. - ν΄κ²° λ°©λ² :
-
- ObjectProvider (Spring μ§μ)
- ObjectProviderλ :
- μ¬μ©μκ° Beanμ μ°Ύλ λ°©μμ DL(Dependnecy Lookup) μ΄λΌκ³ νλλ° νΈνκ² λμμ£Όλ μΈν°νμ΄μ€ μ΄λ€.
- μ) ObjectProvider
- getObject() μ¬μ©
-
- Provider (JSR330 μ§μ)
- μ) Provider
- get() μ¬μ©
- Spring boot 3.0 μ΄ν : 'javax.inject.javax.inject:1'
- Spring boot 3.0 μ΄ν : 'jakarta.inject:jakarta.inject-api:2.0.1'
-
- @Lookup (Spring μ§μ)
-
- μ²μ μ€νλ§μ΄ μ€νλ λ μ±κΈν€ νμ
κ³Ό νλ‘ν νμ
μ΄ κ°μ΄ IOCμ μμ±μ΄ λλ©΄
νλ‘ν νμ
μΌλ‘ μμ±ν λΉλ μ±κΈν€μ μνλ‘ λ³ν΄λ²λ¦°λ€
- μΉ μ€μ½ν
- νΉμ§ :
- μΉ μ€μ½νλ μΉ νκ²½μμλ§ λμνλ€.
- μΉ μ€μ½νλ νλ‘ν νμ κ³Ό λ€λ₯΄κ² μ€νλ§μ΄ ν΄λΉ μ€μ½νμ μ’ λ£μμ κΉμ§ κ΄λ¦¬νλ€. λ°λΌμ μ’ λ£ λ©μλκ° νΈμΆλλ€.
- μ’
λ₯ :
- request : HTTP μμ² νλκ° λ€μ΄μ€κ³ λκ° λ κΉμ§ μ μ§λλ μ€μ½ν, κ°κ°μ HTTP μμ²λ§λ€ λ³λλ‘ λΉ μΈμ€ν΄μ€κ° μμ±λκ³ κ΄λ¦¬λλ€.
- request μ¬μ©μ ν΄λμ€λͺ
κ·Έλλ‘ DIλ₯Ό μ€ννλ©΄ requestκ° λ€μ΄μ€μ§λ μμλλ° DIλ₯Ό μμ²ν΄μ μλ¬κ° λλ€.
- ν΄κ²° λ°©λ²
-
- ObjectProvier<ν΄λμ€ λͺ >μ μ¬μ©νμ
- ObjectProviderλ₯Ό μ¬μ©νλ©΄ getObject() μ€ν μ κΉμ§ requestλ‘λ scopeκ° μ€νλμ§ μλλ€.
-
- proxy λͺ¨λλ₯Ό μ¬μ©νμ
- μ) @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
- proxy λͺ¨λλ₯Ό μ¬μ©νκ² λλ©΄ μμ‘΄κ΄κ³ μ£Όμ
μ μ€μ scopeλ‘ λ λΉμ΄ μ£Όμ
λλκ² μλ μ€νλ§ CGLIBμμ μμ±ν
κ°μ§ νλ‘μ κ°μ²΄κ° μμ±λκ² λλ€. λ§μ°¬κ°μ§λ‘ DIμμ μλ¬κ° λμ§ μμΌλ©°
μμ‘΄κ΄κ³ μ£Όμ ν λλ νλ‘μ κ°μ²΄λ‘ μμ±ν CGLIB κ°μ²΄λ₯Ό μ£Όμ νλ€. - μ€μ request μμ²μ΄ μμ λ scopeλ‘ λ±λ‘λ μ§μ§ Beanμ μ‘°ννλ€.
-
- ν΄κ²° λ°©λ²
- request μ¬μ©μ ν΄λμ€λͺ
κ·Έλλ‘ DIλ₯Ό μ€ννλ©΄ requestκ° λ€μ΄μ€μ§λ μμλλ° DIλ₯Ό μμ²ν΄μ μλ¬κ° λλ€.
- session : HTTP Sessionκ³Ό λμΌν μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ μ€μ½ν
- application : μλΈλ¦Ώ 컨ν μ€νΈμ λμΌν μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ μ€μ½ν
- websocket : μΉ μμΌκ³Ό λμΌν μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ μ€μ½ν
- request : HTTP μμ² νλκ° λ€μ΄μ€κ³ λκ° λ κΉμ§ μ μ§λλ μ€μ½ν, κ°κ°μ HTTP μμ²λ§λ€ λ³λλ‘ λΉ μΈμ€ν΄μ€κ° μμ±λκ³ κ΄λ¦¬λλ€.
- νΉμ§ :
-
-
- μ λ Έν μ΄μ μλ μμμ΄λΌλ κ°λ μ΄ μλ€. μ΄λ κ² μ¬λ¬ μ λ Έν μ΄μ μ λͺ¨μμ μ¬μ©νλ κΈ°λ₯μ μ€νλ§μ΄ μ§μν΄ μ£Όλ κΈ°λ₯μ΄λ€.
- κ·Έλ¬λ μ€νλ§μ΄ μ 곡νλ κΈ°λ₯μ λλ ·ν λͺ©μ μμ΄ λ¬΄λΆλ³νκ² μ¬μ μ νλ κ²μ μ μ§λ³΄μμ λ νΌλλ§ κ°μ€ν μ μλ€.
-
- @Configurationμ λΆμΌ λ
- μ€νλ§ CGLIBλ₯Ό μ΄μ©ν μ€νλ§ Beanμ΄ μμ±λλ€.
- @Configurationμ λΆμ΄μ§ μμ λ
- μ±κΈν€ ν¨ν΄μ΄ κΉ¨μ§λ©΄μ μμ μλ° new κ°μ²΄λ₯Ό μμ±ν κ²κ³Ό κ°λ€.
- @Configurationμ λΆμΌ λ
-
-
- κ°μ
- ν΄λμ€μ μΈμ€ν΄μ€κ° λ± 1κ°λ§ μμ±λλ κ²μ 보μ₯νλ λμμΈ ν¨ν΄μ΄λ€.
- κ·Έλμ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό 2κ° μ΄μ μμ±νμ§ λͺ»νλλ‘ λ§μμΌ νλ€.
- private μμ±μλ₯Ό μ¬μ©ν΄μ μΈλΆμμ μμλ‘ new ν€μλλ₯Ό μ¬μ©νμ§ λͺ»νλλ‘ λ§μΌμ νλ€.
- μ£Όμμ
- κ°μ²΄ μΈμ€ν΄μ€λ₯Ό νλλ§ μμ±ν΄μ 곡μ νλ μ±κΈν€ λ°©μμ μ¬λ¬ ν΄λΌμ΄μΈνΈκ° νλμ κ°μ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό 곡μ νκΈ°λλ¬Έμ
μ±κΈν€ κ°μ²΄λ μνλ₯Ό μ μ§(stateful)νκ² μ€κ³νλ©΄ μλλ€. - 무μν(stateless)λ‘ μ€κ³ν΄μΌνλ€.
- νΉμ ν΄λΌμ΄μΈνΈμ μμ‘΄μ μΈ νλκ° μμΌλ©΄ μλλ€.
- νΉμ ν΄λΌμ΄μΈνΈκ° κ°μ λ³κ²½ν μ μλ νλκ° μμΌλ©΄ μλλ€.
- κ°κΈμ μ½κΈ°λ§ κ°λ₯ν΄μΌ νλ€.
- νλ λμ μ μλ°μμ 곡μ λμ§ μλ, μ§μλ³μ, νλΌλ―Έν°, ThreadLocal λ±μ μ¬μ©ν΄μΌνλ€.
- μ€νλ§ λΉμ νλμ 곡μ κ°μ μ€μ νλ©΄ μ λ§ ν° μ₯μ κ° λ°μν μ μλ€.
- κ°μ²΄ μΈμ€ν΄μ€λ₯Ό νλλ§ μμ±ν΄μ 곡μ νλ μ±κΈν€ λ°©μμ μ¬λ¬ ν΄λΌμ΄μΈνΈκ° νλμ κ°μ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό 곡μ νκΈ°λλ¬Έμ
- μ₯λ¨μ
- μ₯μ :
- λ¨μ :
- μ±κΈν€ ν¨ν΄μ ꡬννλ μ½λ μμ²΄κ° λ§μ΄ λ€μ΄κ°λ€.
- μμ‘΄κ΄κ³μ ν΄λΌμ΄μΈνΈκ° ꡬ체νλ ν΄λμ€μ μμ‘΄νλ€. -> DIPλ₯Ό μλ°νλ€.
- ν΄λΌμ΄μΈνΈκ° ꡬ체νλ ν΄λμ€μ μμ‘΄ν΄μ OCP μμΉμ μλ°ν κ°λ₯μ±μ΄ λλ€.
- ν μ€νΈνκΈ° μ΄λ ΅λ€.
- λ΄λΆ μμ±μ λ³κ²½νκ±°λ μ΄κΈ°ν νκΈ° μ΄λ ΅λ€.
- private μμ±μλ‘ μμ ν΄λμ€λ₯Ό λ§λ€κΈ° μ΄λ ΅λ€.
- κ²°λ‘ μ μΌλ‘ μ μ°μ±μ΄ λ¨μ΄μ§λ€.
- μν°ν¨ν΄μΌλ‘ λΆλ¦¬κΈ°λ νλ€.
- κ°μ
-
-
- μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄μ¬ μ¬λ¬κ°μ λ 립λ λ¨μ, μ¦ κ°μ²΄λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²μ΄λ€. κ°κ°μ κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€.
- νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μ€νλ§ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©λλ€.
-
- μνκ³Ό ꡬνμΌλ‘ ꡬλΆνλ©΄ μΈμμ΄ λ¨μν΄μ§κ³ , μ μ°ν΄μ§λ©° λ³κ²½λ νΈλ¦¬ν΄λλ€
- μ₯μ
- ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λλ€.
- ν΄λ¦¬μ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μλλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μλλ€.
- μλ° μΈμ΄μ λ€νμ±μ νμ©
- κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λͺ νν λΆλ¦¬
- κ°μ²΄ μ€κ³μ μν (μΈν°νμ΄μ€)μ λ¨Όμ λΆμ¬νκ³ , κ·Έ μν μ μννλ ꡬν κ°μ²΄ λ§λ€κΈ°
-
- μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ν μ μλ€.
- λ€νμ±μ λ³Έμ§μ μ΄ν΄νλ €λ©΄ νλ ₯μ΄λΌλ κ°μ²΄μ¬μ΄μ κ΄κ³μμ μμν΄μΌν¨
- ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μλ€.
-
-
- ν΄λΌμ΄μΈνΈ κ°μ²΄λ μ§μ ꡬν κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ²°νκ³ , μ€ννλ λ€μν μ± μμ κ°μ§κ³ μμ
- SRP λ¨μ΅μ± μ μμΉμ λ°λ₯΄λ©΄μ κ΄μ¬μ¬λ₯Ό λΆλ¦¬ν¨
- ꡬν κ°μ²΄λ₯Ό μμ±νκ³ μ°κ²°νλ μ± μμ AppConfigκ° λ΄λΉ
- ν΄λΌμ΄μΈνΈ κ°μ²΄λ μ€ννλ μ± μλ§ λ΄λΉ
-
- μΆμνμ μμ‘΄ νλ ꡬ체νμ μμ‘°νλ©΄ μλλ€.
-
- μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ €μμΌλ λ³κ²½μλ λ«ν μμ΄μΌ νλ€.
- λ€νμ± μ¬μ©νκ³ ν΄λΌμ΄μΈνΈκ° DIPλ₯Ό μ§ν΄
- μ ν리μΌμ΄μ μ μ¬μ© μμκ³Ό κ΅¬μ± μμμΌλ‘ λλ
-
-
- μ ν리μΌμ΄μ μ μ 체 λμ λ°©μμ ꡬμ±(config) νκΈ° μν΄, ꡬν κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ²°νλ μ± μμ κ°λλ λ³λμ μ€μ ν΄λμ€
- κ°μ²΄μ μμ±κ³Ό μ°κ²°μ AppConfigκ° λ΄λΉνλ€.
-

