Adobe Flex 2 제품군에는 개발자가 서비스 지향 RIA(리치 인터넷 애플리케이션)를 제작 및 관리하는 방식에 대한 몇 가지 중요한 변경 사항이 적용되었습니다. Flex 패키징에 적용된 변경 사항으로 인해 서버측 구성 요소의 유무에 관계없이 Flex 애플리케이션을 제작하고 배포할 수 있지만 Flex Data Services의 여러 가지 새로운 기능을 이용하면 더욱 가치 있는 작업을 수행할 수 있습니다. 이 문서에서는 Flex Data Services 2의 새로운 기능에 대해 간단히 설명하고 특히 RPC(원격 프로시저 호출) 서비스가 Flex 1.5와 최신 버전의 Flex에서 어떻게 다른지에 대해 중점적으로 설명합니다.

Flex Data Services 2 메시징 프레임워크에는 RPC 서비스 요청을 강력하게 만드는데 도움이 되는 몇 가지 새로운 서비스 기능이 들어 있습니다. 첫째, 각 채널은 요청을 전송하기 전에 서버와 성공적으로 통신할 수 있는지를 확인합니다. 둘째, 개발자는 각 엔드포인트에 대해 여러 채널을 지정할 수 있기 때문에 보다 유연한 구성이 가능하며 첫 번째 채널을 사용할 수 없는 경우에 장애 복구가 가능합니다. 메시징 프레임워크는 클러스터된 환경도 지원하기 때문에 RPC 서비스에서 중복 환경을 활용하여 강력한 서비스를 제공할 수 있습니다.

또한 Flex Data Services 2는 애플리케이션의 관리 성능을 향상시켜 주는 다양한 기능을 제공합니다. 개발자는 서비스별 구성 파일을 통해 서비스에 대상을 추가하거나 제거할 수 있으며, 채널 엔드포인트를 구성하고, 보안 설정을 통해 서비스에 대한 액세스를 제어하고, 강력한 애플리케이션을 위한 클러스터를 정의하고, 디버깅 지원을 위한 로깅을 세밀하게 조정할 수 있습니다. 또한 개발자는 새로운 구성 형식을 통해 기술 요구 사항이 변경됨에 따라 새로운 채널, 서비스, 어댑터, 로그인 명령 및 로깅 대상을 추가할 수 있습니다.

Flex 1.5는 RemoteObject, HTTPServiceWebService MXML 태그를 통해 원격 프로시저에 비동기 호출을 보내는 세 가지 API를 제공합니다. 이러한 서비스를 RPC 서비스라고 하며 개발자는 이를 사용하여 SOA(서비스 지향 아키텍처) 애플리케이션을 구축할 수 있습니다. Flex Data Services 2는 이러한 RPC 서비스를 계속 지원하며 새로운 기능 및 새로운 프로그래밍 모델을 제공하는 두 가지 새로운 데이터 서비스를 제공합니다. 모든 서비스는 새로운 버전의 ActionScript(ActionScript 3.0)에서 제공하는 공통 메시징 아키텍처를 기반으로 합니다. 이 문서에서는 Flex 1.5와 Flex 2 간의 차이점에 대해 설명하고 Flex Data Services 2 RPC 서비스에서 이러한 향상된 기능이 어떻게 활용되는지에 대해 설명합니다.


RPC 서비스와 메시징 아키텍처

Flex 2의 새로운 메시징 아키텍처에는 RPC 서비스에 대한 몇 가지 새로운 개념이 도입되었습니다. 이 섹션에서는 Flex 1.5와의 중요한 차이점에 대해 설명하고 Flex 2에서 상응하는 기능에 대해 간단히 설명합니다.

Flex 1.5에서 개발자는 MXML 태그를 사용하여 RPC 서비스에 연결합니다. 개발자는 요청을 전송할 엔드포인트와 서비스 이름 등과 같은 몇 가지 속성을 지정합니다. Flex 1.5에서 각각의 RPC 서비스는 서로 다른 기술을 사용하기 때문에 각 서비스마다 구성 옵션과 용어가 다릅니다. 예를 들어 RemoteObject 태그는 명명된 또는 명명되지 않은 소스를 지정하고 AMF(Action Message Format) 게이트웨이에 연결하지만 HTTPServiceWebService 태그는 명명된 서비스 또는 원시 URL을 사용하고 텍스트 기반 쿼리 매개 변수 또는 XML을 사용하여 HTTP 프록시에 연결합니다.

Flex 2는 이런 모델에 몇 가지 향상된 기능을 새로 추가하여 여러 채널 간에 일관성 유지를 강화하고 개발자에게는 보다 큰 유연성을 제공합니다. 클라이언트측에서 개발자는 MXML 태그나 순수한 ActionScript API를 사용하여 서비스 연결을 선언할 수 있습니다. 연결이 클라이언트측 전용인 경우 서비스의 URI는 매개 변수로 지정됩니다. Flex Data Services를 사용하여 연결을 구성하는 경우 개발자는 원하는 서비스와 연결된 논리적 대상을 지정할 수 있습니다. 서비스란 매체를 통한 웹 서비스 호출이나 메시징 통합 등과 같은 다양한 고유 기능을 나타냅니다. 서버측에서 모든 대상은 구성 파일을 통해 구성됩니다. 대상에는 대상이 연결되는 엔드포인트에 대한 정보, 통신에 사용되는 채널, 모든 연결에 사용되는 다양한 메시징 옵션이 포함됩니다. 채널이란 일반적으로 채널에 폴링 사용 여부 및 원하는 폴링 간격 등과 같은 몇 가지 옵션과 프로토콜을 지정하는 통신 메커니즘을 나타냅니다.

