IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  WebSphere  >

WebSphere Application Server V6.1 포틀릿 컨테이너 활용하기: Part 1: 포틀릿 컨테이너 (한글)

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

토론

샘플 코드


제안 및 의견
피드백

난이도 : 중급

Stephan Hesmer, Performance Chief Developer, IBM
Birga Rick, Portlet Runtime Technical Lead, IBM

2006 년 10 월 24 일

IBM® WebSphere® Application Server V6.1에서 사용할 수 있는 JSR 168 포틀릿 컨테이너를 설명하고, WebSphere Portal에서의 사용법과 비교해 봅니다.

이 글에서는 포틀릿 컨테이너를 소개하고, 포틀릿 설치 방법, 포틸릿에 액세스 하는 방법, URLAddressability를 사용하는 방법을 설명합니다. 예제 포틀릿을 다운로드 하여 직접 사용해 보면서 WebSphere Application Server V6.1 포틀릿 컨테이너의 기능을 익혀보도록 합시다.

Java™ Portlet API에 익숙한 자바 포틀릿 프로그래머를 위한 글입니다. 참고자료 섹션에서 필요한 기술들 관련 링크를 참조하기 바랍니다.

머리말

JSR 168 Portlet API는 포틀릿 개발에서 채택되는 표준이다. JSR 168 Portlet API를 지원하는 포틀릿 컨테이너들은 Pluto 같은 오픈 소스 프로젝트와 WebSphere Portal같은 엔터프라이즈 제품에서 오랫동안 사용되었다. JSR 168 포틀릿 컨테이너는 WebSphere Application Server V6.1의 중요한 일부이다. WebSphere Portal과 WebSphere Application Server(이후 Application Server)의 공통 컴포넌트이다. WebSphere Portal은 포틀릿 컨테이너를 활용하고 이 기능을 확장한다. Application Server에 포틀릿 컨테이너를 제공하여, IBM은 웹 애플리케이션을 위한 서버 사용자 인터페이스(UI)를 통해 포틀릿 프로그래밍 모델을 지원하고 있다. 프로그래머들은 Application Server를 사용하여 쉽게 포틀릿을 개발할 수 있고, 이들은 WebSphere Portal에서 이러한 포틀릿들을 재사용할 수 있다. 이 글에서는 애플리케이선 서버의 JSR 168 포틀릿 컨테이너를 소개한다. 우선, 컨테이너 기능을 개괄적으로 설명하고 포틀릿을 설치하여 액세스 하는 방법을 설명하겠다. 마지막으로 Application Server에서의 초석이 되는 포틀릿 컨테이너인 Addressability를 설명한다. 또한 이러한 기능들을 WebSphere Portal의 비슷한 기능들과 비교도 해보겠다.

본 시리즈는 개발 플랫폼으로서 Application Server에서 포틀릿 컨테이너를 사용하는 개발자와 아키텍트와, WebSphere Portal을 모르거나, 개발 시 WebSphere Portal을 사용할 필요성을 느끼지 못하는 사람들을 겨냥한 글이다. 컨테이너를 Application Server에 배치하면 포틀릿 개발이 훨씬 더 쉬워진다는 것을 알고 있는 WebSphere Portal에 능숙한 개발자와 아키텍트도 이 글의 대상이다.

This article series is intended for several audiences, including developers and architects who would like to use the portlet container in Application Server as a development platform, and do not already know (or don’t require) WebSphere Portal for development. It is also for developers and architects already skilled with WebSphere Portal, who would like to understand how portlet development is made easier for them by the placement of the container into the application server.




위로


Application Server를 사용할 때

애플리케이션 서버에 이 새로운 포틀릿 컨테이너를 사용할 때, 두 개의 포틀릿 컨테이너 중 하나를 선택해야 한다:

  • Application Server의 포틀릿 컨테이너는 JSR 168 Portlet API 같은 기본 기능을 제공한다.
  • WebSphere Portal의 포틀릿 컨테이너는 속성(property) 브로커 이벤트, 포틀릿 서비스 이벤트, 기타 기능 같은 추가 기능들이 있다.

