봉봉의 개인 블로그
Spring 과 EJB 본문
ⓐ Spring Framework
-spring 은 경량 컨테이너이다. spring은 java 객체를 담고있는 컨테이너 이다. spring은 이들 java 객체의 생성, 소멸과 같은 라이프사이클을 관리하며, 스프링으로부터 필요한 객체를 가져와 사용할 필요가 없다.
-spring 은 DI(Dependency Injection) 패턴을 지원한다. spring은 설정파일을 통해서 객체 간의 의존관계를 설정할수 있도록 하고 있다. 따라서 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없다.
-spring 은 AOP(Aspect Oriented Programming)를 지원한다. spring은 자제적으로 AOP를 지원하고 있기 때문에 트랜잭션이나 로깅,보안과 같은 여러 모듈에서 공통으로 필요로 하지만 실제 모듈의 핵심은 아닌 기능들을 분리해서 각 모듈에 적용할 수 있습니다.
-spring 은 POJO(Plain Old Java Object)를 지원한다. spring 컨테이너에 저장되는 java 객체는 특정한 interface를 구현하거나 class를 상속받지 않아도 된다. 따라서 기존에 작성한 코드를 수정할 필요 없이 spring에서 사용할 수 있다.
-트랜잭션 처리를 위한 일련의 방법을 제공한다. JDBC를 사용하든,JTA를 사용하든, 또는 컨테이너가 제공하는 트랜잭션을 사용하든,설정파일을 통해 트랜잭션 관련 정보를 입력하기 때문에 트랜잭션 구현에 상관없이 동일한 코드를 여러 환경에서 사용 할 수 있다.
-영속성과 관련된 다영한 API를 지원한다. spring 은 JMS, 메일, 스케줄링 등 엔터프라이즈 어플리케이션을 개발하는데 필요한 다양한 API를 설정 파일을 통해서 손쉽게 사용할 수 있도록 하고 있다.
ⓑIoC(Inversion of Control)
Spring Framework 가 가지는 가장 핵심적인 기능은 IoC이다. java가 등장한 최초에는 객체 생성 및 의존관계에 대한 모든 제어권이 개발자에게 있었다.그러나,servlet,EJB가 등장하면서 제어권이 servlet과 EJB를 관리하는 servlet컨테이너 및 EJB컨테이너에게 넘어가게 되었다. Spring프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다. 이와 같은 이유 때문에 Spring Framework를 Spring컨테이너,IoC컨테이너와 같은 용어로 부르기도 한다.
*물론 모든 객체에 대한 제어권을 컨테이너에게 넘겨버린 것은 아니다. servlet 컨테이너와 EJB컨테이너에서도 servlet과 EJB에 대한 제어권만 컨테이너가 담당하고 나머지 객체에 대한 제어권은 개발자들이 직접 담당하고있다.이처럼 spring 컨테이너도 일부 POJO(Plain Old Java Object)에 대한 제어권을 가진다. spirng 컨테이너에서 관리되는 POJO는 각 계층의 interface를 담당하는 class 들에 대한 제어권을 가지는 것이 대부분이다.
ⓒDI(Dependency Injecttion)
DI는 Spring Framework 에서 지원하는 IoC의 한 형태이다. DI를 간단히 말하면, 객체 사이의 의존 관계를 객체 자신이 아닌 외부의 조립기(assembler)가 수행한다는 개념이다. 일반적인 웹어플리케이션의 경우 클라이언트의 요청을 받아주는 controller 객체 , 비지니스 로직을 수행하는 service 객체, 데이터에 접근을 수행하는 DAO 객체 등으로 구성된다.
ⓓAOP(Aspect Oriented Programming)
로깅,트랜잭션처리,보안과 같은 핵심 로직이 아닌 cross-cutting concern(공통관심사항)을 객체 지향 기법(상속이나 패턴등)을 사용해서 여러 모듈에 효과적으로 적용하는데 한계가 있었으며, 이런 하계를 극복하기 위해 AOP라는 기법이 소개되었다. 공통관심사항을 별도의 모듈로 구현한뒤, 각 기능을 필요로 하는 곳에서 사용하게 될 경우, 각 모듈과 공통 모듈 사이의 의존관계는 복잡한 의존 관계를 맺게 된다. AOP에서는 각 class에서 공통 관심 사항을 구현한 모듈에 대한 의존관계를 갖기 보다는 , aspect를 이용하여 핵심 로직을 구현한 각 class 에 공통 기능을 적용하게 된다. AOP에서는 핵심 로직을 구현한 class 를 실행하기 전후에 aspect를 적용하고, 그 결과로 핵심 로직을 수행하면 그에 앞서 공통 모듈을 실행하거나 또는 로직 수행 이유에 공통 모듈을 수행하는 방식으로 공통 모듈을 적용하게 된다. AOP에서 중요한 점은 aspect가 핵심 로직 구현 class에 의존하지 않는다는 점이다. AOP에서는 설정 파일이나 설정 class등을 이용하여 aspect를 여러 class에 적용할수 있도록 하고 있다.
ⓔSpring Framework 장점
1.다양한 형태의 Transaction을 선언적으로 사용
2.Remote EJB 사용의 간편성
3.다양한 Framework과의 통합
4.AOP를 보다 쉽게 적용
5.Covention over configuration 의 결합으로 설정의 최소화
6.Unit Test 지원
7.설정 관리의 단일화
8.Object Pool을 기본적으로 가지고 잇어서 Object 생성 제거의 Overhead 최소화
9.분산 시스템 구성시 비용 최소화
10.Enterprise Application 개발을 위한 Full Stack 지원
ⓕSpring Framework 단점
1.개발자 거부감
-Spring Framework에 대한 막연한 거리감
->IoC,AOP 등 새로운 개념에 대해 모두 잘 알아야 할거라는 부담감을 가지고있음
-설정 파일 다루기와 Object 재사용에 관한 이해 부족
-Spring Framework의 장점을 살릴수 있는 도구 제공이 미흡
2.Spring Framework 도입으로 인한 추가 작업
-설정 파일 관리
->서비스간의 연결을 담당하는 XML 관리가 필요 다만, Convention over Configuration 활용과 generator등을 통해 작업 최소화가 가능
->Spring IDE 등의 플러그인을 통해 설정파일에 대한 통합 관리가 가능
-interface생성
->각 Layer간 연결이 interface 를 통해 이루어지기 때문에 interface 생성이 필요
*Overhead 작업으로 볼수도 있지만, Layer 간 loosed coupling 을 위해서는 Spring Framework을 사용하지 않을 경우에도 필요
*tmall의 경우도 Spring Framework를 사용하지 않지만 interface기반임
ⓖEJB 개발의 특징과 필요성
-동시접속자수가 10,000이상 이상인 사이트 구축시 사용하는 콤포넌트 기술입니다.
-동시접속자수가 많은 가운데 안정적인 트랜잭션이 필요한 사이트 구축시 사용합니다.
-접속자수가 많은 공공기관,기상청,병무청,금융,보험,포털사이트,게임사이트,기업등에서 집중적으로 사용
-EJB시스템은 속도는 느리지만 개발시에 개발자에게 많은 자동화된 기능을 제공해 분산 시스템구축을 쉽게 해준다.
-EJB는 JSP,Beans를 사용한 시스템보다 속도는 느리지만 안정적인 분산 시스템을 제공한다.
-기초기술(JSP,BEANS,RMI,Servlet,Serialization 직렬화,Transactioin,Connection Pooling)을 알면 EJB는 배우기 쉽고 사용하기 쉽다.
-EJB규약을 집중적으로 습득하면 쉽게 EJB콤포넌트를 개발할 수 있다.
ⓗEJB개발을 위한 프로그래밍 방법 및 장점
(EJB 컨테이너(Weblogic)로 부터 아래의 항목을 자동으로 지원 받을 수 있음으로 어플리케이션을 신속히 구축할 수 있다.)
-인스턴스 풀링:객체를 미리 생성하여 메모리에 저장하여 사용준비 상태에 들어가도록 함, 많은 동시 접속자에 대한 안정성 지원
-트랜잭션 처리:자동으로 컨테이너가 모든 처리 메소드에 대하여 트랜잭션을 처리해줌, 안정적인 데이터 조작
-퍼시스턴스 관리:빈즈의 상태를 메모리에서 사용여부에 따라 자동으로 활성화/비활성화를 실행해 관리해줌
-FAT Client를 Thin Client로, n-tier 시스템을 구축할 수 있다.
-Weblogic, Webspere 주로 사용, 국산은 제우스 사용
-EJB컴포넌트들이 Loading 되어 활동하는 서버 쪽 프로그램, 컴포넌트의 생성, 소멸, 라이프사이클, 보안, Threading 등의 서비스를 제공
ⓘEJB단점
-복잡한 프로그래밍 모델
-특정 환경에 쉽게 종속적인 코드
-필요없이 특정 기술에 종속적인 코드
-컨테이너에 안에서만 동작할 수 있는 객체 구조
-자동화된 테스트가 매우 어렵거나 불가능
-객체 지향적이지 않음
-형편없는 개발 생산성
-한심한 이동성(Portablity)
ⓙEJB 컨테이너가 제공하는 것들
1.트랜잭션 관리
2.인증과 접근 제어
3.EJB인스턴스 풀링
4.세션관리
5.지속성 메커니즘
6.데이터베이스 커넥션 풀링
*EJB에 비해 Spring을 java 기술 요건으로 요구하는 건수가 급격하게 증가 추세
*EJB와 Spring은 상호 배타적인 기술이 아니며 두 기술을 동시에 요구하는 경우도 증가세
-EJB사용하여 개발하게 되면 기술 구조 변경 시, 서버 환경에 종속됨
-현재 POJO중심의 개발방식을 기술적으로 지원하며 특정 컴포넌트 모델에 종속적이지 않게 개발하는 것이 추세임
-구조적인 유연성이 중시되면서 많은 회사들이 Light-weight Platform 을 선호함
POJO(Plain Old java Object)란?
POJO를 해석하면 평범 자바 오브젝트라고 한다.
POJO를 이해 하기 전 POJO 라는 단어가 만들어진 역사적 배경을 살펴볼 필요가 있다. POJO는 마틴 파울러가 2000년 가을에 열렸던 어느 컨퍼런스의 발표를 준비하면서 처음 만들어낸 말이다. 마친파울러는 EJB보다 단순한 java Object에 도메인 로직을 넣어 사용하는 것이 여러가지 장점이 있는데도 왜 사람들이 그 EJB가 아닌 '평범한 자바 오브젝트'를 사용하기에 꺼려 하는지에 대해 의문을 가졌다. 그리고 그는 단순한 오브젝트에는 EJB와 같은 그럴듯한 이름이 없어서 그 사용을 주저하는 것이라고 결론을 내렸다. 그래서 만든 단어가 POJO라는 용어인 것이다. POJO기반의 기술을 사용한다고 말하면 왠지 첨단 기술을 사용하는 앞선 개발자인 듯한 인상을 주기 때문이다.
POJO기반의 프로그래밍 기술이 EJB의 강력한 대안으로 등장했고 , POJO 기반 프레임 워크 , POJO애플리케이션을 위한 플랫폼 등이 점점 인기를 끌게 되었고, 결국 POJO가 배제하려고 했던 EJB는 POJO기반의 기술에 밀려 이제 레거시 기술로 사라질 위기에 처했다. 그렇다면 단지 EJB를 사용하지 않으면 모두 POJO라고 할 수 있을까 ? 그렇지 않다.POJO프로그래밍이라는 개념은 단지 "EJB가 아닌 자바"이상의 특징을 가지고 있는 프로그래밍 모델이다. POJO기반의 개발은 생각보다 단순하지 않다.
POJO를 좀더 이해하려면 EJB의 장단점을 함께 이해해야 한다. 그것은 POJO프로그래밍이 다시 EJB시대 이전으로 돌아 가자는 것이 아니고 , EJB를 넘어 그보다 더 앞으로 나아가자는 것이기 때문이다.
EJB를 사용하지 말고 POJO를 쓰자는 것은 EJB이전의 방식으로 돌아가는 것을 의미한다면 또 다른 문제가 발생 할 수 밖에 없다. 여전히 복잡한 로우레벨의 API를 이용해 코드를 작성해야 하고 , 많은 기술적인 문제를 애플리케이션 코드에 그대로 노출시켜 개발해야 한다면 기껏 POJO로의 복귀 덕분에 얻는 많은 장점들을 놓칠 수 밖에 없다.
그래서 등장한 것이 POJO기반의 Framework이다. POJO Framework는 POJO를 이용한 애플리케이션 개발이 가진 특징과 장점을 그대로 살리면서 EJB에서 제공하는 엔터프라이즈 service와 기술을 그대로 사용할 수 있도록 도와주는 Framework이다. 나아가 이는 기존의 EJB에서보다 훨씬 더 세련되고 나은 방법이다. 대표적인 Framework Spring 하이버네이트
참고로 Spring은 엔터프라이즈 service들을 POJO 기반으로 만든 비지니스 Object에서 사용할 수 있게 한다. 대표적인 선언적인트랜잭션 service 보안이다. 또한 EJB와 마찬가지로 Object 컨테이너를 제공해서 인스턴스의 라이프사이클을 과리하고 필요에 따라 스레딩,풀링 및 service 인젝션 등의 기능을 제공한다. 또한 OOP를 더 OOP답게 사용 할 수 있게 하는 AOP기술을 적용해서 POJO개발을 더 쉽게 만든다 .
POJO프로그램의 진정한 가치는 자바의 객체지향적인 특징을 살려 비지니스 로직에 충실한 개발이 가능 하도록 하는 것이기도 하다.
'관련 지식' 카테고리의 다른 글
Java의 추상,캡슐,상속,다형 (0) | 2017.07.31 |
---|---|
특정 로직에 대해서 성능 확인(속도체크) - stopwatch (0) | 2017.07.25 |
JQuery 메서드정리 (0) | 2017.06.30 |
mybatis란 (0) | 2017.06.30 |
Listener 와 Filter (0) | 2017.06.29 |