본문 바로가기

Projects/Server

[불펌]JBOSS 소개와 설치 2

JBoss 탐험기를 다루는 본 기사에서는 오픈 소스 프로젝트로 진행되는 EJB 컨테이너인 JBoss의 설치부터 시작하여 간단한 예제를 만들고 실행하는 과정을 다룰 것이다. 본 기사는 EJB를 공부하고 싶어하는 자바 엔지니어(단, 초급자 제외)를 대상으로 작성되었다. 특히, 금전적인 부담으로 인해 상용 EJB 컨테이너를 살 능력이 없는 사람에게는 더욱 더 도움이 될 만한 기사이다. 왜냐… 공짜이니까…

1. 예제 프그램들

지난 기사(JBoss 탐험기 (상): JBoss 소개와 설치)에서는 설치와 간단한 테스트를 해보았다. 이제부터는 본격적인 EJB 예제를 실행해보도록 하자. 세션 빈과 엔티티 빈으로 나누어 이 두 가지에 대해 예제를 실행해 볼 것이다. 이 두 가지 모두 앞에서 설치한 예제 폴더에 있는 것들이다. 소스 설명은 따로 필요가 없다. 워낙 간단한 예제라서 EJB에 대한 상식이 있다면 누구나 쉽게 이해할 수 있기 때문이다.

1.1 Session bean

예제로는 'Interest'라는 무 상태 세션 빈을 사용할 것이다. 이 예제는 간단하게 이자 계산을 해주는 프로그램이다. 우선 JBOSS_DIST\examples\build 폴더에서 콘솔창을 열도록 한다. 그리고 'ant'라고만 입력하면 아래 [그림 1]과 같이 타겟을 지정하라는 메시지가 나올 것이다.


[그림 1] 타겟을 지정하지 않았다는 메시지

1.1.1 compile

그럼 이번에는 'ant intro-interest-compile'라고 입력해보자. 이번에는 폴더를 생성하고 컴파일을 하는 과정이 메시지로 출력된다.


[그림 2] 컴파일이 정상적으로 수행된 후

실제로 폴더에서 컴파일된 파일들을 확인할 수 있다.


[그림 3] 컴파일 후 생성된 클래스 파일들

1.1.2 jar

이번에는 컴파일된 파일들을 jar 파일로 묶어보자. 다음과 같이 입력한다.
ant intro-interest-jar 
여기까지는 이상 없이 실행될 것이다. 그리고 폴더에서 jar 파일이 생성된다.

1.1.3 deploy

이제 jar 파일을 디플로이 하도록 하자. 다음과 같이 입력한다.
ant intro-interest-deploy 
이것을 실행하면 자동으로 interest.jar 파일이 JBOSS_DIST\server\default\deploy 폴더로 복사되면서 디플로이가 되어야 한다. 그런데 동작하지 않는 것으로 보아 무엇인가 문제가 있는 것 같다. JBOSS_DIST\examples\org\jboss\docs\interest 에 있는 build.xml 파일에서 deploy-ejb-jar 타겟을 보자.
<target name="deploy-ejb-jar" depends="ejb-jar"> <copy file="${build.interest.dir}/interest.jar" todir="${jboss.dist}/deploy" /> </target> 
역시 폴더 설정이 잘못 되어있다. 아마도 JBoss 2.x 버전에서 사용하던 폴도 구조를 변경하면서 미처 반영을 하지 않은 것 같다. 다음과 같이 고치고 다시 실행하자.
<target name="deploy-ejb-jar" depends="ejb-jar"> <copy file="${build.interest.dir}/interest.jar" todir="${jboss.dist}/server/default/deploy" /> </target> 
그러면 아래 [그림 4]와 같이 성공적으로 디플로이 되었다는 메시지가 나올 것이다.


[그림 4] 정상적으로 디플로이된 화면

1.1.4 client

빈이 배치되었으니 클라이언트 프로그램을 실행해서 확인할 차례이다. 다음과 같이 입력한다.
ant intro-interest-client 
이것을 실행하면 테스트용 클라이언트 프로그램이 컴파일되고 실행된다. 그러나 아쉽게도 에러 메시지가 나타난다. 메시지를 살펴보니 몇몇 클래스를 찾을 수 없다는 내용이다. JBOSS_DIST\examples\org\jboss\docs\interest 에 있는 build.xml 파일에서 interest-client 타겟에서 아래와 같이 클래스 패스를 설정하는 부분이 있다.
<target name="interest-client" depends="compile"> <java classname="org.jboss.docs.interest.InterestClient" fork="yes"> <classpath> <pathelement path="${classpath}"/> <pathelement Location="${build.classes.dir}"/> <pathelement Location="${src.resources}"/> </classpath> </java> </target> 
여기에 아래와 같이 2줄을 추가하자.
<target name="interest-client" depends="compile"> <java classname="org.jboss.docs.interest.InterestClient" fork="yes"> <classpath> <pathelement path="${classpath}"/> <pathelement Location="${build.classes.dir}"/> <pathelement Location="${src.resources}"/> <pathelement Location="${jboss.dist}/lib/jboss-common-client.jar"/> <pathelement Location="${jboss.dist}/lib/log4j.jar"/> </classpath> </java> </target> 
다시 실행하여 [그림 5]와 같은 실행 결과가 나왔다면 성공한 것이다.


[그림 5] 클라이언트 실행 결과