따라서, Application Server에서 포틀릿을 개발한다면 WebSphere Portal에서도 실행될 것이다. 하지만 그 반대는 불가능 하다. Application Server 포틀릿 컨테이너에서는 지원되지 않는 WebSphere Portal의 기능을 사용하는 포틀릿을 구현한다면 Application Server에서는 실행되지 않을 것이다. 하지만 기능을 강등시키는 방식으로 코드를 작성할 수는 있다.

Because portlets are user facing applications, it is best to use the portlet container in Application Server when your application requirements fit the features provided with the platform. For Application Server, this is mostly the case if you need only one user interfacing component to be displayed on the page, without feature rich aggregation. On the other hand, use the portlet container in WebSphere Portal if you need a feature-rich aggregation with an extended programming model.




위로


샘플 포틀릿

World Clock예제를 위해 샘플 포틀릿을 다운로드 하여 참조하기 바란다. 샘플에 대한 자세한 설명은 IBM Portlet API에서 JSR 168 portlet API로 WorldClock 포틀릿 변환하기(Converting the WorldClock portlet from the IBM Portlet API to the JSR 168 portlet API) (참고자료)를 참조하기 바란다.




위로


포틀릿 컨테이너 기능 요약

이 섹션에서는 JSR 168 포틀릿 컨테이너에서 제공하는 기능들을 설명한다. 세 가지 토픽, 접근성(Addressability), 관리 가능성(manageability), 확장성(extensibility)으로 나누었다. 표 1에서는 토픽에 대한 설명과 함께 본 시리즈에서 언급된 곳을 표시했다.


표 1: 핵심 포틀릿 컨테이너 기능
메인 토픽 / 기능설명참조 시리즈 …
접근성(Addressability)
URLAddressabilityURLAddressability는 간단한 URL 요청으로 브라우저 페이지에서 직접 액세스하여 볼 수 있다. 서블릿을 호출하는 것과 정확히 같은 방식으로 콘텍스트 루트와 이름으로 포틀릿을 호출할 수 있다. 예: http://localhost:9080/portlets/StdWorldClockPart 1
Aggregation집합(Aggregation)은 Java Server Page 태그 라이브러리를 통해 지원된다. 이 태그 라이브러리는 쉽게 사용될 수 있고 여러 포틀릿들을 하나의 페이지로 모으는데 사용되는 기본 기능들을 제공한다. Part 2
관리 가능성(manageability)
Portlet Install / wsadminApplication Server에서 기존 메커니즘을 사용하여 포틀릿을 쉽게 설치할 수 있다. wsadmin이나 Administrative Console을 사용하여 포틀릿 컨테이너를 설정할 수 있다. Part 1
Portlet MBean APIPortlet MBean API를 통해서 애플리케이션은 모든 포틀릿의 데이터와 포틀릿 애플리케이션에 액세스 할 수 있다. 이것은 애플리케이션이나 포탈을 관리하는 필수 요소이다. Part 3
Extended Deployment DescriptorJSR 168 Java Portlet Specification외 추가 기능들은 확장 전개 디스크립터에 저장 및 설정된다. 예를 들어, 구성정보에서 URLAddressability 기능을 온/오프 할 수 있다. Part 3
CachingApplication Server dynacache 인프라스트럭처가 강화되어 포틀릿 동적 캐싱(dynacache)을 지원한다. 이는 몇몇 추가 옵션들을 포함한 서블릿 동적 캐싱(dynacache)의 확장이다.Part 3
Performance Metrics포틀릿 컨테이너를 통해 현재 실행중인 포틀릿에 대한 퍼포먼스 평가를 Performance Viewer에서 볼 수 있다. Performance Measurement Instrumentation (PMI)와 Request Metrics가 포함된다. Part 3
확장성(extensibility)
PortletDocumentFiltersTML 외 다른 마크업을 지원하거나 포틀릿 조각 (fragment)을 조작하기 위해서는, 포틀릿 컨테이너를 쉬운 개발과 전개를 가능케 하는 Servlet Filter 기반 API인 PortletDocumentFilters로 확장한다. Part 2

이제 포틀릿 컨테이너 기능에 대해 배웠으니 포틀릿 애플리케이션을 설치하는 방법을 배워보자.




위로


포틀릿 설치하기

