2010. 8. 15. 15:49ㆍplming/Java - Spring
Lightweight는 EJB 컨테이너와 비교하여 가벼운 컨테이너라는 것
컨테이너 기능을 가진다는 것은, 트랜잭션 처리, Security, 빈의 생명주기관리와 같은 컨테이너를 통해서 지원할 수 있는 기능들을 지원하는 것이 가능하다는 것
각 계층에서 사용하고 있는 기술들에 있어서 Non EJB 아키텍처와 별반 다르지 않다.
다른 부분은 계층별 인터페이스를 담당하는 POJO 빈들을 유기적으로 관리해주는 컨테이너를 가지고 있다는 것
POJO에 대한 컨테이너 기능을 지원하는 대표적인 프레임워크가 Spring 프레임워크
Spring 프레임워크는 POJO에 대한 컨테이너적인 역할을 할 뿐만 아니라 각 계층의 의존관계를 유기적으로 연결하고 관리하는 기능을 지원한다. 이는 Non EJB 아키텍처가 가지고 있는 장점과 EJB 아키텍처가 가지고 있는 장점을 모두 수용하는 것이 가능하게 한다.
import net.javajigi.user.dao.UserDAO; public class SpringUserService implements UserService { private UserDAO userDAO = null; public void setUserDAO(UserDAO newUserDAO) { public int addUser(User user) throws ExistedUserException { public int updateUser(User user) { public User findUser(String userId) throws UserNotFoundException { |
UserService에서는 DAO인스턴스가 이미 존재하는 것처럼 사용
(new DAO(); 코드가 존재하지 않는다)
Spring 프레임워크가 가지고 있는 POJO 빈의 생성,소멸,의존관계까지 관리해 줄 수 있는 기능으로 이해 이와같이 개발하는 것이 가능하다.
Spring 프레임워크는 Properties 파일이나 XML 파일을 이용하여 POJO 빈에 대한 정보를 관리한다.
applicationContext.xml <beans> <bean id="userService" |
web.xml <context-param> <listener> |
이렇게 생성된 POJO 빈은 Spring 프레임워크 WebApplicationContext에 의해서 관리되며,
이 WebApplicationContext는 웹 애플리케이션과 생명주기를 같이 하고 있는 ServletContext에 저정되어 관리된다.
import net.javajigi.user.service.UserService; import org.springframework.web.context.WebApplicationContext; WebApplicationContext wac = return (UserService) wac.getBean("userService"); |
- 장점
1. EJB에 비해 배우기 쉬우며, 빈을 설정하는 방법도 쉽다.
2. 서블릿 컨테이너에서 실행하는 것이 가능하므로 이식성(Portability)이 뛰어나다.
3. 특정 인터페이스에 종속되지 않은 POJO를 기반으로 하기 때문에 테스트가 용이하다.
4. AOP(Aspect Oriented Programming)의 지원으로 EJB 컨테이너에서 지원 가능했던 컨테이너 기능들을 지원하는 것이 가능하다.
5. OOP(Object Oriented Programming) 형태로 개발하는데 제약사항이 없다.
- 단점
1. 분산 환경을 지원하지 못한다. 하지만, 웹 서비스등으로 극복할 수 있다.
2. 아직까지 Lightweight 컨테이너에 대한 표준이 없다.
3. 대부분의 개발자들이 Non EJB 아키텍처와 EJB 아키텍처에 친숙한 상태이다.
Lightweight 컨테이너 아키텍처를 새로 배워야 한다는 부담이 있다.
컨테이너에 배포하지 않은 상태에서도 테스트가 가능
각 계층 사이의 의존관계를 줄이기 위하여 Factory 클래스와 Singleton 패턴을 사용하지 않아도 같은 효과를 얻을 수 있다.
모든 POJO는 디폴트로 Singleton처럼 관리된다.
Spring 프레임워크는 EJB 컨테이너가 가지고 있던 기능들을 모두 포함하면서도 다양한 프레임워크들의 GLUE(연결체) 역할을 하고 있다. 또한, 수없이 많은 J2EE API들에 대한 추상 API를 제공함으로써 J2EE API를 더 쉽게 사용하는 것이 가능하도록 지원하고 있다.
[출처] Spring 프레임워크 워크북
'plming > Java - Spring' 카테고리의 다른 글
Spring IoC (Inversion of Control) (0) | 2010.08.15 |
---|---|
Spring Framework 설치 및 개발 환경 (0) | 2010.08.15 |
EJB 아키텍처 (0) | 2010.08.15 |
Non EJB 아키텍처 (0) | 2010.08.15 |
DataSource Lookup (0) | 2010.08.15 |