일반적으로 솔루션 지원 기능성을 제공하거나 솔루션이 상호작용해야 하는 기존 응용프로그램을 고려하지 않고 솔루션을 빌드해서는 안됩니다. 따라서 솔루션의 일부로 재사용될 기존 레거시 응용프로그램을 카탈로그화하고 해당
기능성을 식별해야 합니다. 서비스 지향 솔루션을 사용하면 여러 루트를 통해 새 서비스와 기존 기능성을 통합할 수 있습니다. 해당 방법은 다음 그림을 참조하십시오.
-
기존 기능을 서비스로 랩핑. 이 경우 현재 기능을 유지하되, 기존 기능을 서비스로 제공하는 도구 또는 미들웨어를 사용합니다. 예를 들어, IBM은 레거시 CICS 트랜잭션을 SOAP 웹 서비스로
제공하는 기능을 제공합니다.
-
기존 기능을 랩핑하고 서비스로 바꾸기. 이 경우 위와 같이 기능을 랩핑하되, 결과 서비스 스펙을 사용하여 나중에 원래 서비스를 바꾸고 클라이언트를 새 구현으로 다시 지정하여 서비스를
재개발합니다.
-
서비스 호출에 보다 적합한 어댑터 사용. 기능을 랩핑하고 서비스로서 제공할 수 없는 경우도 있지만 메시지 대기열 지정 인터페이스 또는 JCA(Java Connector Architecture)와
같이 통합이 보다 용이한 상태로 기능을 랩핑할 수 있습니다. 이 방법을 사용하면 새 서비스로 해당 기능에 액세스할 수 있습니다.
-
기능을 서비스로 통합. 경우에 따라, 서비스 구현 내 논리 컴포넌트로서 기능을 사용하여 새 서비스로 해당 레거시 기능에 액세스할 수 있습니다.
세 번째, 네 번째 옵션의 경우 기존 기능을 사용하되, 현재 기능을 클라이언트에게 지속적으로 제공하지 않으므로 보다 유연한 방법입니다. 반대로, 첫 번째, 두 번째 옵션의 경우 기존 기능의 서비스 랩핑과 관련된
문제가 발생할 수 있습니다. 웹 서비스 프로토콜의 성능으로 인해 또한 기본 데이터 형식과 XML이 일치하지 않아 성능 문제가 발생할 수 있기 때문입니다.
기존 소프트웨어 자산 및 해당 종속성과 인터페이스를 분석하여 비즈니스 기능성 지원을 변경해야 할 지 여부를 결정해야 합니다. 예를
들어, 비즈니스 기능의 레거시 구현을 위해 웹 서비스 인터페이스를 작성하려면 분석 시 온라인 트랜잭션이나 일괄처리 작업 또는 지속적인 데이터 스토어(기능 수행에 도움이 됨)의 컴포지션 및 플로우를 검토해야
합니다. 이 기존 응용프로그램의 현재 디자인은 기능성을 지원할 수 있도록 변경해야 합니다. 또한 웹 서비스 인터페이스를 원하는 품질의 서비스로 작성하는 데 있어서의 잠재적인 장벽을 모두 식별해야 합니다. 예를 들어, 비즈니스 기능의 모놀리식 일괄처리 구현에는 서비스로 호출되는 초 단위 이하 응답 시간이 필요합니다.
기존 자산을 서비스 패턴으로 랩핑
그러나 경우에 따라서는 하위 레벨 레거시 기능 세트가 개별 서비스로 제공되는 레거시 서비스 파티션을 개발하는 것이 효과적입니다. 이 파티션은 보다 세분화된 비즈니스 관련 스펙을 이용자에게 제공하는 데 해당 기능을
활용하는 상위 레벨 서비스만 액세스할 수 있습니다. 이러한 레거시 기능 캡슐화는 일시적인 솔루션이므로 랩핑 기술의 성능 특성을 잘 이해하는 경우에만 실행해야 합니다. 자세한 정보는 솔루션 파티션 개념을 참조하십시오.
레거시 기능 랩핑에 대한 또 다른 평가는 매우 단순화된 서비스 제공자 모델 요소 양식이라는 점입니다. 즉, 단일 서비스가 단일 오퍼레이션으로 단일 스펙을 실현합니다. 다음
다이어그램은 레거시 기능 "UpdateCustomerAddress"에 대한 이 패턴을 보여줍니다.
이 패턴을 사용자 조정할 때는 다음 작업을 수행할 수 있습니다.
-
기존 기능 세트를 동일한 컴포넌트가 제공하므로 동일한 서비스 제공자를 사용해야 합니다.
-
위의 패턴은 자동으로 생성되었으므로 "exec${service}"에서 기본 오퍼레이션 이름을 바꾸는 것이 좋습니다.
-
마찬가지로, 기본적으로 생성된 메시지의 이름도 바꾸는 것이 좋습니다. 또한 이 시점에서 메시지 구조를 모델링해야 합니다.
-
기본 패턴에서는 오퍼레이션이 메시지 입력을 가져와 메시지를 리턴하는 것으로 가정합니다. 레거시 기능은 메시지를 리턴하지 않거나 알림 전용이므로 생성된 오퍼레이션의 서명을 수정해야 합니다.
-
설계자/디자이너는 서비스 제공자의 "allowedBindings" 특성에 올바른 값이 지정되었는지 확인해야 합니다.
|