168 Java Portlet Specification은 포틀릿 애플리케이션 전개 패키지를 웹 애플리케이션의 확장으로 정의한다. 이것은 Web ARchive (WAR) 파일로서 패키지 된다. 따라서, 사용자 관점에서 보면 포틀릿을 설치하는 것과 서블릿 설치는 같다.

관리 콘솔이나 wsadmin이라고 하는 스크립팅 인터페이스를 사용하여 포틀릿을 설치할 수 있다. 다음은 world clock 포틀릿을 사용하는 두 가지 방법을 설명한다.

WebSphere Administrative Console 사용하기

  1. WebSphere Administrative Console을 연다. 서버가 로컬이라면 브라우저에서 연다:
    http://localhost:9060/ibm/console

  2. 로그인 하여 Install New Application 섹션에 액세스 한다.
  3. 경로 이름을 world clock 포틀릿으로 입력한다. (그림 1)

    그림 1. Administrative Console에서의 Install New Application 섹션


  4. Install 버튼이 있는 페이지로 갈 때 까진 각 페이지에서 Next를 클릭한다.
  5. Install 버튼을 클릭한다. 서블릿에서 알려진 대로 전개는 정상적으로 진행되고 성공 메시지와 함께 끝이 난다.
  6. 변경 사항들을 저장한다.
  7. 브라우저에서 다음을 열어 애플리케이션을 시작한다.:
    http://localhost:9080/worldclock/StdWorldClock 
    
    

    포틀릿 모습은 그림 2와 같다.


그림 2. View 모드의 world clock 포틀릿

포틀릿을 전개할 때 고려사항