제공된 다양한 서비스와의 모든 통신은 메시지를 적절한 서비스로 연결하는 공통 메시지 브로커에 의해 중재됩니다. 메시지 브로커는 메시지 유형과 선택한 대상을 사용하여 적합한 서비스를 선택하고 서비스에서 메시지를 처리할 수 있도록 합니다. RemoteObject 메시지는 Remoting Service로 라우팅되고 HTTPServiceWebService 메시지는 Proxy Service로 라우팅됩니다. 표 1에서는 Flex 1.5의 서비스 개념과 Flex Data Services 2의 서비스 개념을 비교해서 보여줍니다.

표 1. Flex 1.5와 Flex Data Services 2의 개념 비교
Flex 1.5 서비스 개념 Flex Data Services 2 서비스 개념

명명된 서비스 및 명명되지 않은 서비스

Flex 1.5에서 개발자는 주로 서비스에 이름을 제공하여 앨리어스 역할을 수행하도록 하지만 클라이언트에서도 명명되지 않은 방식으로 서비스의 세부 정보(예: 타사 URL이나 객체의 소스)를 제공할 수 있습니다.

대상

대 상은 Flex 1.5의 명명된 서비스에 해당합니다. 이제 서비스란 용어는 포괄적인 기능을 나타내며, 대상은 궁극적인 엔드포인트를 나타냅니다. 모든 요청은 관련 서비스(Remoting Service, Proxy Service, Message Service 및 Data Service)의 대상으로 전송되어야 합니다.

프록시

HTTPServiceWebService 요청에 대한 목표 엔드포인트는 일반적으로 원격 타사 서비스입니다. 하지만 Flash® Player의 보안 샌드박스는 애플리케이션이 로드된 도메인으로 요청을 제한합니다. Flex 1.5에서는 각각의 원격 사이트에서 crossdomain.xml 정책 파일을 요청하지 않도록 하기 위해서 요청을 적합한 엔드포인트로 중계할 수 있는 내장 Proxy Servlet이 제공되었습니다.

Proxy Service

HTTPServiceWebService에서는 메시지 브로커를 사용하여 Proxy Service를 통해 요청을 중계하지만 보안 샌드박스 제한은 여전히 모든 서비스에 적용됩니다.

Proxy Service는 더 이상 기본값으로 사용되지 않으며, useProxy 속성의 기본값은 false입니다. useProxyfalse로 설정된 경우 메시지 브로커는 연결되지 않고 destination 속성이 사용되지 않습니다. 대신 개발자는 HTTPService 태그에 대한 url 속성을 설정하거나 WebService 태그에 대한 wsdl 속성을 지정해야 합니다. 개발자는 특별한 직접 채널을 선택하여 타사 엔드포인트에 대한 비메시징 기반 요청을 만듭니다.

프록시를 사용하려면 개발자는 HTTPService 또는 WebService에서 useProxytrue로 설정해야 합니다. HTTPService 또는 WebService에서 대상을 설정하면 useProxy가 자동으로 true로 설정됩니다.

Proxy Service를 사용할 때는 모든 채널에서 요청을 만들 수 있습니다. 채널은 메시지 브로커에 엔드포인트로 등록됩니다. HTTP 기반 채널은 메시지를 메시지 브로커 서블릿으로 전송합니다. RTMP(Real Time Message Protocol) 기반의 채널은 메시지를 전용 TCP/IP 포트로 전송합니다. 메시지 브로커는 이러한 포트에서 수신 대기 중인 소켓을 관리합니다.

AMF 게이트웨이

RemoteObject 요청에 대한 엔드포인트는 AMF 게이트웨이 서블릿입니다.

Remoting Service

RemoteObject에 대한 전용 채널은 없습니다. Remoting Service에 대한 요청은 모든 채널에서 만들 수 있습니다.


RPC 서비스 구성

Flex 1.5에서 컴파일러 및 런타임 서비스에 대한 구성 설정은 단일 구성 파일인 flex-config.xml에 포함되어 있습니다. 이 구성 파일에서는 RemoteObject 태그에 대한 <remote-objects>, WebService 태그에 대한 <web-service-proxy>HTTPService 태그에 대한 <http-service-proxy> 등의 세 가지 섹션이 RPC 서비스에 사용됩니다. Flex는 컴파일 시에 서비스 구성 정보를 사용하여 MXML 태그에 대한 코드 및 태그 속성의 유효성 검사를 위한 코드를 생성합니다. 다음 샘플에서는 Flex 1.5 구성 파일인 flex-config.xml의 구조를 보여줍니다.

 <flex-config>
<debugging />
<compiler />
<cache />
<flash-player />
<web-service-proxy />
<http-service-proxy />
<remote-objects />
<logging />
<fonts />
</flex-config>

