본문 바로가기

DEV/Spring

EJB(Enterprise Java Beans)

 

EJB(Enterprise JavaBeans)를 설명하기에 앞서, 

먼저 JavaBeans라는 것이 무엇인지 간단하게 짚고 넘어가보도록 하자.

 

 

 

JavaBeans(자바빈즈)

위키백과에 따르면 JavaBeans는 Java로 작성된 소프트웨어 컴포넌트 라고 정의된다.

이러한 JavaBeans는 단순히 Java 언어로 작성된 클래스를 의미하는 것이 아니라

아래의 관례에 따라 만들어진 클래스를 의미한다.

 

- 클래스는 직렬화 되어야 한다.

- 클래스는 기본 생성자를 가지고 있어야 한다.

- 클래스의 속성들은 get set 혹은 표준 명명법을 따르는 메서드를 사용해 접근할 수 있어야 한다.

- 클래스는 필요한 이벤트 처리 메서드를 포함하고 있어야 한다.

 

 

 

EJB의 등장

기업의 IT 시스템 규모가 점점 커지고 복잡성 또한 증가하면서

많은 사용자들의 요구를 빠르고 안정적이게 처리하기 위한

다양한 기술(트랜잭션, 멀티 쓰레딩, 리소스 풀링, 보안 등)이 요구되기 시작했다.

 

하지만, 애플리케이션 개발자가 비즈니스 로직 뿐만 아니라

위에 언급한 기술들을 모두 고려하여 개발하기는 쉽지 않다.

 

이러한 점을 해결하기 위해 등장한 기술이 바로 EJB 이다.

EJB는 구조가 복잡한 대규모 시스템의 분산 객체 환경을 쉽게 구현하기 위해 등장했다.

 

 

 

EJB의 특징

EJB의 등장 이후 1.0의 스펙이 제시한 EJB의 비전은

'EJB는 애플리케이션 개발을 쉽게 만들어 준다.

애플리케이션 개발자는 로우 레벨의 기술들에 관심을 가질 필요도 없다' 였다.

즉, 도메인과 비즈니스 로직에만 집중하면 된다는 것이었다.

 

EJB는 독립적으로 개발한 컴포넌트들을 서버에 자유롭게 배포하고 서로 연동해 사용하게 하는

컴포넌트 기반의 개발 모델을 제시한다.

 

 

이러한 EJB의 대표적인 특징은 아래와 같다.

 

 

1. 인스턴스 풀링

- 객체를 미리 생성하고 메모리에 저장하여 사용 준비 상태에 들어가도록 한다.

- 많은 동시 접속자에 대한 안정성을 지원한다.

 

2. 트랜잭션 처리

- 컨테이너가 자동으로 모든 메소드에 대해 트랜잭션 처리를 한다.

- 안정적인 데이터 조작이 가능하다.

 

3. 퍼시스턴스 관리

- 빈즈의 상태를 메모리에서 사용여부에 따라 자동으로 활성화/비활성화를 관리해준다.

 

4. Fat Client를 Thin Client로 n-Tier 시스템을 구축할 수 있다.

 

5. 컴포넌트 생성 및 소멸, 보안, Threading 등의 서비스를 제공해준다.

 

 

 

EJB의 종류

1. Session Bean

- DB 연동이 필요 없음

 

2. Entity Bean

- 데이터베이스의 데이터를 관리하는 객체

- Select, Insert, Update, Delete

- DB 관련 쿼리는 자동으로 만들어지고 개발자는 고급 업무 처리에 집중할 수 있음

- DB가 수정되면 코드 수정 없이 다시 배포

 

3. Message-driven Bean

- JMS로 빈을 날려줌

 

 

EJB의 한계

EJB에서는 현실에서 1% 미만의 애플리케이션에서만 필요한 분산 트랜잭션을 위해

나머지 99%의 애플리케이션도 무거운 JTA 기반의 글로벌 트랜잭션 관리 기능을 사용해야 했다.

 

게다가, EJB의 혜택을 얻기 위해 모든 기능이 다 필요하지도 않은 고가의 WAS를 구입해야 했고,

고급 IDE의 도움 없이는 손쉽게 다룰 수 없는 복잡한 설정 파일 속에서 허우적대야 했다.

 

또한, EJB 컴포넌트는 컨테이너 밖에서는 정상적으로 동작할 수 없으므로

개발자들은 끝도 없이 반복되는 수정-빌드-배포-테스트의 과정으로 많은 시간을 낭비해야 했고,

간단한 기능에 대해서조차 자동화된 테스트를 만드는 것은 거의 불가능에 가까웠다.

 

이러한 EJB의 원격분산 모델은 시스템의 성능을 떨어뜨리고 서버의 복잡도만 증가시켰다.

 

EJB의 가장 큰 문제점은, EJB 스펙을 따르는 비즈니스 오브젝트들은

객체지향적인 특징과 장점을 포기해야 했다는 것이다.

 

 

 

결국 EJB는 형편 없는 생산성과 느린 성능, 불필요한 기술적인 복잡도 등으로 인해

자바의 엔터프라이즈 개발에 대한 불신을 가중시켰다.

 

 

마침내 마틴 파울러를 비롯한 많은 오피니언 리더들은 EJB와 같은 잘못 설계된 과도한 기술을 피하고,

객체지향 원리에 따라 만들어진 자바 언어의 기본 기술에 충실하게 비즈니스 로직을 구현하는

일명 POJO(Plain Old Java Object) 방식으로 돌아서야 한다고 지적하고 나섰다.

 

 

 

이렇게 등장한 POJO라는 개념은 Spring 프레임워크의 기원이 된다.

 

이와 관련된 내용은 다음 포스팅에서 정리하도록 하자.

 

 

 

 

 

 

 

 

 

 

참고

- 한국데이터산업진흥원

 

 

 

 

'DEV > Spring' 카테고리의 다른 글

POJO(Plain Old Java Object)  (0) 2020.12.18