Technical Notes I Oracle9i Application Server Portal 의 기본아키텍처와 Java 포틀릿 { 글 김호영 < 한국오라클 Oracle University> ress.kim@oracle.com Oracle9i Application Server Portal은엔터프라이즈포탈환경을쉽고간편하게구현할수있는훌륭한툴이다. 엔터프라이즈포탈환경에서필수적으로구현되어야하는기능을알아본후, Oracle9i Application Server Portal의기본처리구조를통해이기능들이어떻게구현되는지재정리할것이다. 그런다음, Java 포틀릿의생성과정을따라가면서 Oracle9i Application Server Portal이Java 기반솔루션을어떻게구현하는지소개한다. 088 ORACLE KOREA MAGAZINE
Oracle9i Application Server Portal은엔터프라이즈포탈환경을만들고관리하는기능을가지고있는제품이다. 엔터프라이즈포탈환경이란, 기업내외의정보를웹화면을통해보여줄수있는환경이다. 그러나, 단순하게정보를HTMS 페이지로보여준다고해서엔터프라이즈포탈환경이라고하지는않는다. 웹페이지를여러사람들에게할당하는과정에서액세스권한과데이타범위를사람에따라제한할수있어야한다. 이작업을 Oracle9i Application Server Portal 레벨에서할수있도록지원해야한다. 액세스권한과데이타범위를제한하는방법은사용자에대한관리와포틀릿이라는개체를이용하는보안방법이있다. 중앙에서안전하고쉽게관리할수있는, 확장가능한 IT 아키텍처의 엔터프라이즈포탈환경의 5대기능엔터프라이즈포탈환경을제대로구현하려면다음과같이 5가지의기능이제공되어야한다. 개인화된액세스를지원하는통합시작포인트기업내 / 외의많은정보가싱글데이타베이스로통합되면서각개인에게는개인의업무에관련된정보만을제공하는보안기능이갖춰져야하며, 개인웹페이지도통합관리할수있어야한다. 이기종데이타소스에대한액세스의분류및통합엔터프라이즈포탈환경을구성하기위해서는정리되어있지않은정보를적절한수준에서분류해주어야할뿐만아니라, 더중요한것은그정보들을웹페이지를통해보여줄때정보를어떤형태로든분류해서보여줄수있어야하며, 그작업이어렵지않아야한다. 예를들면, 기업내정보를보는사람들의분류를직원과협력사직원 (Oracle E-Business Suite의일부인 Oracle Human Resources Management System에서는협력사직원정보관리도가능하다 ) 으로나눈경우, 그들에게보여지는정보는정확한기준에의해분류되어야하며, 이분류기준이그들이보는웹페이지에반영되어야한다. 통합엔터프라이즈포탈환경은기본적으로웹환경을기반으로하고있기때문에, 웹환경에대한확장성, 보안성, 유지관리의용이성등을지원할수있어야한다. Oracle9i Application Server Portal의경우에는 Oracle9i Application Server가지원하는 J2EE 기반의기능들을이용하여위의내용들을지원하고있다. 결론적으로, 엔터프라이즈포탈환경은다양한사람들의정보요구를웹이라는환경을통해충족시켜주어야하며, 동시에작업의편이성, 보안성, 확장성및유지보수의용이성도지원되어야한다. Oracle9i Application Server Portal의기본처리구조위에서설명된기능들을Oracle9i Application Server Portal의기본처리구조를통해정리해보자. < 그림 1> 은 Oracle9i Application Server Portal의프로세스를나타낸것이다. 1. 사용자가브라우저를이용해서웹페이지를요청한다. 엔드유저의셀프서비스지원엔터프라이즈포탈환경에서보여지는웹페이지는우선적으로포탈개발자들에의해생성된후, 각개인에게혹은어떤그룹 ( 부서, 팀같은업무를수행하는그룹 ) 별로로그인사용자 ID와암호를통해서할당될것이다. 이때만들어지는웹페이지의경우, 각그룹이요구하는포맷이나데이타그룹을모두수용하고있지못할가능성이높다. 따라서, 각웹페이지의포맷과데이타그룹은엔드유저들이결정하고구성할수있도록하는것이중요하다. 이처럼개발자가일종의템플릿웹페이지를구성해주면, 실제로그것을할당받아사용하는엔드유저들이자신들의입맛에맞게내용을재구성할수있도록하는기능이셀프서비스기능이다. 엔터프라이즈포탈은이러한기능을제공해야한다. 개인화된그룹및사용자뷰생성지원이것은첫번째기능과연계되는부분이다. 웹페이지를생성해해당 2. 사용자가요청은내용은바로 Oracle9i Application Server의 Web Cache로전달되고, 이웹캐시안에서사용자요구에적합한페이지를찾게되면바로사용자에게페이지내용을보내주게되고, 그렇지않은경우Oracle HTTP Server로요청내용을전달한다. 그리고 mod_plsql 모듈을이용해서요청되는페이지정보를 Oracle9i Application Server Portal Instance를통해참조하게되며, 이때페이지컨텐트를 Oracle9i Application Server Portal의 Repository에서참조하게된다. 3. 페이지의컨텐트는보통포틀릿형식을이용해서많이표현되는데, 이것은웹페이지의프레임과같은모양으로나타나게된다. 포틀릿개체는개별적인프로그램이기때문에 Parallel Page Engine(PPE) 이라는엔진을통해실행되어결과를생성한다. 그런데, 포틀릿은프로바이더개체를통해관리되는개체이기때문에, PPE는포틀릿을직접실행하지못하고프로바이더를통해포틀릿실행정보를우선요청하게된다. 2003 SUMMER 089
< 그림 1> Oracle9i Application Server Portal 의프로세스 4. 프로바이더는 PPE로부터요구받은포틀릿정보를 PPE에전달하게된다. 그리고 PPE는받은포틀릿정보들을조합해서 < 화면 1> 과같은하나의싱글웹페이지를구성하게된다. 통합웹인터페이스의핵심, 포틀릿앞에서설명한엔터프라이즈포탈환경의 5대기능은 Oracle9i Application Server Portal이충분히지원할수있는기능들이며, 특히이제품은다양한오라클애플리케이션들을하나의화면에통합해보여주는방법을제공한다는특징이있다. 이특징적인기능을제대로수행하기위해필요한것중하나가포틀릿이다. Oracle9i Application Server Portal에서화면을구성하는요소는 여러가지가있지만, 그중에포틀릿이가장많이사용되는요소라할수있다. 이포틀릿을사용함으로써외부의여러애플리케이션들의작업을Oracle9i Application Server Portal웹페이지에서작업할수있는환경을만들어줄수있게된다. 즉, 포틀릿은통합웹인터페이스환경을만드는데중요한역할을담당한다. 포틀릿을이해하기위해우선아래에설명된포틀릿의특징을알아야한다. 재사용이가능한개체하나의포틀릿이 포틀릿저장소 (Portlet Repository) 에저장되면 ( 등록된다 고도한다 ), 프로바이더라는개체를통해여러웹페이지에서이포틀릿정보를공유하고디스플레이할수있다. 즉, 여러종류의페이지가있다고해서같은내용을디스플레이하는포틀릿을중복해서만들필요가없는것이다. 플러그가능한웹컴포넌트포틀릿은동적인내용을표현할수있고수행엔진을통해실행할수있다. 예를들면, < 그림 1> 의두번째단계에서디스플레이되는포틀 < 화면 1> 포틀릿정보를조합해구성한싱글웹페이지 릿들은 Oracle Discoverer Execution Engine이실행되어만들어진결과이다. 다시말하면, 이결과는엔드유저가Oracle9i Developer Suite 의 Discoverer 수행엔진을직접실행시켜만들어내는것이아니라웹페이지를실행시키면자동으로 Discoverer 수행엔진이실행되어결과를보여주는것이다. 물론이때 Discoverer는클라이언트측이아닌Oracle9i Application Server Portal이실행되고있는서버에서실 090 ORACLE KOREA MAGAZINE
행된다. 또한다양한종류의애플리케이션들을컴포넌트처럼마음대로웹페이지에서제외시켰다가다시포함시키는작업을할수있다. 다양한형태의서비스제공 Oracle9i Developer Suite, Oracle E-Business Suite의 Enterprise Resource Planning 등을통해결과로나온화면및결과물들이포틀릿이라는개체를통해웹페이지에디스플레이된다. 이밖에도외부에만들어져있는유용한사이틀포틀릿으로만들어사용할수있다. 이를가리켜 URL 서비스 라고한다. 또한 PL/SQL, JAVA, C, Perl 등의언어를통해포틀릿을개발할수도있다. 물론, Oracle9i Application Server Portal에서제공하는, 미리만들어져있는포틀릿도라이브러리형태로지원된다. 결론적으로, Oracle9i Application Server Portal의장점은위에서설명한특징들을가지고있는포틀릿이라는개체를통해서로다른애플리케이션들을여러가지서비스방법을통해하나의페이지로통합해서보여줄수있다는것과포틀릿들을하나의저장소를통해관리할수있다는것이다. 이러한면에서포틀릿의활용은 Oracle9i Application Server Portal에서매우중요하다. 포틀릿의동반자, 프로바이더앞에서알수있듯이, 포틀릿을잘이용하기위해서는프로바이더를이해하는것도중요하다. < 그림2> 를통해프로바이더의역할을알아보자. < 그림2> 에서아래쪽의직원, 협력사, 공급업체가각자필요로하는웹페이지를요청하면, Oracle9i Application Server Portal을통해서 - 정확히말하자면PPE를통해- 각웹페이지의구성요소가될포틀릿들에대한정보를프로바이더에게요구하게된다. 프로바이더는하나이상의포틀릿정보를패키징해서관리하는개체인데, 예를들면, PL/SQL 프로그램에서프로바이더는패키지이고, 포틀릿은 < 그림 2> 프로바이더의역할패키지안에있는단위프로그램의관계로이해할수있다. 결국, 프로바이더없이는포틀릿이실행될수없으며, 포틀릿을생성하기위해서는프로바이더가먼저생성되어있어야한다. 프로바이더와포틀릿에대한정보는모두 Oracle9i Application Server Portal의 Repository 안에등록되어있고그안에서참조된다 < 그림1>. 그리고, 프로바이더는 < 표1> 과같이웹프로바이더와데이타베이스프로바이더, 2종류로구분된다. 웹프로바이더와데이타베이스프로바이더의가장큰차이점은, Java 웹프로바이더의경우, 프로바이더클래스와포틀릿클래스를물리적으로 Oracle9i Application Server Portal이설치되어있지않은다른서버의파일시스템에개발해놓고단지그클래스들에대한위치정보만을 웹프로바이더 데이타베이스프로바이더 Java URL 서비스 오라클에서미리구현한프로바이더클래스및 소스코드없이외부사이트포함가능 미리구현된PL/SQL 패키지제공 라이브러리제공됨 Java, 서블릿, JSP 이용 URL 정보와웹파라미터이용 Oracle PL/SQL 이용 HTTP, XML, SOAP, J2EE 등과같은오픈구조이용 별도의프레임워크이용 소스, 수행파일저장은데이타베이스가아닌파일시스템에분산저장가능 모든코드정보는데이타베이스안에저장되고 등록작업은데이타베이스에서하지않고Oracle9i JDeveloper나 등록작업도데이타베이스에서수행 Oracle9i Application Server Portal 기능이용 < 표 1> 프로바이더의구분 2003 SUMMER 091
package portlets.sample; import java.io.*; import oracle.portal.provider.v2.portletexception; import oracle.portal.provider.v2.render.portletrenderrequest; import oracle.portal.provider.v2.render.http.*; 위내용은 Java 포틀릿프로그램코딩시최소한반드시필요한코딩내용만을표현한것이다. 위에서수입한 (import) 클래스들은 Java- PDK(JPDK) 를통해참조된다. 달리표현하면, 포틀릿안에서 Java-PDK API들을사용하기위한코딩이다. < 그림 3> 웹프로바이더의이용예 Oracle9i Application Server Portal의Repository에등록시키면이용가능하지만, 데이타베이스프로바이더의경우에는프로바이더와포틀릿을 PL/SQL 패키지형식으로반드시데이타베이스안에만들어야하기때문에 Oracle9i Application Server Portal과연결가능한데이타베이스안에만들어주어야한다는것이다. 물론만드는작업과는별도로데이타베이스프로바이더도등록작업을수행해야한다. 이때등록작업이란, Oracle9i Application Server Portal의 Repository에프로바이더와포틀릿정보를저장시켜서웹페이지에연결되어사용될수있는상태로만들어주는것을의미한다. 그러므로, 프로그램을분산개발할경우에는웹프로바이더방식이유리하다고볼수있다. < 그림 3> 은웹프로바이더를이용하는경우를나타낸것이다. < 그림 3> 에서보듯이 Oracle HTTP Server나 OC4J나기타Java 서비스를제공하는원격웹서버가있다면, 그곳에서 Java 프로바이더와포틀릿을생성하고등록작업은 Oracle9i Application Server Portal의데이타베이스쪽으로해놓으면 Oracle9i Application Server Portal Page 에서이용이가능하다. Java 포틀릿생성과정자, 그러면 Java 포틀릿을생성하는간단한예를통해심층이해를구하도록하자. 여기서는포틀릿생성방법을7단계로나누어살펴보겠다. public class sample_portlet extends BaseManagedRenderer { public void renderbody (PortletRenderRequest pr) throws PortletException { try { PrintWriter out = pr.getwriter(); out.println ("<h2>portlet content...</h2>"); } //try catch... } //renderbody } //sample_portlet 위내용은JPDK API 중가장중요한클래스와메소드를보여준다. 바로 BaseManagedRenderer라는추상클래스 (abstract class) 인데이클래스가가지고있는 renderbody( ) 라는메소드를통해정의된내용이포틀릿의결과화면으로나오게된다. 즉, sample_portlet이라는포틀릿이웹페이지에링크되면, Portlet content... 라는내용이화면에나오게되는것이다. 참고로, Java의경우Java 프로바이더프로그램은별도로작성하지않는다. JPDK를통해제공되는Java 프로바이더를포틀릿프로그램들이공유해서사용하게된다. 즉, STEP 1에서 import 문장들만정확히써준다면프로바이더를따로프로그래밍할필요가없다. 그러나, 데이타베이스프로바이더의경우에는 PLSQL-PDK를사용해서프로바이더도직접만들어주게끔되어있다. STEP 1 : Java 포틀릿소스코딩이작업은원격웹서버에서할수있다. STEP 2 : 프로바이더규정파일정의여러개의포틀릿은하나의프로바이더에연결되어관리된다. 프로바이더도 092 ORACLE KOREA MAGAZINE
필요하다면여러개를생성해서사용할수있다. 이때각각의프로바이더에대한정보를가지는프로바이더규정파일 (Provider Definition File) 들이있다. 디폴트파일의이름은provider.xml이다. 새로운프로바이더를셋업했다면다른이름의프로바이더규정파일이름을사용할수있다. 그래서보통프로바이더하나당하나의프로바이더규정파일을가진다. 프로바이더규정파일은나중에 Oracle9i Application Server Portal의 Repository에프로바이더와포틀릿에대한정보를등록하는작업을할때등록되는정보를제공하는용도로사용된다. <?xml version="1.0" encoding="utf-8" standalone="yes"?> <?providerdefinition version="3.1"?> 1)<provider class="oracle.portal.provider.v2.defaultprovider Definition"> <session>false</session> 2)<portlet class="oracle.portal.provider.v2.defaultportletdefinition"> <id>21</id> <name>sample Portlet1</name> <title>simple portlet</title> <description>first portlet.</description> <timeout>30</timeout> <timeoutmessage>portlet timed out.</timeoutmessage> <acceptcontenttype>text/html</acceptcontenttype> <showedit>false</showedit> <showeditdefault>false</showeditdefault> <showdetails>false</showdetails> <showpreview>true</showpreview> <hashelp>false</hashelp> <hasabout>false</hasabout> <renderer class="oracle.portal.provider.v2.render.rendermanager"> <contenttype>text/html</contenttype> 3) <showpage class="portlets.sample.sample_portlet"/> </renderer> </portlet> 4) </provider> 위의코드에서 1) 부분이프로바이더클래스를이용해서프로바이더를정의하는부분이다. 그리고이프로바이더가포함하는포틀릿을 2) 부분과같이정의한다. 3) 부분에서는실제실행될포틀릿클래스정보가정의된다. 1) 번라인과4) 번라인사이에여러개의포틀릿정보가포함될수있다. 또한 <showpage 부분에JSP를포함시킬수도있다. 위의코드에는서블릿이정의되어있다. STEP 3 : web.xml 구성파일정의이파일에는웹애플리케이션배치파라미터정보가정의된다. 웹애플리케이션배치파라미터 (Web application deployment parameters) 정보란 Oracle9i Application Server Portal Server에서, 정확히이야기하면, PPE(Parallel Engine) 에서Java 포틀릿클래스를요청하기위해필요한정보들을말한다. 달리말하면, 이 web.xml의내용은 J2EE 기반으로 Java 포틀릿이실행시에필요한내용들로구성되어있다. 예를들면, 다음과같은것이있다. 실행하려는포틀릿의서블릿규정 : 샘플 실행하려는포틀릿의서블릿URL 매핑 : /providers/ 위의내용들은포틀릿을등록하는작업과또실행과정에서필요하다. 예를들면, 나중에다음과같은 URL 정보를통해 Oracle9i Application Server Portal의Repository 안에있는포틀릿정보가PPE에제공된다. http://portalservename:port/providers/sample STEP 4 : 프로바이더배치배치 (deploy) 작업이란 OC4J 환경에서실행되는프로그램과관련환경파일들을일정한형식의압축파일로만들어놓는작업을말한다. 이작업은 J2EE 기반환경에서 Java 프로그램이실행되기위해서필요한작업이라고할수있다. 물론, Oracle9i Application Server Portal도J2EE 기반제품에속하기때문에이방식을따라주어야 Java 프로그램이포틀릿으로실행될수있다. 이작업은 Oracle9i JDeveloper를이용하면간단히수행할수있다. 수행방법은Oracle9i JDeveloper 레퍼런스를참고하기바란다. STEP 5 : 프로바이더배치에대한확인프로바이더배치가잘끝나게되면, 확인작업이필요하다. URL을개념적으로쓰게되면다음과같다. 대상서버 : port/virtual_path/providers 130.35.99.92 : 프로바이더를배치할때대상이된 OC4J 서버 (Oracle9i Application Server Portal Server가될수도있고원격웹서버가될수도있다. 8888 : 대상OC4J에설정되어있는포트번호 /portlet_demos/ : 프로바이더배치작업때정의된가상경로 /providers/ : 배치된프로바이더의이름정보 2003 SUMMER 093
< 화면 2> 에서결과로나오는것들은 STEP 2에서설명되었던 Provider.xml 안에정의되어있는포틀릿들에대한이름들이다. 아직까지 Oracle9i Application Server Portal의 Repository에등록작업이수행되지는않았지만, 위에설명된 URL 정보를가지고등록작업을수행하고나면, 이화면에나왔던포틀릿들에대한정보들이등록될것이다. STEP 7 : 포탈페이지에포틀릿붙이기자, 이제마지막으로 Oracle9i Application Server Portal의 Repository에등록되어있는포틀릿정보를포틀릿웹페이지에붙여본다. < 화면 4> 는포틀릿저장소안에들어가있는프로바이더와포틀릿정보를확인하고, 웹페이지에넣어주는작업을하는화면이다각폴더는 Oracle9i Application Server Portal에서만들어준정보분류를취한그룹들이고, 디폴트로 New 라는폴더안에새로등록한프로바이더와포틀릿에대한정보가들어가있다. 화면의오른쪽부분으로하나의포틀릿을이동하는작업을하면바로해당웹페이지에포틀릿이추가된다. < 화면 2> 프로바이더배치에대한확인 < 화면 4> 포탈페이지에포틀릿붙이기 STEP 6 : 웹프로바이더등록 < 화면 3> 은웹프로바이더를등록하는 Oracle9i Application Server Portal의Admin 화면이다. 이화면에서는Oracle9i Application Server Portal의 Repository에등록되는프로바이더이름정보와웹프로바이더라는 Style 부분이나온다. 다음 버튼을누르면 STEP 5에서정의했던 URL 정보를입력하라고나올것이다. 그정보를통해PPE는등록된프로바이더를해당원격웹서버로요청할수있게되고, 포틀릿에대한정보를얻게된다 < 그림1>. 정보관리의시너지효과지금까지 Oracle9i Application Server Portal의기본프레임워크와기능에대해서, 그리고프레임워크에서중요한역할을담당하는프로바이더및포틀릿에대해알아보았다. 끝으로, Oracle9i Application Server Portal을통해서오라클및기타벤더가제공하는다양한애플리케이션솔루션들, 예를들면, Oracle Enterprise Manager나 Oracle Discoverer, Oracle E-Business Suite의 Enterprise Resource Planning 등에서나온결과물들또는외부웹사이트정보등을하나의통합된화면으로만들어정보관리의시너지효과를거둘수있다는것을강조하고싶다. 나아가 Oracle9i Application Server Portal은요즘더욱부각되고있는비즈니스인텔리전스시스템도지원할수있다. 이글이독자들이 Oracle9i Application Server Portal을이해하고수용하는데도움이되길바란다. < 화면 3> 웹프로바이더의등록 094 ORACLE KOREA MAGAZINE