본문 바로가기
IT/JAVA

EJB

by 최고영회 2013. 12. 21.
728x90
반응형
SMALL

EJB 란 무엇인가 ?

 

EJB(Enterprise Java Bean)가 무엇인지 알아보기 위해 먼저 Java EE(Java Platform Enterprise Edition)에

대해 알아봅시다.

Java EE는 간편하고 견고하고 확장가능하며 안전한 서버측 자바 애플리케이션을 위한 산업 표준입니다.

JavaEE에는 이미 잘 알고 있는 웹애플리케이션 개발을 위한 Servlet, JSP 외에도 다양한 기능들을 포함하고

있습니다. 그 중에 하나가 이번에 배워보려고 하는 EJB입니다.

 

Java EE의 다른 기능들로는

비동기 메세지 처리를 위한 JMS(Java Message Service),

데이터베이스 처리용 API 인 JDBC(Java Database Connectivity),

트랜잭션 처리를 위한 JTA(Java Transaction API) - 분산 트랙잭션 지원,

디렉토리 서비스를 위한 JNDI(Java Naming and Directory Interface),

메일지원(Java Mail API) 등 많은 기능들이 있습니다.

 

이들중에 EJB란 분산 애플리케이션을 지원하는 컴포넌트 기반의 객체입니다.

Servlet 이 TOMCAT 같은 Servlet Container 에 올려서 서비스 되는 것과 같이

EJB는 JBoss 와 같은 EJB Container 에 올려서 서비스 됩니다.

 

컴포넌트 기반의 객체의 의미는 재사용성에 있습니다. EJB 컴포넌트는 주로 비지니스 로직을 담고 있으므로

한번 제작되면 동일한 업무에 재사용될 수 있습니다. (이론상 이렇지만 실제 재사용 가능하도록 컴포넌트를

잘 설계 하기란 쉬운 일이 아닙니다. 서로 다른 프로젝트에서 유사한 업무이더라도 세세한 부분에서 상이한

점이 많으므로 재사용하기가 쉽지 않은것 같습니다. )

 

분산 애플리케이션을 지원한다는 의미는 예를 들어 현재 제작하고 있는 사이트가 원격의 여러 다른

사이트들의 데이터를 처리할 필요가 있을 경우 원격의 사이트가 필요한 기능을 EJB 로 제공하고

현재 사이트에서는 이 EJB를 호출하여 필요한 처리를 수행할 수 있습니다. 뭐 이러한 기능을 구현하는데

EJB외에도 Web Service 와 같은 다른 방법도 존재합니다.

 

그렇더라도 EJB 를 사용하는 장점은 존재합니다. Java EE 의 설명에서와 같이 EJB는 대량의 트랜잭션을

안정적으로 처리할 수 있게 해줍니다. 또한 기본적으로 분산트랜잭션을 지원합니다. 즉, 현재 사이트에서

다른 여러 원격 사이트에 대해 작업을 하던 도중 한군데서 에러가 나서 다른 사이트를 포함한

이전의 모든 처리를 롤백해야  할 경우 이러한 분산 트랜잭션을 지원해주는것입니다. 이러한 기능을

직접 구현하려면 배보다 배꼽이 더 커지는 사태에 빠지게 될것입니다.

 

EJB의 사용방법을 한번 보기로하죠.

 

비교대상으로 서블릿을 한번 봅시다. 서블릿을 작성해서

Servlet Container 에 Deploy 했다고 가정하면 이를 호출하는 클라이언트는 거의 99% 웹브라우저

일 것입니다. 웹 브라우저에서 http://localhost/servletname 이런식으로 호출하면 응답이

올 것입니다.

 

EJB가 작성이 되고 EJB Container 에 Deploy 되었다고 가정합시다.

이것을 호출하는 클라이언트는 자바 프로그램입니다. Servlet, JSP 와 같은 웹용 프로그램일 수도 있고

콘솔애플리케이션 또는 윈도우용 자바 애플리케이션일 수도 있습니다. Web Service 는 클라이언트가

어떤 언어이든지 상관이 없지만 EJB 는 자바 전용입니다.

EJB 는 프로그램 내에서 다음과 같이 호출합니다.

 

Properties props = new Properties();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
props.put(InitialContext.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(props);

HelloWorld hello = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

 

그럼 이 EJB 를 어떤 용도로 사용할것인가  알아보도록 합시다.

EJB는 세션 빈, 메세지 드리븐 빈, 엔티티 빈  이렇게 세종류가 있습니다.

각각을 알아보죠.

Session Bean 은 비지니스 로직을 처리합니다. 웹에서 Servlet, JSP 는 컨트롤, 표현 로직을 담당하고

업무로직은 세션빈으로 구현하는겁니다. 그래야 재사용성이 높아지겠죠.

세션 빈은 두 가지로 나눠지는데

Stateless Session Bean(무상태 세션 빈) 과 Stateful Session Bean(상태 유지 세션 빈 입니다.)

무상태 세션 빈은 가장 많이 사용되는 빈으로 업무로직을 구현합니다.

 

아래 그림은 무상태 세션 빈의 라이프 사이클 입니다.

생성이 되면 객체 풀에 넣어두고 계속 재사용합니다. 모든 클라이언트들에게 동일하게 보이므로

속도를 위해서 이렇게 처리합니다.

 

 

 

 

 

상태유지 세션 빈은 클라이언트의 상태를 유지합니다. 보통 장바구니 같이 클라이언트의

상태가 각각 유지되어야할 때 사용됩니다.

 

 

 

 

Message Driven Bean 은 JMS 서비스에서 Listener 역할을 합니다.

JMS 서비스에게 메세지를 보내면 그 메세지를 처리하는 작업을 하는게 메세지 드리븐 빈입니다.

실제 JMS 를 통해서 사용된다는것을 제외하면 무상태 세션빈과 비슷합니다.

 

 

 

 

음.. 위의 라이프 사이클과 관련된 자세할 설명은 각각의 빈을 자세하게 설명할 때 하기로하죠..

너무 글만 적을려니까 심심해서 이미지를 넣어 봤습니다.^^

 

마지막으로 엔티티빈은 영구저장장치에 있는 데이터를 나타내는 빈입니다.

주로 데이터베이스가 되겠죠. 빈하나가 테이블의 하나의 행의 데이터를 나타내고

이 객제를 생성하거나, 데이터를 수정, 삭제하면 실제 데이터베이스에 동일한 작용이 되는겁니다.

SQL 하나도 없이 데이터베이스 작업을 할 수 가 있겠죠.(사실 테이블이 복잡하면 이걸 쓰기가 쉽지

않습니다. 그냥 세션빈에서 JDBC 이용해서 처리해 버리는거죠. 하지만 EJB3.0에서는 상당히

개선이 되었다고 하니 잘 배워서 사용해 보도록해야겠습니다.)

728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

NIO 이용 파일 카피  (0) 2013.12.21
Java 로 mail 보내기  (0) 2013.12.21
자바 서버 소켓 멀티 쓰레드  (0) 2013.12.21
file download 시 stream  (0) 2013.12.21
한글이름 file 저장 (unix 에서)  (0) 2013.12.21