Flex 1.5 AMF 게이트웨이에는 자체 구성 파일인 gateway-config.xml도 있습니다. 개발자는 이 파일을 사용하여 RemoteObject 요청을 처리하는 서비스 어댑터, 사용자 정의 서비스 보안을 위한 로그인 명령 등을 포함하여 몇 가지 기능을 사용자 정의할 수 있습니다. 다음의 코드에서는 Flex 1.5 RemoteObject 구성 파일인 gateway-config.xml의 구조를 보여줍니다.

 <gateway-config>
<service-adapters />
<logger />
<security />
<serialization />
<translator />
<redirect-url />
<lowercase-keys />
</gateway-config>

Flex Data Services 2에서는 별개의 구성 파일인 services-config.xml에 서비스 관련 구성 정보가 저장됩니다. Flex 1.5에서 서비스와 관련된 세 가지 섹션이 flex-config.xml에서 제거되었습니다. 그러나 컴파일러 특정 구성 설정은 이 파일에 그대로 유지됩니다. 캐싱 및 Flash Player 감지 등과 같은 기타 웹 계층 구성 설정은 flex-server-config.xml 파일에 저장됩니다. Flex 1.5 gateway-config.xml 파일은 더 이상 사용되지 않습니다. 새로운 공통 services-config.xml 파일은 모든 관련 게이트웨이 기능을 포함하며 설정을 모든 서비스에 적용합니다.

개발자는 services-config.xml 구성 파일을 사용하여 외부 파일로부터 개별적인 서비스 정의를 포함시킬 수 있습니다. 따라서 서비스 특정 대상을 격리시키고 기본 서비스 구성 파일의 크기를 줄일 수 있게 되며 결과적으로 보안, 채널 및 로깅 설정 등과 같은 공통 섹션에 쉽게 액세스할 수 있습니다. 다음 샘플에서는 각 서비스가 개별적인 include 파일에 포함되어 있는 Flex Data Services 2 구성 파일인 services-config.xml의 일반적인 구조를 보여줍니다.

 <services-config>
<services>
<service-include file-path="remoting-service.xml" />
<service-include file-path="proxy-service.xml" />
</services>
<security />
<channels />
<clusters />
<logging />
<system />
</services-config>

Flex 애플리케이션에서 Flex Data Services가 사용되는 경우 컴파일 시에 services-config.xml 구성 파일이 필요합니다. RPC 서비스의 경우에 이것은 RemoteObject나 프록시 기반 WebService 또는 HTTPService를 사용하는 모든 애플리케이션에 적용되는 사항입니다.

mxmlc 컴파일러는 flex-config.xml 파일 또는 명령줄 스위치를 사용하여 서비스 구성 파일을 지정할 수 있습니다. 각 서비스 대상에 대해 사용할 채널을 클라이언트에 알려주는 코드를 생성해야 하기 때문에 컴파일 시에 서비스 구성 정보가 반드시 필요합니다. 다음 구성 코드는 flex-config.xml을 사용하여 mxmlc 컴파일러를 Flex Data Services 2 구성 파일에 지정합니다.

 <flex-config>
<compiler>
<services>
services-config.xml
</services>
...
</compiler>
</services-config>

다음 구성 코드는 명령줄을 사용하여 mxmlc 컴파일러를 Flex Data Services 2 구성 파일에 지정합니다.

   mxmlc --load-config=flex-config.xml --services=services-config.xml MyApp.mxml

표 2에서는 Flex 1.5와 Flex Data Services 2의 구성상 차이점을 보여줍니다.

Flex 1.5와 Flex Data Services 2의에서 구성상의 차이점

Flex 1.5 서비스 구성

게이트웨이 URL 및 프록시 URL

다음에 대한 flex-config.xml의 사용:

  • HTTPService, WebService

{context.root}/flashproxy

  • RemoteObject

mxmlc 명령줄 스위치

  • HTTPService, WebService

-proxyurl=/myapp/flashproxy

  • RemoteObject

-gatewayurl=/myapp/amfgateway

Flex Data Services 2 서비스 구성

채널

서 비스는 모든 채널 엔드포인트를 사용하여 메시지를 처리합니다. 서비스 특정 엔드포인트 설정은 필수가 아니며 대신 개발자가 새 채널을 만들 수 있습니다. 채널은 서비스 구성 파일인 services-config.xml에 정의되어야 하며, 채널은 서비스와 독립적으로 정의됩니다.

<channel-definition id="my-amf" ...>
<endpoint uri="http://www.abc.com/messagebroker/amf" ... />
</channel-definition>

한 서비스에 대해 다음과 같은 기본 채널 집합을 설정할 수 있습니다.

 <service id="remoting-service" ...>
...
<default-channels>
<channel ref="my-amf"/>
</default-channels>
...
</service>

또한 대상은 고유 채널 목록을 지정하여 해당 서비스의 기본값을 무시할 수 있습니다.

 <destination id="MyManager">
<channels>
<channel ref="my-amf"/>
</channels>
...
</destination>

개별 채널은 명령줄에 지정할 수 없습니다. 그러나 mxmlc 명령줄 스위치를 통해 컴파일러를 완전한 서비스 구성 파일에 지정할 수 있습니다.

   --services=/flex/services-config.xml

Flex 1.5 서비스 구성

서비스 화이트 리스트

화이트 리스트는 클라이언트에 사용할 수 있는 서비스를 제한하는 데 사용됩니다.

