[Web] SpringFramework의 특성

Container
인스턴스의 생명주기를 관리한다
생성된 인스턴스에게 추가적 기능을 제공한다.

예를 들어 Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 한다.
WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행한다.
개발자는 서블릿 클래스를 작성했지만 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet컨테이너이다.
Servlet 컨테이너는 동일한 서블릿에 해당하는 요청을 받으면 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에 전달한다.

IoC : Inversion of Control
개발자는 프로그램의 흐름을 제어하는 코드를 작성한다. 그런데 이 흐름의 제어를 개발자가아니라 다른 프로그램이 제어하는 것을 IoC라고 말한다.
예를 들어 TV가 있고 TV를 제어할 수 있는 리모컨이 있다고 하자. 잘 사용하다가 TV가 고장나버려서 다른 제조사의 새로운 TV를 주문했는데 리모컨의 기능이 너무 차이가 난다면? 사용자의 입장에서 정말 불편할 것이다. 그래서 우리가 사용하는 리모컨들은 서로 다른 TV를 사용해도 그 기능이 모두 비슷하다. TV는 모두 다르지만 내부적으로 컨트롤하는데 사용되는 메서드는 모두 같기 때문에 리모컨이 가져야 할 기본적인 기능들은 통일 시켜놓았기 때문이다. 통일 시켜놓은 기본 tv 클래스를 사용하기 위해 tv공장을 만들어야 하는데 그 공장의 생성을 스프링프레임워크가 만들어준다고 이해하면 된다.
즉 프로그램이 개발자에게 틀을 강요해서 그 형식으로 만들게 하는 것이다.

DI : Dependency Injection
의존성 주입. 클래스 사이의 의존 관계를 bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.
약속된 annotation만 사용하면 스프링프레임워크가 인스턴스를 할당해준다. 따라서 개발자가 직접 new 를 사용하여 인스턴스를 생성할 필요가 없다.
강요하는 내용들이다. 예를 들면 박스를 만들 때 높이는 4m, 너비는 10m로 해라 와 같은 것들.

개발자가 직접 선언하는 경우



class 엔진 {
 
}
 
class 자동차 {
     엔진 v5 = new 엔진();
}class 엔진 {
 
}
 
class 자동차 {
     엔진 v5 = new 엔진();
}
cs

Spring에서 DI가 적용된 경우



@Component
class 엔진 {
 
}
 
@Component
class 자동차 {
     @Autowired
     엔진 v5;
}
cs

[new 가 사용되지 않음을 볼 수 있다]

Spring에서 제공하는 IoC/DI 컨테이너
BeanFactory : IoC/DI에 대한 기본 기능을 가지고 있다.
Application Context : beanFactory가 가지고 있는 기능을 다 가지고 있고 일반적으로 beanfactory 보다 추천된다. 트랜잭션처리 ,AOP등에 대한 처리도 가능하다. BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고, 국제화 처리, 어플리케이션 이벤트 등을 처리할 수 있다.



참고 : http://www.nextree.co.kr/p11247/

No comments:

Powered by Blogger.