π[Spring] Spring 컨ν μ΄λ.
Spring 컨ν μ΄λλ Spring Frameworkμ ν΅μ¬ κ΅¬μ± μμλ‘, μ ν리μΌμ΄μ μ λΉ(Bean) μ μμ±νκ³ κ΄λ¦¬νλ IoC(Inversion Of Control) 컨ν μ΄λλ₯Ό μλ―Έν©λλ€.
Spring 컨ν μ΄λλ μ ν리μΌμ΄μ μ΄ λμνλ λμ κ°μ²΄(Bean, λΉ)μ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬νλ©°, μμ‘΄μ± μ£Όμ (Dependency Injection, DI) μ ν΅ν΄ κ°μ²΄ κ°μ μμ‘΄μ±μ μλμΌλ‘ μ²λ¦¬ν©λλ€.
1οΈβ£ Spring 컨ν μ΄λμ μ£Όμ μν .
1. λΉ μμ± λ° κ΄λ¦¬
- Spring 컨ν μ΄λλ μ ν리μΌμ΄μ λ΄μμ νμν λΉμ μμ±νκ³ κ·Έ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬ν©λλ€.
- λΉμ μμ±, μ΄κΈ°ν, μμ‘΄μ± μ£Όμ , μλ©Έμ λͺ¨λ κ³Όμ μ 컨ν μ΄λκ° μ μ΄ν©λλ€.
2. μμ‘΄μ± μ£Όμ (Dependency Injection)
- 컨ν μ΄λλ λΉ κ°μ μμ‘΄μ±μ λΆμνκ³ , νμν κ²½μ° μμ‘΄μ±μ μλμΌλ‘ μ£Όμ ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ κ°λ°μλ κ°μ²΄λ₯Ό μ§μ μμ±νκ±°λ μ°κ²°ν νμ μμ΄, νμν κ°μ²΄λ₯Ό 컨ν μ΄λκ° μ£Όμ ν΄μ€λλ€.
3. λΉ μ€μ λ° κ΅¬μ±.
- Spring 컨ν μ΄λλ XML νμΌ, μλ° μ€μ ν΄λμ€, μ΄λ Έν μ΄μ λ±μ ν΅ν΄ μ€μ λ λΉμ ꡬμ±μ κ΄λ¦¬ν©λλ€.
- μ€μ νμΌμ΄λ μ΄λ Έν μ΄μ μ ν΅ν΄ κ° λΉμ΄ μ΄λ€ λ€λ₯Έ λΉμ νμλ‘ νλμ§ μ μν μ μμ΅λλ€.
4. λΉμ μλͺ μ£ΌκΈ° κ΄λ¦¬.
- 컨ν μ΄λλ λΉμ μλͺ μ£ΌκΈ°(μμ±, μ΄κΈ°ν, μ¬μ©, μλ©Έ)λ₯Ό μ μ΄ν©λλ€.
- μλ₯Ό λ€μ΄, μ ν리μΌμ΄μ μ΄ μμλ λ 컨ν μ΄λλ νμν λΉμ μμ±νκ³ , μ’ λ£λ λ λΉμ μμμ ν΄μ νλ λ±μ μν μ μνν©λλ€.
5. μ€μ½ν κ΄λ¦¬.
- Spring 컨ν μ΄λλ λΉμ μ€μ½νλ₯Ό κ΄λ¦¬ν©λλ€.
- μ±κΈμ½ μ€μ½ν(μ ν리μΌμ΄μ μ 체μμ νλμ μΈμ€ν΄μ€λ§ μ‘΄μ¬) λλ νλ‘ν νμ μ€μ½ν(μμ²λ§λ€ μλ‘μ΄ μΈμ€ν΄μ€ μμ±)λ±μ λ€μν μ€μ½νλ₯Ό μ§μν©λλ€.
2οΈβ£ Spring 컨ν μ΄λμ μ ν.
Spring 컨ν μ΄λλ λ€μν μ νμ΄ μμΌλ©°, μ΄λ€μ λͺ¨λ κΈ°λ³Έμ μΌλ‘ λμΌν IoC κΈ°λ₯μ μ 곡νμ§λ§, μ¬μ© λͺ©μ μ΄λ ꡬμ±μ΄ λ€λ₯Ό μ μμ΅λλ€.
1. BeanFactory
- Springμ κ°μ₯ κΈ°λ³Έμ μΈ IoC 컨ν μ΄λμ λλ€
- μ§μ° λ‘λ©(lazy loading) μ μ¬μ©νμ¬ λΉμ΄ μ€μ λ‘ νμν λκΉμ§ μμ±νμ§ μμ΅λλ€.
- μ΄ λ°©μμ 리μμ€κ° μ νλ νκ²½μμ μ μ©νμ§λ§, 볡μ‘ν ν΄ν리μΌμ΄μ μμλ κ±°μ μ¬μ©λμ§ μμ΅λλ€.
2. ApplicationContext
- Spring 컨ν μ΄λμ λ³΄λ€ νμ₯λ ννλ‘, μ¦μ λ‘λ©(eager loading) λ°©μμ μ¬μ©ν΄ μ ν리μΌμ΄μ μμμ λΉμ 미리 μμ±ν©λλ€.
-
ApplicationContext
λBeanFactory
μ λͺ¨λ κΈ°λ₯μ ν¬ν¨νμ¬, μΆκ°μ μΈ κΈ°λ₯μ μ 곡ν©λλ€. - μ΄ μ»¨ν μ΄λλ λλΆλΆμ Spring μ ν리μΌμ΄μ μμ μ¬μ©λ©λλ€.
μ£Όμ ꡬν체.
-
ClassPathXmlApplicationContext
: XML μ€μ νμΌμ μ¬μ©ν΄ μ ν리μΌμ΄μ 컨ν μ€νΈλ₯Ό ꡬμ±ν©λλ€. -
AnnotationConfigApplicationContext
: μλ° κΈ°λ° μ€μ μ μ¬μ©ν΄ μ ν리μΌμ΄μ 컨ν μ€νΈλ₯Ό ꡬμ±ν©λλ€. -
WebApplicationContext
: Spring MVC μ ν리μΌμ΄μ μμ μ¬μ©λλ 컨ν μ΄λλ‘, μΉ νκ²½μ λ§λ κΈ°λ₯μ μ 곡ν©λλ€.
3οΈβ£ Spring 컨ν μ΄λμ λμ κ³Όμ .
1. λΉ μ μ λ° λ±λ‘
- μ ν리μΌμ΄μ μμ μ¬μ©ν λΉμ μ€μ νμΌ(XML, μλ° ν΄λμ€) λλ μ΄λ Έν μ΄μ μ ν΅ν΄ μ μν©λλ€.
- μ΄ λΉ μ μλ Spring 컨ν μ΄λκ° κ΄λ¦¬ν κ°μ²΄μ μ²μ¬μ§ μν μ ν©λλ€.
2. 컨ν μ΄λ μ΄κΈ°ν
- μ ν리μΌμ΄μ μ΄ μμλ λ Spring 컨ν μ΄λκ° μ΄κΈ°νλλ©°, λΉμ μμ±νκ³ μμ‘΄μ±μ μ£Όμ ν©λλ€.
- μ΄λ 컨ν μ΄λλ μ€μ μ λ°λΌ λΉμ μμ±νκ³ λΉ μ¬μ΄μ μμ‘΄ κ΄κ³λ₯Ό μ€μ ν©λλ€.
3. λΉ μμ² λ° μ¬μ©
- μ ν리μΌμ΄μ μμ λΉμ΄ νμν λ, 컨ν μ΄λμμ λΉμ μμ²ν©λλ€.
- 컨ν μ΄λλ μμ²λ λΉμ λ°ννλ©°, μ΄ λΉμ μ ν리μΌμ΄μ λ΄μμ μ¬μ©λ©λλ€.
4. λΉ μλ©Έ
- μ ν리μΌμ΄μ μ΄ μ’ λ£λκ±°λ λΉμ΄ λ μ΄μ νμνμ§ μμΌλ©΄, 컨ν μ΄λλ λΉμ μλ©Έ λ©μλλ₯Ό νΈμΆνμ¬ λΉμ μ μ ν μ 리ν©λλ€.
4οΈβ£ Spring 컨ν μ΄λμ μμ
1. XML μ€μ κΈ°λ° μ»¨ν μ΄λ
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.example.UserService">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.UserRepository"/>
</beans>
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = context.getBean(UserService.class);
2. μλ° μ€μ κΈ°λ° μ»¨ν μ΄λ
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
3. μ΄λ Έν μ΄μ κΈ°λ° μ€μ
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@ComponentScan(basePackages = "com.example")
@Configuration
public class AppConfig {}
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
5οΈβ£ κ²°λ‘
Spring 컨ν
μ΄λλ Spring μ ν리μΌμ΄μ
μμ κ°μ²΄(λΉ)μ μμ±, κ΄λ¦¬, μμ‘΄μ± μ£Όμ
λ±μ μλμΌλ‘ μ²λ¦¬νλ ν΅μ¬ μΈνλΌμ
λλ€.
μ΄λ₯Ό ν΅ν΄ κ°λ°μλ κ°μ²΄ μμ± λ° κ΄λ¦¬μ 볡μ‘μ±μ μ€μ΄κ³ , μ½λμ λͺ¨λνμ μ μ°μ±μ λμΌ μ μμ΅λλ€.
λ€μν μ€μ λ°©μ(XML, μλ° μ€μ , μ΄λ
Έν
μ΄μ
λ±)μ ν΅ν΄ κ°λ°μλ 컨ν
μ΄λμ λΉμ μ½κ² ꡬμ±νκ³ κ΄λ¦¬ν μ μμ΅λλ€.