HTTPServiceWebService 서비스는 궁극적인 타사 엔드포인트의 URL을 기반으로 화이트 리스트에 지정할 수 있습니다.

 <whitelist>
<unnamed>
<url>
http://www1.abc.com/*
</url>
<url>
https://www1.abc.com/*
</url>
</unnamed>
<named>
<service name="MyManager">
<url>
http://www.abc.com/mysvc/10/
</url>
</service>
</named>
</whitelist>

RemoteObject 객체는 원격 객체의 기본 소스를 기반으로 화이트 리스트에 지정할 수 있습니다.

 <whitelist>
<unnamed>
<source>*</source>
</unnamed>
<named>
<object name="WeatherService">
<source>
samples.WeatherService
</source>
<type>stateless-class</type>
</object>
</named>
</whitelist>

Flex Data Services 2 서비스 구성

서비스 대상

서비스에 대상을 추가하는 작업은 화이트 리스트에 어떤 항목을 추가하는 것과 같습니다.

Proxy Service 대상은 URL 패턴과 SOAP 엔드포인트를 지정하여 Flex 1.5의 명명되지 않은 서비스에 동일한 기능을 제공할 수 있습니다. 서비스의 기본 URL은 url 속성에 정의됩니다. 동적 또는 클라이언트 제공 URL은 dynamic-url 속성에 정의됩니다.

 <destination id="flickr">
<properties>
<url>
http://www.abc.com/mysvc/10/
</url>
<dynamic-url>
http://www1.abc.com/*
</dynamic-url>
<dynamic-url>
https://www1.abc.com/*
</dynamic-url>
</properties>
</destination>

defaultHttpdefaultHttps 대상이 Proxy Service에 대해 구성되어 있으므로 개발자는 대상을 지정하지 않고도 HTTPServiceWebService 태그를 사용할 수 있습니다. 하지만 defaultHttp 대상을 사용하는 HTTP 기반 URL과 defaultHttps를 사용하는 HTTPS 기반 URL을 사용하는 기본 대상에 대해서는 dynamic-url을 구성해야 합니다.

Java 어댑터를 사용하는 Remoting Service 대상은 더 이상 클라이언트에 소스를 지정할 수 없습니다. 개발자는 서버에서 각 Java 소스에 대해 고유한 대상을 등록해야 합니다.

 <destination id="WeatherService">
<properties>
<source>
samples.WeatherService
</source>
<stateful>false</stateful>
</properties>
</destination>

Flex 1.5 서비스 구성

프록시 및 AMF 게이트웨이 로깅

Flex 1.5에서 개발자는 서버의 gateway-config.xml 파일에서 로깅 설정을 수정하여 AMF 요청을 디버깅할 수 있습니다. 프록시 요청은 웹 계층 컴파일러에서 사용되는 기본 flex-config.xml 파일에서 로깅 설정을 수정하여 디버깅할 수 있습니다.

Flex Data Services 2 서비스 구성

로깅

메시지 브로커는 모든 서비스에 대한 통합 로깅 시스템을 갖고 있습니다. 개발자는 services-config.xml의 로깅 섹션을 이용하여 로깅 수준을 사용자 정의하고 정보를 특정 범주로 제한할 수 있습니다.

Flex 1.5 서비스 구성

클라이언트 로깅

Flex 1.5에서 개발자는 flex-config.xml의 디버깅 섹션에서 http-service-proxy-debug, web-service-proxy-debug 또는 remote-object-debug 설정을 true로 설정하여 클라이언트에서 서비스 요청을 디버깅할 수 있습니다. 개발자는 Flex Builder™ Network Monitor, Flash Remoting NetConnection Debugger 및 사용자 디렉토리에 있는 flashlog.txt 파일에 저장된 추적 정보의 디버깅 Flash Player 출력을 사용하여 클라이언트 로깅 정보를 확인할 수 있습니다.

Flex Data Services 2 서비스 구성

클라이언트 로깅 API 및 로그 대상

Flex 2의 mx.logging 패키지에는 새로운 클라이언트 로깅 라이브러리가 포함되어 있습니다. 모든 서비스는 이 클라이언트 로깅 API를 사용하여 정보를 보고합니다. 개발자는 로그 이벤트의 수준을 지정하고 이벤트의 범주를 필터링할 수 있습니다. 개발자는 로깅 대상을 활성화하여 특정 위치에 있는 정보를 볼 수 있습니다. 가장 일반적으로 사용되는 대상은 TraceTarget(mx.logging.targets 패키지)이며, 이 대상은 trace() 함수를 사용하여 정보를 보고합니다. Flash Player의 디버깅 버전은 추적 정보를 사용자 디렉토리에 있는 flashlog.txt 파일로 출력합니다.


Flex 1.5 서비스 구성

프록시 및 AMF 게이트웨이 로깅

Flex 1.5에서 개발자는 서버의 gateway-config.xml 파일에서 로깅 설정을 수정하여 AMF 요청을 디버깅할 수 있습니다. 프록시 요청은 웹 계층 컴파일러에서 사용되는 기본 flex-config.xml 파일에서 로깅 설정을 수정하여 디버깅할 수 있습니다.

Flex Data Services 2 서비스 구성

로깅