1.2 Entity bean

앞에서 interest 세션 빈을 실행해 보았다. 이번에는 엔티티 빈을 실행해 볼 차례이다. 엔티티 빈을 실행하거나 데이터베이스를 사용하기 위해서는 적절한 설정이 필요한데, JBoss를 설치하고 실행하면 기본적으로 Hypersonic 이라는 데이터베이스가 설정되고 구동된다. 그냥 기본으로 제공하는 데이터베이스를 사용하도록 하자.

실행해 볼 엔티티 빈 예제는 'Music CD'이다. 우리가 인터넷으로 CD를 구매하기 위해서는 일단 어떤 CD가 있는지 살펴보게 되는데, 이 예제에서는 이러한 CD 데이터를 데이터베이스를 사용하여 관리할 것이다. 이번에 사용하는 예제는 엔티티 빈 단독으로 실행되는 것이 아니라, CD 자체를 표현하는 엔티티 빈과 CD를 관리하는데 필요한 기능을 담고 있는 CDCollection 세션 빈으로 구성된다. CD 빈은 CD의 타이틀, ID, 아티스트 등에 관련된 메소드들을 제공하며, CDCollection 빈에서는 CD의 추가, 삭제, 검색 메소드를 제공한다. (여기에서의 엔티티 빈은 Container Managed Persistence이다.)

1.2.1 compile

JBOSS_DIST\examples\build에 열려 있는 콘솔창에서 'ant cmp-cd-compile'라고 입력하면 컴파일이 되면서 cd.jar라는 파일이 생성되었다는 메시지가 출력된다. 이 파일 안에는 두 가지의 빈이 모두 포함 되어있다.


[그림 6] 컴파일이 무사히 끝나고 cd.jar 파일 생성

1.2.2 deploy

다른 과정 필요 없이 바로 디플로이 할 수 있다. 이번에는 아주 쉽게 할 수 있다. 단지 JBOSS_DIST\examples\build-examples\cmp-cd\ejb 폴더에 있는 cd.jar 파일을 JBOSS_DIST\server\default\deploy 폴더로 복사만 하면 자동으로 핫 디플로이가 이루어지기 때문이다. 디플로이가 정상적으로 끝나면 역시 아래 [그림 7]과 같은 화면을 볼 수 있다.


[그림 7] 정상적으로 디플로이 된 화면

1.2.3 client

디플로이도 끝났으니 클라이언트 프로그램으로 실행해 볼 차례가 왔다. 세션 빈에서의 클라이언트에서와 마찬가지로 클래스 패스에 누락된 것이 있다. JBOSS_DIST\examples\org\jboss\docs\cmp\cd\build 폴더에 있는 build-client.xml 파일을 수정해보자.
<target name="main" depends=""> <java classname="org.jboss.docs.cmp.cd.${client}" fork="yes" dir="${build.classes.dir}"> <classpath> <pathelement path="${classpath}"/> <pathelement path="${build.classes.dir}"/> <pathelement Location="${jboss.dist}/client/jboss-common-client.jar"/> <pathelement Location="${jboss.dist}/lib/log4j.jar"/> </classpath> </java> </target> 
디플로이만 끝난 상태로는 테이블에 CD 데이터가 아무 것도 없기 때문에 실행하는데 따르는 의미가 없을 것이다. 우선은 CD 데이터부터 입력하도록 하자. JBOSS_DIST\examples\build 콘솔창에서 'ant cmp-cd-upload'라고 실행하면 클라이언트와 서버에서 데이터가 입력되는 과정을 볼 수 있다. "앗, 어떤 데이터가 어떻게 입력이 되나요?" 당연히 이런 질문이 나와야 한다. 데이터는 cds.txt라는 파일에 있으며 파일 내용은 CD 데이터들을 CSV(Comma Separated Value) 형태로 담고 있다. 클라이언트가 실행되면서 이 파일을 읽은 후 CD 내용으로 입력하는 것이다. 아래 [그림 8]은 CD 데이터가 입력되는 서버의 화면이다.


[그림 8] CD 데이터 입력 중

CD 데이터 입력이 끝났으니 이제 CD 목록을 보는 클라이언트를 실행해보자. 'ant cmp-cd-list'는 먼저 입력 되었던 CD 데이터들을 가져 오는 예제이다. 모든 데이터를 삭제하고 싶다면 'ant cmp-cd-remove'라고 실행하면 된다.

이상으로 JBoss 탐험기를 마치겠다. 서문에서 밝혔던 것처럼 이 기사가 EJB를 공부하는 사람들에게 많은 도움이 되었기를 바란다.


참고문헌

  • http://www.jboss.org/online-manual/HTML/index.html
  • http://sourceforge.net/projects/jboss/

    저자: 한빛리포터 김영익

    출처: 한빛미디어

    http://network.hanbitbook.co.kr/view.php?bi_id=411

    http://network.hanbitbook.co.kr/view.php?bi_id=429
  • 'Projects > Server' 카테고리의 다른 글

    Installing Oracle, PHP, and Apache on Linux  (0) 2006.09.23
    proftpd 계정설정  (0) 2006.09.16
    php 업로드 용량 제한 변경하기  (0) 2006.09.16
    [불펌]JBOSS 소개와 설치 1  (0) 2006.09.07
    Tatter tools 설치 - apache 설치  (0) 2006.09.07