SSISO Community

시소당

J2EE를 이용한 서비스 지향 아키텍쳐 프레임웍 설계

새로운 Java API로 쉬워진 웹 서비스 액세스

Naveen Balani
기술 분석가
2004년 1월 23일

서비스 지향 아키텍쳐(SOA)에 전수된 약결합과 상호운용성은 많은 기업 애플리케이션이 선호하는 기능이다. 이 글에서 J2EE 1.4의 웹 서비스 기능들이 SOA 시스템 구현에 어떻게 쓰이는지 설명한다.

이 글에서 Java 2 Platform, Enterprise Edition (J2EE)를 사용하여 SOA() 프레임웍을 설계 및 개발하는 방법을 배우게 될 것이다. SOA 프레임웍을 채택하여 조직은 시스템들 간 약결합과 재사용성을 극대화 할 수 있다. 이 글에서는 가상의 기업을 예로 들어 SOA 프레임웍을 통한 수 차례의 반복을 실험할 것이다. 이 글에서 개발된 샘플 프레임웍은 실제로도 쉽게 적용될 수 있다.

SOA와 웹 서비스: 소개
SOA는 분산 소프트웨어 모델이다. SOA의 핵심 컴포넌트에는 서비스, 동적발견,메시지가 포함된다.

  • 서비스는 네트워크를 통해 사용할 수 있는 호출 가능한 루틴이다. 서비스가 인터페이스 계약을 노출하는데 이것은 인터페이스가 수락하고 리턴하는 서비스와 메시지의 작동을 정의한 것이다.

  • 인터페이스는 퍼블릭 레지스트리 또는 디렉토리에 종종 퍼블리시 된다. 기업들이 전화번호를 전화번호부의 광고란에 싣는 이치와 비슷하다. 클라이언트는 다양한 범주에 속한 서비스를 동적으로 쿼리하여 특정 서비스를 검색할 수 있다. 이 프로세스를 서비스의 동적 발견이라고 일컫는다.

  • 서비스 소비자 또는 클라이언트는 메시지들을 통해 서비스를 소비한다. 인터페이스 계약이 플랫폼 독립, 언어 독립적이기 때문에 메시지는 XML 스키마에 순응하는 XML 문서를 사용하여 만들어진다.

그림1 SOA의 다양한 역할을 보여준다.

그림 1. SOA의 역활들

SOA로서의 웹 서비스
The roles in an SOA

웹 서비스는 오픈 표준과 플랫폼 독립적인 프로토콜의 상단에 구현된다. 웹 서비스는 서비스 제공자와 사용자 통신에 HTTP를 통한 SOAP(XML 기반 프로토콜)을 사용한다. 서비스는 WSDL(Web Service Definition Language)로 정의된 인터페이스로서 노출된다. 문법은 XML로 정의된다. 언어 독립적인 프로토콜인 UDDI는 레지스트리들 간 인터랙팅과 서비스 검색에 사용된다. 이 모든 기능들 때문에 SOA 애플리케이션 개발에 웹 서비스가 최상의 선택이 되는 것이다.

SOA/웹 서비스 프레임웍 개발에 J2EE 1.4 플랫폼 사용하기
J2EE 1.4 플랫폼은 새로운 JAX-RPC 1.1 API를 통해 웹 서비스를 완벽히 지원한다. 서블릿과 엔터프라이즈 빈에 근거한 서비스 엔드포인트를 지원한다. JAX-RPC 1.1은 WSDL과 SOAP 프로토콜에 근거한 웹 서비스의 상호 운용성을 제공한다. J2EE 1.4 플랫폼은 Web Services for J2EE specification (JSR 921)을 지원한다. 이는 웹 서비스의 전개 요구사항을 정의하고 JAX-RPC 프로그래밍 모델을 사용한다. 다양한 웹 서비스 API에 더하여, J2EE 1.4 플랫폼은 WS-I Basic Profile 1.0을 지원한다. WS-I Basic Profile 표준은 웹 서비스가 다양한 프로그래밍 언어, 오퍼레이팅 시스템, 벤더 플랫폼의 장벽을 극복할 수 있도록 하여 많은 애플리케이션들이 인터랙팅 할 수 있도록 한다. (참고자료) J2EE 1.4는 크로스 플랫폼 웹 서비스 상호운용성에 더해 플랫폼 독립성과 완벽한 웹 서비스 지원을 이룩했다.