메시지 브로커는 모든 서비스에 대한 통합 로깅 시스템을 갖고 있습니다. 개발자는 services-config.xml의 로깅 섹션을 이용하여 로깅 수준을 사용자 정의하고 정보를 특정 범주로 제한할 수 있습니다.

Flex 1.5 서비스 구성

클라이언트 로깅

Flex 1.5에서 개발자는 flex-config.xml의 디버깅 섹션에서 http-service-proxy-debug, web-service-proxy-debug 또는 remote-object-debug 설정을 true로 설정하여 클라이언트에서 서비스 요청을 디버깅할 수 있습니다. 개발자는 Flex Builder™ Network Monitor, Flash Remoting NetConnection Debugger 및 사용자 디렉토리에 있는 flashlog.txt 파일에 저장된 추적 정보의 디버깅 Flash Player 출력을 사용하여 클라이언트 로깅 정보를 확인할 수 있습니다.

Flex Data Services 2 서비스 구성

클라이언트 로깅 API 및 로그 대상

Flex 2의 mx.logging 패키지에는 새로운 클라이언트 로깅 라이브러리가 포함되어 있습니다. 모든 서비스는 이 클라이언트 로깅 API를 사용하여 정보를 보고합니다. 개발자는 로그 이벤트의 수준을 지정하고 이벤트의 범주를 필터링할 수 있습니다. 개발자는 로깅 대상을 활성화하여 특정 위치에 있는 정보를 볼 수 있습니다. 가장 일반적으로 사용되는 대상은 TraceTarget(mx.logging.targets 패키지)이며, 이 대상은 trace() 함수를 사용하여 정보를 보고합니다. Flash Player의 디버깅 버전은 추적 정보를 사용자 디렉토리에 있는 flashlog.txt 파일로 출력합니다.


RPC 서비스 MXML API에 대한 변경 사항

Flex 2의 RPC 서비스 API는 기본적으로 Flex 1.5와 같습니다. 그러나 공통 메시징 아키텍처를 이용하게 됨으로써 서비스 통신 및 명명 규칙과 관련된 몇 가지 속성에 변경 사항이 있습니다. 표 3에서는 Flex 1.5에서 Flex Data Services 2로 버전업되면서 MXML API에 어떤 변경 사항이 있는지를 간단히 보여줍니다.

표 3. Flex 1.5에서 Flex Data Services 2로 버전업되면서 MXML API에 적용된 변경 사항 개요
Flex 1.5 MXML API Flex Data Services 2 MXML API

mx:RemoteObject

  • source 속성은 명명되지 않은 원격 객체에서 사용됩니다. 이 속성은 화이트 리스트 구성에서 명명된 객체를 등록하지 않고 RemoteObject에 대한 동적 소스 이름을 정의합니다.
  • named 속성은 명명된 원격 객체에서 사용됩니다. 이 속성은 등록된 객체 소스에 앨리어스를 제공합니다.
  • protocol 속성은 AMF 게이트웨이에 연결할 때 HTTP와 HTTPS 중 어떤 프로토콜을 사용할지를 결정합니다.
  • 개발자는 endpoint 속성을 사용하여 AMF 게이트웨이의 사용자 정의 위치를 지정할 수 있습니다.

mx:RemoteObject

  • source 속성은 Remoting Service Java Adapter에 의해 무시됩니다. ColdFusion은 CFC 어댑터에서 클라이언트 지정 소스를 지원합니다.
  • named 속성은 더 이상 사용되지 않으며 대신 destination 속성을 사용해야 합니다.
  • protocol 속성은 지원되지 않습니다. 메시지 브로커에 연결하는 데 사용되는 프로토콜은 대상에 대해 선택된 채널에 따라 달라집니다.
  • endpoint 속성은 RemoteObject의 MXML API에 대해서만 지원됩니다. Flex 2에서는 개발자가 이 속성을 사용하여 컴파일 시에 서비스 구성 파일을 참조하거나 ChannelSet을 프로그래밍 방식으로 만들지 않고도 RemoteObject 대상의 엔드포인트를 신속하게 지정할 수 있습니다. 또한 RemoteObject 서비스에 이미 ChannelSet이 설정되어 있는 경우 기존 ChannelSet을 무시합니다. endpoint 속성은 Flex Data Services 2 또는 ColdFusion 7.0.2와 같이 Flex 2와 호환되는 엔드포인트여야 합니다. 엔드포인트 URL이 https로 시작하는 경우 SecureAMFChannel이 사용되고, 그렇지 않으면 AMFChannel이 사용됩니다.

mx:WebService

mx:HTTPService

  • protocol 속성은 프록시 또는 타사 엔드포인트에 연결할 때 HTTP와 HTTPS 중 어떤 프로토콜을 사용할지를 결정합니다.
  • serviceName 속성은 명명된 프록시 웹 서비스에서 사용됩니다.

모든 서비스

개발자는 WebService 또는 RemoteObject 작업이나 HTTPService 호출에 대한 result 속성을 사용하여 서비스에서 반환된 마지막 결과에 바인딩할 수 있습니다.

mx:WebService

mx:HTTPService

  • protocol 속성은 지원되지 않습니다. 메시지 브로커에 연결하는 데 사용되는 프로토콜은 대상에 대해 선택된 채널에 따라 달라집니다.
  • serviceName 속성은 더 이상 사용되지 않으며 대신 destination 속성을 사용해야 합니다.