포틀릿 애플리케이션 WAR 파일을 전개할 때 다음 사항들을 염두 해야 한다.

  • 포틀릿과 서블릿은 같은 이름이어서는 안된다. Listing 1에서는 같은 이름이 되지 않도록 하는 예제이다.


    Listing 1. 같은 이름을 가진 포틀릿과 서블릿.
    						
    
    <servlet>
    
    	<servlet-name>BookmarkPortlet</servlet-name>
    
    	...
    
    </servlet>
    
    <portlet>
    
    	<portlet-name>BookmarkPortlet</portlet-name>
    
    	...
    
    </portlet> 
    
    			

  • 서블릿 매핑의 url 패턴은 /<portlet-name>/* 또는 /portlet/<portlet-name>/*과 같아서는 안된다. Listing 2는 그 방법을 보여준다.


    Listing 2. 같은 매핑을 가진 포틀릿과 서블릿
    						
    
    <servlet-mapping>
    
    	<servlet-name>BookmarkPortlet</servlet-name>
    
    	<url-pattern>/BookmarkPortlet/*</url-pattern>
    
    </servlet-mapping>
    
    
    
    <portlet>
    
    	<portlet-name>BookmarkPortlet</portlet-name>
    
    	...
    
    </portlet>
    
     

스크립팅 인터페이스(wsadmin) 사용하기

포틀릿을 설치하는 또 다른 방법은 스크립팅 인터페이스(wsadmin)을 사용하는 것이다.

  1. 우선, wsadmin을 시작하여 서버에 연결한다. Listing 3의 메시지를 보게 될 것이다. :

    Listing 3. 서버에 연결한 후 보이는 메시지
    						
    
    C:\WebSphere\bin>wsadmin
    
    WASX7209I: Connected to process "server1" on node 
    
    HESMERT40Node02 using SOAP connector;  The type of process
    
    is: UnManagedProcess
    
     

  2. 명령어 프롬프트에서, 명령어를 입력하여 포틀릿을 설치한다. (Listing 4)
    중요: Windows 에서도 슬래쉬(forward slash)를 사용하라.

    Listing 4. 포틀릿 설치하기
    						
    
    wsadmin> $AdminApp installInteractive
    
    D:/portlets/StdWorldClock.war {-contextroot /worldclock}
    
    ...
    
    ADMA5013I: Application StdWorldClock.war10af6ae88f7 
    
    installed successfully.
    
     

  3. 설정을 저장한다. (Listing 5)

    Listing 5. 설정 저장하기
    						
    
    wsadmin> $AdminConfig save
    
     

포틀릿을 보려면 다음 URL을 사용하여 브라우저에서 애플리케이션을 연다.:
http://localhost:9080/worldclock/StdWorldClock

그림 2에서 보이는 포틀릿을 볼 수 있다.

포틀릿 컨테이너와 WebSphere Portal 비교하기

WebSphere Portal에서도 WebSphere Portal 관리 인터페이스나 스크립팅 인터페이스(XMLAccess)를 사용하여 비슷한 방식으로 포틀릿을 설치한다.

관리 인터페이스는 포탈의 다양한 영역들을 반영하면서 두 섹션으로 나뉜다. 포틀릿 영역을 사용하여 포틀릿의 모든 측면들을 관리한다. 여기에는 포틀릿을 설치할 때 사용하는 Manage WebModules 포틀릿이 포함된다. WebSphere Portal에 이 기능을 찾으려면, Administration => Portlets => Manage WebModules를 연다. Application Server와는 달리, 포탈 관리 인터페이스는 WAR 파일만 허용한다. EAR 파일은 허용하지 않는다.

스크립팅 인터페이스(XMLAccess)를 사용하여 WebSphere Portal에 포틀릿을 설치할 수도 있다. 참고자료에서 WebSphere Portal Information Center에 대한 자세한 내용을 참고하라. XMLAccess를 사용하여 사전에 전개된 EAR 파일과 WAR 파일들을 설치할 수 있다.


표 2: 포틀릿을 설치할 때의 차이점
토픽WebSphere Application ServerWebSphere Portal
Administrative Console서블릿에 기반한 웹 인터페이스. 포틀릿 EAR과 WAR 파일들을 설치한다. 포틀릿에 기반한 웹 인터페이스. 포틀릿 WAR 파일들만 설치한다.
Scripting Interface명령행이나 JACL과 Python으로 작성된 스크립트를 사용하여 직접적인 인터랙션을 지원한다. EAR과 WAR 파일을 설치한다. XML 기반 스크립팅 환경. WAR 파일이나 사전 전개된 EAR 파일들을 설치한다. WebSphere Portal의 또 다른 스크립팅 인터페이스인 wpscript는 wsadmin과 매우 비슷하지만 포틀릿의 설치는 지원하지 않는다.

포틀릿을 설치한 후에, 포틀릿 설치하기 섹션에서 매우 간단한 URL을 사용하는 예제에서 본 것처럼 브라우저를 사용하여 액세스 한다. 다음 섹션에서는 편집 모드 같은 특별한 포틀릿 기능 등 포틀릿에 접근하는 방법을 설명하겠다.




위로


포틀릿에 액세스하기

JSR 168 Java Portlet Specification은 Servlet Specification과 매우 비슷한 상응하는 전개 디스크립터와 함께 자바 API를 정의한다. Servlet Specification은 url 매핑과 컨텍스트 루트에서 액세스 되는 방법을 정의하여 서블릿을 볼 수 있도록 한다.

한편, 포틀릿은 결합된 방식으로 실행되도록 설계되고, 전체 응답이나 뷰를 소비하지 않는다. 따라서 이들은 언제나 페이지를 다른 포틀릿과 공유한다. JSR 168 Java Portlet Specification에 (URL을 사용한) 포틀릿으로의 직접적인 액세스가 포함되지 않은 이유도 이것이다. 대신, 액세스는 포탈 애플리케이션과 이것의 집합인 프레임웍 몫으로 남겨진다.

Application Server는 리소스로 쉽고 직접적인 액세스를 제공하여 빠른 개발을 가능케 하는 개발자 플랫폼이다. 이 새로운 기능으로 브라우저 내에서 포틀릿에 직접 접근할 수 있다. 이 기능을 URLAddressability라고 한다.

URLAddressability는 JSR 168 Java Portlet Specification에 정의된 포틀릿의 개념을 강화한 것이다. 포틀릿에 url 매핑 개념을 추가한다.

URLAddressability가 어떻게 작용하는지를 상세히 보려면 위 예제를 생각해 보라. 다음 라인을 브라우저 주소 바에 입력하여 World Clock 포틀릿에 액세스 한다. :

http://localhost:9080/worldclock/StdWorldClock

이것은 호스트네임, 포트, 콘텍스트 루트, 경로가 포함된 표준 URL이다. 포틀릿은 WAR 파일로 패키지 되기 때문에 다른 서블릿 WAR 파일처럼 콘텍스트 루트에 전개된다. (/worldclock). URL의 경로는 포틀릿 전개 디스크립터인 portlet.xml 파일에 정의된 포틀릿 이름에 기반하고 있다. 이 경우 포틀릿 이름은 StdWorldClock이다. Listing 6은 portlet.xml이다. :


Listing 6. portlet.xml
				

<portlet>

	<portlet-name>StdWorldClock</portlet-name>

	...

</portlet>

지금까지 시스템에 설치된 모든 포틀릿에 액세스 할 수 있는 구체적인 예제를 통해 이것이 어떻게 작동하는지를 보았다.

다음 URL 패턴은 가장 기본적인 URLAddressability 정의이다. View 모드에서 포틀릿을 작동시킨다.

http://<host>:<port>/<context root>/<portlet name>

WebSphere Portal 비교하기

포틀릿에 접근하는 방법은 WebSphere Portal과 Application Server가 다르다.

WebSphere Portal에서, URL을 통해서 포틀릿에 직접 액세스 할 수 없다. 먼저 이것을 페이지에 전개해야 한다. 전개 후에, 페이지 커스터마이저를 사용하여 기존 페이지에 포틀릿을 전개하거나 새롭게 만들어진 페이지에 전개한다. 그런 다음, 포틀릿은 Portlet State API 같은 프로그래밍 방식으로 직접 액세스 될 수 있다.

Application Server에서, URLAddressability를 사용하여 포틀릿에 접근하기는 더 쉽다. 설치 후에, 포틀릿은 바로 사용할 수 있다. 하지만 집합 기능은 더 적다. WebSphere Portal에서, 더 많은 집합 기능들이 포틀릿에 적용될 수 있다. 페이지 레이아웃 변경하기, 소단위 액세스 컨트롤 적용하기, 규칙 기반 집합 기능이 있다.


표 3: 포틀릿 접근 방식의 차이점
토픽WebSphere Application ServerWebSphere Portal
Addressing portlets각 포틀릿은 URLAddressability를 사용하여 직접 액세스 될 수 있다. 포틀릿은 페이지 커스터마이저를 사용하여 페이지에 전개하여 간접적으로만 액세스 될 수 있다. 따라서 많은 집합 기능을 제공한다.

포틀릿에 접근하는 방법의 기초를 배웠으니 URLAddressability를 자세히 공부해 보자. 다른 포틀릿 모드나 윈도우 상태에서 포틀릿을 호출하는 방법을 배우고 이 시나리오에서 포틀릿 프레퍼런스가 어디에 저장되어 있는지를 알아보자.




위로


URLAddressability

URLAddressability는 포틀릿 기능들을 기존 HTTP와 Servlet 기능들로 연결하여 볼 수 있다. 윈도우 식별자, 액션 플래그, 포틀릿 모드, 윈도우 상태, 렌더 매개변수들은 URL 패턴을 통해 정의된다. 포틀릿 프레퍼런스는 브라우저에 저장된 쿠키로 매핑된다. 이 섹션에서는 두 가지 모두를 자세히 설명한다.

우선, URLAddressability의 전체 기능을 보자. 이는 일반적인 URL 패턴이다. :


http://<host>:<port>/<context>/<portlet-name> 

   [/portletwindow[/ver [/action] [/mode] [/state] [rparam]]]

여러분이 이미 기본적인 어드레싱에 대해 알고 있다고 간주하겠다. (이 패턴의 시작 부분)

  • 여러 포틀릿들이 한 페이지에 디스플레이 되면서 사용할 수 있는 portletwindow 식별자를 제공한다. portletwindow에는 임의의 스트링이 포함된다.
  • The version is always 1 (ver=1.0) because the only version currently supported is 1.0.
  • action 플래그는 포틀릿 액션이 실행되는지의 여부를 정의한다. 추가 매개변수 없이 URL에 나타난다: http://localhost:9080/somecontext/MyPortletName/MyWindowIdentifier/ver=1.0/action.
  • modestate은 포틀릿 모드와 어드레싱 되는 포틀릿의 윈도우 상태를 정의한다. 두 매개변수 모두mode=<mode> 또는 state=<state> 포맷이다.
  • 렌더 매개변수 (rparam)는 URL에 rparam=<name>=<value>로 나타난다. 원하는 만큼의 rparams를 코딩 할 수 있다. (/rparam=hello=world/rparam=hello2=world2).
  • 매개변수의 순서는 위에 보인 url 패턴을 통해 정의되고 혼합될 수 없다.

이전 섹션에서, View 모드에서 world clock 포틀릿에 액세스 하는 방법을 배웠다.

그림 3은 URLAddressibility 문법에 적용되는 URL을 사용하여 Edit 모드에서 액세스 된 포틀릿을 보여주고 있다. :

http://localhost:9080/worldclock/StdWorldClock/window/ver=1.0/mode=edit


그림 3. Edit 모드의 world clock 포틀릿
The world clock portlet in Edit mode

Edit 모드에서는 사용자들이 포틀릿 프레퍼런스를 사용하여 포틀릿을 개인화 할 수 있다. URLAddressability는 윈도우 식별자로 지정된 쿠키에 포틀릿 프레퍼런스를 저장하여 쿠키를 지원하는 HTTP 클라이언트로 프레퍼런스를 저장할 수 있다. 프레퍼런스 쿠키에 대한 자세한 정보는 WebSphere Application Server Information Center (참고자료).

사용자가 View 모드로 돌아온 후에 world clock 포틀릿은 그림 4처럼 보인다.


그림 4. 포틀릿 프레퍼런스를 사용하는 View 모드의 world clock 포틀릿
The world clock portlet in View mode using portlet preferences




위로


맺음말

이 시리즈의 첫 번째 글에서는 Application Server의 포틀릿 컨테이너에 대해 알아보았다. 포틀릿 컨테이너에 사용할 수 있는 기능 설정에 대해 배웠고 다양한 기능들을 소개했다. 포틀릿을 설치하는 두 가지 방법과, Application Server의 포틀릿에 액세스 하는 방법을 배웠다. WebSphere Portal에서 비슷한 태스크를 수행하는 방법도 배웠다. 마지막으로, Application Server에서 사용하여 URL을 통해 포틀릿에 접근 할 수 있는 URLAddressability를 상세히 설명했다. URLAddressability가 매우 쉽고 간단한 방법으로 포틀릿을 작동시키는 방법 및 개발하는 방법을 설명했다.

Part 2에서는 Application Server의 JSR 168 포틀릿 컨테이너의 고급 기능에 대해 설명하고자 한다. 한 페이지에 여러 포틀릿들을 모으고, 이전에 전개된 포틀릿에 대한 정보를 얻고, 기본 포틀릿 작동을 변경하는 방법을 설명한다.

기사의 원문보기





위로


다운로드 하십시오

설명이름크기다운로드 방식
World clock portletStdWorldClock.war75 KB  FTP|HTTP
다운로드 방식에 대한 정보


참고자료



필자소개

Stephan Hesmer는 현재 Performance Chief Developer로서 일하고 있다. 이전에는, WebSphere Portal과 WebSphere Application Server의 Portlet Runtime 아키텍트로서 활동했다. JSR 168 포틀릿 컨테이너를 WebSphere Application Server에 통합하는 책임을 맞고 있다. JSR 168 Java™ Portlet Specification 작업을 하면서, 초기 버전의 JSR 168 Reference Implementation인 Pluto를 디자인 및 구현했다. 2000년, 독일 University of Cooperative Education Stuttgart에서 정보 공학 학위를 받았다. 졸업 후에는 IBM Boblingen Development Laboratory에 입사하여 WebSphere Portal Team에서 일했다.


Author photo

Birga Rick은 독일 IBM Boeblingen Lab의 WebSphere Application Server Portlet Runtime의 기술 리더이다. 2003년에는 JSR168 Reference Implementation(Pluto) 구현 팀의 일원이었다. WebSphere Portal 개발 팀에서 JSR 168 작업 후에는, Portlet Runtime을 WebSphere Portal과 WebSphere Application Server에 통합했다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의