by 이용원, Jstorm(http://www.jstorm.pe.kr/) 자문, 중앙대 소프트웨어 엔지니어링(SE) 연구실
컴포넌트 기반 소프트웨어 개발이 활성화되면서 엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)는 서버 사이드의 비즈니스 로직을 재사용 가능한 단위로써 소프트웨어를 부품화하고 있다. 이는 소프트웨어의 개발과 유지 보수적인 측면에서 많은 이점을 가져다 준다.
1998년 3월 EJB 1.0, 1999년 EJB 1.1 버전이 발표되었으며 2001년 6월 현재 EJB 2.0 Final Draft 2가 발표된 상태이다. EJB 아키텍처는 컴포넌트 기반 분산 비즈니스 애플리케이션을 개발하고 배치하기 위한 컴포넌트 아키텍처이다. EJB 스펙은 컴포넌트 개발자와 EJB 서버와 컨테이너 벤더 모두의 책임을 정의한다. EJB 2.0 스펙은 이전 EJB 1.0과 EJB 1.1 스펙에 정의된 아키텍처와 기능을 발판으로 이를 확장한다.
요약하여 EJB 2.0 스펙의 새로운 특징을 소개한다.
메시지 처리 빈(Message-driven beans)
컨테이너 관리 영속성을 위한 향상된 아키텍처
컨테이너 관리 영속성을 가진 엔티티(entity) 빈을 위한 컨테이너 관리 관계
지역 인터페이스(local interface)
엔터프라이즈 자바빈즈 질의 언어(Query Language)
1. 엔터프라이 자바빈즈의 유형
EJB 2.0 스펙은 세션 빈과 엔티티 빈에 추가해서, 메시지 기반 빈이라고 하는 엔터프라이즈 빈의 새로운 유형을 소개한다. 세션 빈과 엔티티 빈은 이전 EJB 아키텍처와 매우 동일한 하다. 그러나, 어떻게 이들 빈이 엑세스되고 사용되는지에 변화가 있다.
- 세션 빈
- 세션 빈들은 인식된 트랜잭션을 위해서 비 영속적인 서버 사이드 컴포넌트를 나타낸다. 일반적으로, 세션 빈은 전과 같이 세션 빈은 상태유지와 무상태이다. 상태유지 세션 빈은 연산 사이에서 그 클라이언트의 세션 데이터를 유지한다. 그러므로, 장바구니나 뱅킹 텔러와 같은 일반적으로 여러 단계와 연산을 요구하는 서비스를 모델하기 위해서 사용된다. 무상태 세션 빈은 클라이언트를 위한 세션 데이터를 유지하지 않는 서비스를 모델하기 위해서 사용되는 경량이고 확장 가능한 컴포넌트이다.
- 엔티티 빈
- 엔티티(entity) 빈은 영속적이고 트랜잭션 처리가 필요한 서버 사이드 컴포넌트이며, 영속적인 데이터 객체를 모델하기 위해서 사용된다. 엔티티 빈은 데이터 저장소에서 엔티티 빈이 가지고 있는 영속적인 상태와 관계를 관리할 수 있다. 이 경우에는 빈 관리 영속성(BMP) 엔티티 빈이다. 컨테이너가 그 영속적인 상태와 관계를 관리한다. 이 경우에는 컨테이너 관리 영속성 엔티티 빈이다. 컨테이너 관리 영속성은 이전 스펙으로부터 2.0 스펙의 중요한 변화이다.
- 메시지 처리 빈
- 메시지 처리 빈은 무상태, 서버 사이드, 트랜잭션 처리를 알고 있는 자바 메시지 서비스(JMS)에 의해서 전달된 비동기 메시지를 처리하는 컴포넌트이다. 비동기 메시징은 송신자에게 수신자의 독립성을 남겨 두는 면에서 메시지 교환으로 통신할 수 있도록 애플리케이션에 허락한다. 즉, 송신자는 그 메시지를 보내고 그 메시지를 수신하거나 처리하기 위해서 수신자가 기다리지 않는다. 메시지 처리 빈은 JMS 공급자로부터 인바운드(단말기로부터 중앙에 있는 호스트 컴퓨터에 데이터 스트림이 전달되는 것) 엔터프라이즈 메시지를 연산하는 라우터 프로세스로써 일한다. 레거시 시스템을 가진 EJB 기반 시스템을 통하하거나 비즈니스 대 비즈니스간(business-to-business, B2B)의 상호작용을 가능하게 하기 위한 메시지 처리 빈을 사용할 수 있다. 메시지 처리 빈의 단일 역할은 메시지를 처리하는 것이다. 그 컨테이너는 자동으로 컴포넌트의 전체 환경을 관리하기 때문이다.
2. EJB 2.0의 컨테이너 관리 영속성
EJB 2.0 스펙의 변화는 컨테이너 관리 영속성(CMP)와 주로 관계있다. CMP와 함께 2.0 스펙은 컨테이너 관리 관계(CMR)를 소개한다.
CMP에 대한 EJB 2.0 접근은 빈들 사이의 컨테이너 관리 관계(CMR)를 가진 여러 개의 엔티티 빈들을 허용한다. 관계의 자동적인 관리 + 관계의 참조 무결성 컨테이너 관리는 원격 인터페이스를 통해서 엔티티 빈의 인스턴스 상태만을 표시하기 위해 허용되었던 EJB 1.1 스펙에서 향상된 점이다.
2.1 CMP 와 CMR 필드
EJB 1.1 스펙에서, 클라이언트는 엔티티 빈의 인스턴스 변수를 이용하여 영속적인 자료를 저장하고 엑세스했다. 현재 2.0 스펙에서는 인스턴스 변수들을 아래와 같이 설정할 수 있다.
- 컨테이너 관리 영속성 필드(cmp 필드) : 엔티티 빈의 속성과 데이터 베이스의 필드를 정의 한다.
- 컨테이너 관리 관계 필드(cmr 필드) : 엔티티 빈 간의 관계를 정의한다.
cmp와 cmr필드는 디플로이먼트 디스크립터를 통해서 정의된다.
2.2 빈 인터페이스와 구현
EJB 2.0 스펙의 세션 빈과 엔티티 빈들은 두 가지 인터페이스 타입을 가진다.
- 지역 인터페이스: 세션과 엔티티 빈에 대한 지역 인터페이스들은 지역 클라이언트인 엔터프라이즈 빈에 대한 라이트 웨이트(light weight) 접근의 지원을 제공한다. 지역 인터페이스는 RMI로부터 상속되지 않은 표준 자바 인터페이스이다.
- 원격 인터페이스: 원격으로 작업할 수 있는 기능이 필요한 빈은 원격 인터페이스를 사용한다. 빈은 지역과 원격 인터페이스 둘 다 사용할 수 있다.
2.3 질의 언어
EJB 2.0 스펙은 EJB 질의 언어, EJB QL이라는 질의 언어를 소개한다. EJB QL은 CMP의 엔티티 빈에 대한 finder 메소드와 검색 메소드들 정의하며, EJB 컨테이너들 간의 호환성을 제공한다. EJB QL는 SQL92에 기초한다.
간략히 EJB 2.0 스펙의 변화에 대해서 소개하였다. EJB 1.1까지는 엔터프라이즈 환경에서의 트랜잭션 처리와 보안 측면의 개발의 많은 이점을 주었다면, EJB 2.0부터는 엔터프라이즈 환경에서 가장 빈번한 엔티티 객체들 간의 관계를 위한 처리와 이를 위한 질의를 표준화하고 성능향상에 역점을 둔 느낌이다.