모든 RPC 서비스

개발자가 결과 이벤트 핸들러를 지정할 수 있게 해주는 MXML result 이벤트 속성과 이름 충돌이 발생하지 않도록 WebService 또는 RemoteObject 작업이나 HTTPService 호출에 대한 result 속성 이름이 lastResult로 변경되었습니다.


RPC 서비스에서 채널 사용

채널은 클라이언트의 메시지를 메시지 브로커의 엔드포인트로 전달하는 역할을 수행합니다. 메시지를 전달하는 데 사용되는 프로토콜은 채널에 따라 다릅니다. 또한 채널은 ActionScript 3.0을 사용하는 Flex 애플리케이션에서 사용되는 유형인 클라이언트의 데이터 유형을 지원할 수 있어야 합니다. 채널은 요청을 직렬화(serialize)하고 응답을 역직렬화(deserialize)하는 클라이언트 구현과 요청을 역직렬화하고 응답을 직렬화하는 엔드포인트에서의 서버 구현으로 구성됩니다. Flex Data Services 2에는 서비스 기반 애플리케이션의 다양한 요구 사항을 지원하기 위한 몇 가지 채널이 제공됩니다.

  • AMF 채널: AMF는 ActionScript 객체를 효율적으로 직렬화하기 위해 사용되는 바이너리 메시지 형식입니다. AMFChannel은 Flash Player용 flash.net.NetConnection 클래스를 사용하여 HTTP를 통해 AMF 형식의 메시지를 AMFEndpoint로 비동기적으로 전송합니다. Flash Player 8.5에서는 AMF 3으로 알려진 새로운 버전의 AMF를 도입하여 새로운 ActionScript 3.0 언어를 제공하지만 이전 버전인 AMF 0도 계속 지원됩니다. 새로운 ActionScript 3 데이터 유형에 대한 지원 외에도 AMF 3에서는 공통적으로 발생하는 클래스 설명과 참조 문자열을 직렬화하여 보다 간결한 인코딩 형식을 사용하고 중복된 정보를 줄입니다. NetConnection(및 AMFChannel)은 기본적으로 AMF 3을 사용합니다. AMFChannel은 HTTP를 통한 바이너리 정보 사용이 가능하고 보안을 위해 암호화 기능을 사용할 필요가 없는 환경에서 모든 RPC 서비스에 대해 권장되는 채널입니다.
  • 보안 AMF 채널: 이 채널은 AMFChannel와 동일하지만 HTTPS를 사용하여 AMF 형식의 메시지를 AMFEndpoint로 전송하는 점이 다릅니다.
  • RTMP 채널: RTMP 도 AMF를 사용하여 ActionScript 객체를 직렬화하지만 RTMPEndpoint와의 영구적인 연결을 유지 관리하고 실시간 통신이 가능합니다. RPC 서비스는 단일 클라이언트/서버 요청/응답 모델을 사용하여 비동기적으로 만들어지기 때문에 실시간 통신은 필요하지 않습니다.
  • HTTP 채널: 이 채널은 flash.net.URLLoader를 사용하여 XML 형식의 메시지를 HTTP를 통해 HTTPEndpoint로 비동기적으로 전송하는 텍스트 기반 채널입니다. XML 형식은 강력한 형식의 ActionScript 3.0 데이터를 지원하며 공통적으로 발생하는 객체, 클래스 정의 및 문자열에 대한 참조별 직렬화와 같은 AMF 3의 다양한 최적화 기술을 포함합니다. 이 채널은 텍스트 전용 통신 요구 사항이 있는 환경에서 유용합니다.

    참고: flash.utils.IExternalizable 인터페이스는 아직 HTTPChannel에서 완전히 지원되지 않습니다. 따라서 객체 참조를 복구할 필요가 있는 mx.utils.ObjectProxymx.collections.ArrayCollection 인스턴스는 이 채널을 사용하여 직렬화하면 안 됩니다.

  • Secure HTTP 채널: 이 채널은 HTTPChannel 클래스와 동일하지만 HTTPS를 사용하여 메시지를 HTTPEndpoint에 전송한다는 점이 다릅니다.

ActionScript 3.0 데이터 유형 및 직렬화(serialization)

Flex 2 및 ActionScript 3.0에는 RemoteObject 및 Remoting Service를 사용하는 개발자에게 유용한 몇 가지 새로운 데이터 유형(Flex 애플리케이션에서 사용할 수 있는 데이터 유형)이 포함되어 있습니다.

XML

ActionScript 3.0에는 E4X 구문을 지원하는 새로운 내장 XML 데이터 유형이 포함되어 있습니다. 이러한 API는 매우 강력하고 유용한 기능을 제공합니다. flash.xml 패키지에서는 ActionScript 2에서 제공되는 기존의 XMLDocumentXMLNode 클래스도 사용할 수 있습니다. 클라이언트 XMLflash.xml.XMLDocument 인스턴스는 모두 Java org.w3c.dom.Document 인스턴스와 같은 메시지 엔드포인트에 의해 역직렬화됩니다. org.w3c.dom.Document의 서버 인스턴스는 새로운 XML 데이터 유형의 인스턴스로 클라이언트에서 역직렬화됩니다. 그러므로 개발자는 서버를 통해 왕복하는 객체의 경우 모든 flash.xml.XMLDocument 데이터가 XML로 반환된다는 점에 주의해야 합니다.