J2EE 1.4를 사용하여 웹 서비스 클라이언트는 두 가지 방식으로 J2EE 애플리케이션에 접근할 수 있다. 클라이언트는 JAX-RPC API로 구현된 웹 서비스에 액세스 할 수 있다. JAX-RPC는 서블릿을 사용하여 웹 서비스를 구현한다. 웹 서비스 클라이언트는 빈의 서비스 엔드포인트 인터페이스를 통해 STATELESS 세션 빈에 액세스 한다. stateless EJB 컴포넌트를 웹 서비스로서 노출할 때 다양한 혜택이 있다:

  • 기존 비즈니스 로직과 프로세스를 사용한다: 많은 조직에서 기존 비즈니스 로직은 EJB 컴포넌트를 사용하여 코딩되었다. 이를 웹 서비스를 통해 노출하는 것은 외부 세계에 서비스로 내보낼 수 있는 최상의 방법이다. EJB 엔드포인트는 엔드포인트와 같은 티어에 비즈니스 로직을 위치시키기 때문에 훌륭한 선택이 된다.

  • 동시성 지원: STATELESS 세션 빈으로서 구현된 EJB 서비스 엔드포인트는 멀티-쓰레디드 접근을 걱정할 필요가 없다. EJB 컨테이너가 STATELESS 세션 빈의 특정 인스턴스로 요청을 직렬화 해야 하기 때문이다.

  • 서비스로의 보안 접근: 엔터프라이즈 빈은 다양한 메소드 레벨의 보안 기능을 채택하여 전개 디스크립터에 선언된다. 모델 레벨의 역할은 실제 주요한 도메인으로 매핑되는 것이다. 웹 서비스 엔드포인트로서 EJB 컴포넌트를 사용하면 이 메소드 레벨 보안을 웹 서비스 클라이언트로 가져올 수 있다.

  • 트랜잭션: EJB 서비스 엔드포인트는 전개 디스크립터에서 지정된 트랜잭션에 따라 실행된다. 컨테이너가 트랜잭션을 핸들하기 때문에 빈 개발자가 트랜잭션 핸들링 코드를 작성할 필요가 없다.

  • 확장성: 거의 모든 EJB 컨테이너는 STATELESS 세션 빈의 클러스터링을 지원한다. 따라서 부하가 증가할수록 부가 머신들이 클러스터에 추가될 수 있다. 웹 서비스 요청은 그러한 다양한 서버들로 향한다. EJB 엔드포인트로서 웹 서비스를 모델링 함으로서 확장성 있는 서비스를 제공하고 신뢰성도 높일 수 있다.

  • 풀링(pooling)과 리소스 사용: EJB 컨테이너는 STATELESS 세션 빈의 풀링을 제공한다. 이는 리소스 활용과 메모리 관리를 강화시킨다. EJB 엔드포인트로서 웹 서비스를 모델링하면 그와 같은 기능들이 쉽게 확장되어 웹 서비스가 많은 클라이언트 요청에 효과적으로 대응할 수 있게 된다.

    다음 섹션에서는 아키텍쳐에 웹 서비스로서 STATELESS EJB 컴포넌트를 노출하는 방법을 설명하겠다.

    SOA/웹 서비스 프레임웍 설계하기
    청 구서 발행, 금융, 인보이스 작업 같은 다양한 시스템들이 서로 상호작동 해야 하는 기업의 예를 들어보자. 이 애플리케이션들은 외부 세계에 노출되어 다양한 비즈니스 파트너들이 이 애플리케이션들과 인터랙팅 할 수 있어야 한다. 또한 다양한 애플리케이션을 위한 웹 기반의 솔루션도 마련해야 한다. 최상의 선택은 서비스에 기반한 약결합 시스템을 설계하는 것이다. 이들 서비스는 오픈 표준의 후원을 받아서 어떤 비즈니스 파트너라도 그 서비스를 호출할 수 있다.

    이렇게 따지다 보면 웹 서비스/SOA 프레임웍에 초점이 맞춰질 것이다. STATELESS EJB 컴포넌트를 통해 웹 서비스로서 노출된 다양한 서비스들과 비즈니스 프로세스를 갖춘 프레임웍이다. 그림2는 기업의 내부 애플리케이션을 위한 SOA이다.

    그림2. 기업의 내부 애플리케이션을 위한 SOA
    A service-oriented architecture for internal corporate applications

    SOA 프레임웍에서 인터랙팅하는 다양한 컴포넌트들이 아래 나열되어 있다. 이는 전형적인 MVC2 프레임웍이다.

    • 클라이언트: 사용자들은 애플리케이션의 클라이언트로서 작용하는 웹 브라우저를 통해 다양한 애플리케이션들과 인터랙팅한다. 예를 들어 청구서 발행 부서 사용자는 청구서 발행에 대한 세부사항을 입력하고 그 정보를 애플리케이션에 게시한다. JSP 페이지와 XMHTML는 클라이언트 페이지들을 렌더링하는데 사용될 수 있다.

    • 애플리케이션 콘트롤러: 애플리케이션 콘트롤러는 메인 콘트롤러 서블릿이다. 초기화를 담당하고 요청과 응답을 요청 프로세서에 보낸다.

    • 요청 프로세서: 요청 프로세싱을 수행하는 자바 클래스로서 필요한 프로세싱을 수행하기 위해 상응하는 요청 핸들러를 호출하며 작동한다.

    • 요청 핸들러: 요청 핸들러는 특정한 요청 액티비티를 수행한다. 이를 테면 다양한 엔터프라이즈 정보 시스템(EIS)에서 정보를 추가하거나 검색하기위해 서비스들과 인터랙팅 하는 것이 한 예이다. 요청 핸들러는 비즈니스 로케이터에 의존하여 상응하는 서비스를 찾은 다음 그 서비스를 통해 원하는 EIS 정보에 액세스한다.

    • 비즈니스 로케이터: 서비스를 검색하는 복잡함을 숨긴다. 캐싱 로직 또한 제공한다. 비즈니스 로케이터는 많은 형식을 취할 수 있다. 예를 들어 웹 서비스 로케이터, EJB 로케이터, JMS 로케이터 등으로 될 수 있다.

    • 세션 Facade: 멀티 시스템 또는 서비스에서 메소드들을 모아 복잡한 객체를 간단히 보여준다. 세션 Facade는 EJB 웹 서비스 메소드 주변의 래퍼이다.

    • EJB 웹 서비스: EJB 1.4 스팩에 따라, 웹 서비스 엔드포인트는 STATELESS 세션 빈으로서 모델링 될 수 있다. 앞서 언급한 것 처럼 이 기술에는 많은 이점이 있다.

    • 데이터 액세스 인터페이스: EJB-CMP, JDO, DAO, 다양한 영속성 기술 등 다양한 기술을 사용하여 EIS에 접근한다. 사용된 접근 기술은 인터페이스 요구사항과 페치, 삽입 또는 업데이트 될 데이터의 양에 의존한다. 이 레이어는 EIS와 인터랙팅하고 데이터를 상응하는 EJB 웹 서비스 메소드에 메소드가 기대하는 형식으로 리턴한다.

    • MQSeries/JCA/CCF: 기존 메인프레임 기반의 서비스는 웹 서비스로서 노출 될 수 있으며 또한 이들을 외부 세계에 드러낼 수 있다. 웹 서비스 클라이언트는 HTTP 기반 SOAP 프로토콜을 사용하여 EJB 웹 서비스와 인터랙팅한다. EJB 메소드는 요청들을 JMS 프로토콜을 통해 MQSeries 큐에 게시한다. 메인프레임 쪽의 MQSeries 서버는 IMS DC 같은 백엔드 시스템과 인터랙팅에 필요한 로직을 제공하는 상응하는 COBOL 기반의 프로그램을 실행한다. 이 프로그램은 응답을 큐에 게시하고 애플리케이션 로직에 의해 검색되고 다시 EJB 메소드에 게시된다. SOAP 메시지는 HTTP, HTTPS, JMS 같은 다양한 프로토콜을 통해 전송될 수 있지만 이 예제에서는 HTTP와 HTTPS 만 사용하겠다.

    이 컴포넌트들은 기업 내부 애플리케이션의 서비스 지향 아키텍쳐의 기초를 제공한다.

    서비스 노출하기
    서 비스를 외부 사용자에게 노출하려 한다면 권한이 있는 사용자들만 서비스에 액세스 할 수 있도록 하는 특정한 유형의 보안 제한이 필요하다. 한 가지 방법은 금지된 웹 서비스 요청을 필터링하고 로깅과 보안 제한을 제공하는 웹 서비스 레이어를 추가하는 것이다. 이 필터는 서비스의 서브세트에서 권한을 받은 클라이언트에만 노출하는 기능도 제공한다.

    그림3은 기업 외부 애플리케이션을 위한 서비스 지향 아키텍쳐이다. 정제된 서비스를 외부에 노출한다.

    그림3. 서비스 지향 아키텍쳐; 외부에 노출하기
    A service-oriented architecture, exposed to the outside world

    다음은 이 아키텍쳐의 기본적인 기능 단위이다:

    • 외부 클라이언트: 웹 기반 클라이언트, 모바일 클라이언트, .NET environment, Perl, 기타 프로그래밍 언어로 코딩 된 클라이언트가 포함될 수 있다. 이 모든 클라이언트들은 다양한 서비스에 요청을 보낸다. WS-I Profiles에 순응하는 한 상호운용성 문제는 없을 것이다.

    • 기업 방화벽: 보안 정책에 기반하여 샘플 기업은 인트라넷과 인터넷 사이에 방화벽을 설치하여 인커밍 패킷 정보를 차단했다.

    • Web Services Gateway:외부 서비스를 노출하기 위한 게이트웨이로 WebSphere Application Server 5.0에 포함된 Web Services Gateway를 사용하기로 했다. (Resources) Web Services Gateway는 미들웨어 컴포넌트로서 웹 서비스의 호출 작동 동안 인터넷과 인트라넷 사이에 매게 프레임웍을 제공한다. Web Services Gateway를 사용하여 개발자들과 IT 매니져들은 안전하게 웹 서비스를 노출하여 방화벽 밖의 클라이언트가 호출 할 수 있도록 한다. 이것은 서비스의 관리용 모델(전개/전개취소)과 필터(게이트웨이를 통해 흐르는 요청과 응답에 따라 작동하는 커스텀 코드)를 포함하고 있다. SOAP/HTTP 요청을 핸들하고 자바 클래스, EJB 컴포넌트 또는 SOAP 서버에 보내지는 게이트웨이를 통해 전달되는 요청을 핸들한다. 이것은 웹 서비스의 개별 메소드에 보안을 제공하고 전체적으로는 게이트웨이를 제공한다. Web Services Gateway를 사용하여, 클라이언트에서 온 요청들은 서비스에 필요한 메시징 프로토콜로 변형될 수 있다. 예를 들어 클라이언트의 요청은 HTTP를 통한 SOAP으로서 온다. 하지만 내부적으로는 JMS 프로토콜을 통한 SOAP을 사용한다. Web Service Gateway는 하나의 프로토콜에서 다른 프로토콜로의 수렴기능을 제공한다.

    • EJB services: EJB 서비스에 변화가 없다. 나머지 프로세스는 그림 2에 설명한 아키텍쳐에서 제공하는 인트라넷 기반의 서비스와 비슷하다.

    EJB 컴포넌트를 사용한 대단위(coarse-grained)
    지 금까지 보았던 프로세스는 소단위(fine-grained) 웹 서비스를 클라이언트에 노출한 것이다. 각 비즈니스 서비스가 하나의 비즈니스 프로세스에서 실행되는 한 이러한 설정은 훌륭하게 작동한다. 하지만 고객이 자금을 송금 하려고 한다면? 그와 같은 상황에서는 대단위(coarse-grained) 인터페이스가 적합하다. 고객에게 모든 필요한 정보를 제공하고 이체될 금액, 송수신 은행의 정보 등이 포함되어야 한다. 또한 그와 같은 시나리오에서는 비즈니스 로직의 실행 전에 밸리데이션이 수행되어야 한다. 웹 서비스용 메소드를 디자인 할 때 이 모든 사항들을 염두해야하고 네트워크 호출 외에도 XML 요청과 응답의 파싱 및 고안에 대한 오버헤드도 생각해야 한다.

    이러한 요소들을 염두해 두고 Session Facades를 EJB 웹 서비스 엔드포이트로서 모델링 할 수 있다. Session Facades는 웹 서비스 메소드에 요청을 보내기 전에 요청의 타당성 검사를 할 수 있다. 이러한 방식으로 대단위 서비스를 웹 서비스 클라이언트에 제공하는 것이다.

    그림 4는 기업의 외부 애플리케이션에 대한 서비스 지향 아키텍쳐의 반복을 보여준다. 이 버전의 아키텍쳐는 대단위 서비스를 외부에 노출한다.

    그림4. 대단위 서비스의 SOA
    Service-oriented architecture with coarse-grained services

    여기에서, 구현은 그림 3에 서 강조한 것과 같다. 유일한 차이점은 Session Facades를 웹 서비스 엔드포인트로서 노출했다는 점이다. EJB 웹 서비스는 원격 인터페이스가 아닌 로컬 인터페이스로서 모델링 될 수 있다. Session Facades와 모델 레벨의 보안을 사용하여 서비스 실행을 제한할 수 있다. Web Service Gateway를 사용하면 웹 서비스 클라이언트에 대한 보안 측정도 가능하다. 요구 사항에 따라 대단위 서비스와 소단위 서비스의 결합도 가능하다. 웹 서비스 게이트웨이 미들웨어를 튜닝하여 외부 클라이언트에게 이 둘 모두를 노출할 수 있는 것이다.(참고자료)

    참고자료

  • 739 view

    4.0 stars