본문으로 건너뛰기

10.1 EJB3 서브시스템

EJB(Enterprise JavaBeans) 3.1은 Enterprise Bean라는 서버 측 컴포넌트를 사용하여 분산 Java EE 애플리케이션을 개발하기 위한 표준 API이다. Enterprise Bean은 컴포넌트화하여 재사용하기 쉽도록 애플리케이션의 비즈니스 로직을 구현한다. EJB 3.1은 Java EE 표준 JSR-318에서 정의되어 있다.

JBoss EAP 6는 EJB 3.1 표준을 사용하여 개발한 애플리케이션을 완벽히 지원한다. EJB 컨테이너는 JBoss EJB 3 커뮤니티 프로젝트(http://www.jboss.org/ejb3)를 사용하여 구현하였다.

이전 버전인 Java EE 5에서 가장 큰 변화는 DI(Dependency Injection)나 POJO(Plain Old Java Object), 어노테이션과 같은 기존의 J2EE에 없었던 기술을 도입한 것이 EJB 3.0이었다. Java EE 6에 포함된 EJB 3.1에서도 이 흐름을 이어가고 있다.

EJB는 Java 엔터프라이즈 컴포넌트의 표준이다. 하지만 EJB는 ‘복잡하고 다루기 힘든 기술 '이라는 인식을 가지고 있는 개발자들이 많다. 물론 기존의 EJB 2.x까지는 바로 그런 기술이었다. 사용하려면 복잡한 XML 설정 파일들을 여러 개 작성해야 하고, 많은 규칙을 기억해야 해서 간단한 작업조차 마음대로 하기 힘든 것이 바로 EJB였다.

그러나 이제는 다르다. 2006년 초에 릴리즈된 새로운 버전 ‘EJB 3.0 '에는 기존의 EJB의 복잡성을 없애기 위한 대대적인 개선이 이루어졌다. ‘편리한 사용’을 가장 중시하여 EJB를 사용하는 개발자의 어려움들을 크게 개선한 것이다. 따라서 이제는 EJB가 ‘사용할 수 있는 기술’로 새롭게 만들어진 만큼 다시 많은 관심을 기울일만한 기술이다.

사실 EJB 대신에 개발자들은 JBoss Hibernate를 많이 사용했다. EJB 3 버전은 JBoss Hibernate를 표준화한 기존 버전과는 다른 완전히 새로운 O/R 맵핑 프레임로 JPA(Java Persistence API)가 채택되었다.

Java EE 6에서는 JPA를 EJB와 다른 새로운 표준으로 나누어 ‘JPA 2.0’이 되었다. 즉, EJB Entity Beans가 없어지고 JPA Entities가 이를 대신하게 되었다.

EJB 3에서는 다음과 같은 기능들을 지원한다.

  • 세션 빈(Session Bean)
  • 메시지 드리븐빈(Message Driven Bean)
  • 인터페이스 없는 뷰(No-interface view)
  • 로컬 인터페이스(Local Interface)
  • 원격 인터페이스(Remote Interface)
  • JAX-WS 웹서비스
  • JAX-RS 웹서비스
  • 타이머 서비스
  • 비동기 호출
  • 인터셉터
  • RMI / IIOP 상호 운용성
  • 트랜잭션 지원
  • 보안

EJB 3.1에서는 다음과 같은 기능이 추가되었다.

  • 로컬 인터페이스 생략 가능
  • WAR내에 패키징 가능
  • Singleton EJB
  • 타이머 서비스 강화
  • 비동기 실행