강력한 형식의 객체

Flex 1.5에서 사용자는 Object.registerClass를 사용하여 사용자 정의 클라이언트 및 서버 데이터 유형을 매핑했습니다. ActionScript 3.0에서 이 기능은 flash.net.registerClassAlias로 변경되었습니다. 이 API는 클라이언트 클래스에 대해 앨리어스를 등록합니다. 그러면 클래스의 인스턴스가 직렬화될 때 앨리어스가 포함됩니다. 등록된 앨리어스가 없는 경우 인스턴스는 익명 객체로 전송됩니다. 또한 앨리어스를 사용하면 클라이언트에서 클라이언트 클래스를 다른 이름의 서버 클래스로 매핑할 수도 있습니다. 하지만 개발자는 혼란을 피하기 위해 동일한 이름을 사용하는 것이 가장 좋습니다. 인스턴스가 올바르게 역직렬화되도록 하려면 인스턴스가 서버에 전송되거나 클라이언트에서 수신되기 전에 클라이언트 클래스 앨리어스를 등록해야 합니다.

Flex 2 MXML 컴파일러에는 클래스의 느슨한 초기화(lazy-initialization) 및 종속성 기반 링커(linker)와 같은 몇 가지 최적화 기술이 포함되어 있습니다. 여기서 registerClassAlias에 대한 호출은 데이터 요청이 발생하기 전에 수행되어야 하며, 클라이언트 클래스에 대한 종속성은 컴파일된 애플리케이션에 연결되도록 코드에 작성되어야 합니다. 이러한 프로세스를 보다 쉽게 수행할 수 있도록 mxmlc 컴파일러에는 RPC 서비스에서 클래스를 즉시 사용할 수 있도록 보장하는 특별한 [RemoteClass] 메타데이터 태그에 대한 지원이 포함되어 있습니다. ActionScript 3.0 구문의 다음 코드에서는 Flex 2 애플리케이션에서 원격 클래스를 매핑합니다.

   package com.mycompany
{

[RemoteClass(alias="com.mycompany.Employee")]
public class Employee
{

}

}

Number, int 및 uint

ActionScript 3.0에서는 배정밀도 부동 소수점 Number 유형(int(부호 있는 정수) 및 uint(부 호 없는 정수)) 외에도 두 가지 새로운 정수 유형이 제공됩니다. 새로운 AVM+(ActionScript Virtual Machine)는 정수를 가변 길이로 인코딩된 29비트 정수로 보관하며, 더 큰 정수 값은 Number를 사용하여 보관합니다. intuint 유형은 서버에서 java.lang.Integer를 사용하여 역직렬화됩니다. Number는 서버에서 계속해서 java.lang.Double로 역직렬화됩니다. Remoting Service의 Java 어댑터는 메서드를 호출하고 강력한 형식의 인스턴스를 호출할 때 느슨한 유형의 마샬링(marshalling) 규칙을 사용하기 때문에 모든 숫자는 사용자의 API에 필요한 형식으로 올바르게 캐스팅됩니다.

사용자 정의 직렬화 및 flash.utils.IExternalizable

ActionScript 3.0에는 개발자가 자신만의 강력한 형식의 클래스에 대한 직렬화를 제어할 수 있게 해주는 새로운 인터페이스가 포함되어 있습니다. flash.utils.IExternalizable을 구현하는 인스턴스는 readExternalwriteExternal 메서드의 구현에 따라 직렬화됩니다. 클라이언트 클래스는 등록된 앨리어스가 있어야 하며, 해당 서버 클래스는 인스턴스를 역직렬화하는 데 사용할 수 있어야 합니다. 이 유형에 대한 직렬화 형식은 완전히 사용자 정의가 가능하기 때문에 직렬화를 올바르게 수행하기 위해 서버 클래스를 사용할 수 있어야 합니다.

데이터 바인딩 및 MXML 구성 요소

서 비스가 Flex 2 구성 요소에 데이터 공급자로 참여하기 위해서는 데이터 유형이 올바른 이벤트로 전달되어 데이터 바인딩과 변경 사항의 전달을 지원해야 합니다. 따라서 데이터 바인딩을 쉽게 수행하도록 데이터 유형 직렬화 규칙이 일부 변경되었습니다.

<mx:Model/>

MXML Model 태그를 사용하면 일반 객체 속성을 사용하여 데이터 바인딩 작업을 수행할 수 있습니다. Model 태그는 서버에서 java.util.HashMap으로 역직렬화되는 ActionScript 유형인 mx.utils.ObjectProxy로 지원됩니다.

참고: mx.utils.ObjectProxy 클래스는 flash.utils.IExternalizable을 구현하므로 이 유형은 아직 HTTPChannel 클래스에 의해 완전히 지원되지 않습니다. 다른 유형과 IExternalizable 유형의 컨텐츠 사이에서 객체 참조는 유지되지 않습니다.

mx.collections.ArrayCollection

컬 렉션은 Flex 2에서 포괄적으로 사용됩니다. 컬렉션은 컬렉션 구조의 변경 사항이 Flex 구성 요소(특히 UI 구성 요소)에 반영되고 구성 요소의 변경 사항이 컬렉션 구조에 반영될 수 있도록 배열이 올바른 이벤트로 전달될 수 있는 이벤트 프레임워크를 제공합니다. 이제 Flex Data Services는 클라이언트 mx.collections.ArrayCollection 인스턴스를 서버의 java.util.ArrayList로 매핑하고 서버측 java.util.Collection 구현은 클라이언트의 mx.collections.ArrayCollection으로 매핑합니다. 서버로부터의 응답에 원시 클라이언트 Array가 필요한 경우 원시 Java 배열(예: java.lang.Object[])을 반환할 수 있습니다. 또한 클라이언트 ActionScript Arrays는 서버에서 원시 java.lang.Object[] 배열로 역직렬화됩니다.

참고: mx.collections.ArrayCollectionflash.utils.IExternalizable을 구현합니다. 여기서 이 유형은 아직 HTTPChannel 클래스에 의해 완전히 지원되지 않습니다. 다른 유형과 IExternalizable 유형의 컨텐츠 사이에 객체 참조는 유지되지 않습니다.


Number, int 및 uint

ActionScript 3.0에서는 배정밀도 부동 소수점 Number 유형(int(부호 있는 정수) 및 uint(부 호 없는 정수)) 외에도 두 가지 새로운 정수 유형이 제공됩니다. 새로운 AVM+(ActionScript Virtual Machine)는 정수를 가변 길이로 인코딩된 29비트 정수로 보관하며, 더 큰 정수 값은 Number를 사용하여 보관합니다. intuint 유형은 서버에서 java.lang.Integer를 사용하여 역직렬화됩니다. Number는 서버에서 계속해서 java.lang.Double로 역직렬화됩니다. Remoting Service의 Java 어댑터는 메서드를 호출하고 강력한 형식의 인스턴스를 호출할 때 느슨한 유형의 마샬링(marshalling) 규칙을 사용하기 때문에 모든 숫자는 사용자의 API에 필요한 형식으로 올바르게 캐스팅됩니다.

사용자 정의 직렬화 및 flash.utils.IExternalizable

ActionScript 3.0에는 개발자가 자신만의 강력한 형식의 클래스에 대한 직렬화를 제어할 수 있게 해주는 새로운 인터페이스가 포함되어 있습니다. flash.utils.IExternalizable을 구현하는 인스턴스는 readExternalwriteExternal 메서드의 구현에 따라 직렬화됩니다. 클라이언트 클래스는 등록된 앨리어스가 있어야 하며, 해당 서버 클래스는 인스턴스를 역직렬화하는 데 사용할 수 있어야 합니다. 이 유형에 대한 직렬화 형식은 완전히 사용자 정의가 가능하기 때문에 직렬화를 올바르게 수행하기 위해 서버 클래스를 사용할 수 있어야 합니다.

데이터 바인딩 및 MXML 구성 요소

서 비스가 Flex 2 구성 요소에 데이터 공급자로 참여하기 위해서는 데이터 유형이 올바른 이벤트로 전달되어 데이터 바인딩과 변경 사항의 전달을 지원해야 합니다. 따라서 데이터 바인딩을 쉽게 수행하도록 데이터 유형 직렬화 규칙이 일부 변경되었습니다.

<mx:Model/>

MXML Model 태그를 사용하면 일반 객체 속성을 사용하여 데이터 바인딩 작업을 수행할 수 있습니다. Model 태그는 서버에서 java.util.HashMap으로 역직렬화되는 ActionScript 유형인 mx.utils.ObjectProxy로 지원됩니다.

참고: mx.utils.ObjectProxy 클래스는 flash.utils.IExternalizable을 구현하므로 이 유형은 아직 HTTPChannel 클래스에 의해 완전히 지원되지 않습니다. 다른 유형과 IExternalizable 유형의 컨텐츠 사이에서 객체 참조는 유지되지 않습니다.

mx.collections.ArrayCollection

컬 렉션은 Flex 2에서 포괄적으로 사용됩니다. 컬렉션은 컬렉션 구조의 변경 사항이 Flex 구성 요소(특히 UI 구성 요소)에 반영되고 구성 요소의 변경 사항이 컬렉션 구조에 반영될 수 있도록 배열이 올바른 이벤트로 전달될 수 있는 이벤트 프레임워크를 제공합니다. 이제 Flex Data Services는 클라이언트 mx.collections.ArrayCollection 인스턴스를 서버의 java.util.ArrayList로 매핑하고 서버측 java.util.Collection 구현은 클라이언트의 mx.collections.ArrayCollection으로 매핑합니다. 서버로부터의 응답에 원시 클라이언트 Array가 필요한 경우 원시 Java 배열(예: java.lang.Object[])을 반환할 수 있습니다. 또한 클라이언트 ActionScript Arrays는 서버에서 원시 java.lang.Object[] 배열로 역직렬화됩니다.

참고: mx.collections.ArrayCollectionflash.utils.IExternalizable을 구현합니다. 여기서 이 유형은 아직 HTTPChannel 클래스에 의해 완전히 지원되지 않습니다. 다른 유형과 IExternalizable 유형의 컨텐츠 사이에 객체 참조는 유지되지 않습니다.


출처 : http://www.adobe.com/kr/devnet/flex/articles/rpc_service.html

+ Recent posts