버전 관리 전략 웹 서비스
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
웹 서비스 API 버전 관리.
시간이 지남에 따라 발전 할 계획 인 고객에게 소규모 웹 서비스 API를 제공합니다. 따라서 어떤 종류의 버전 관리가 필요하지만 어떻게 그렇게하는지에 대한 정보는 찾을 수 없습니다.
모범 사례가 있습니까?
웹 서비스 소비자와의 호환성을 유지하면서 새로운 기능을 계속 추가 할 수 있습니까?
버전 관리는 복잡한 주제이므로 먼저 더 자세하게 목표를 정의해야합니다. 호환성을 결코 깨뜨리지 않을 것이라는 보장을 인터페이스에 가지고 있지만 새로운 기능이 무엇인지에 따라 가능하지 않을 수도 있습니다. 그래서 다른 상황과 다른 절충안이 있습니다.
귀하의 의도가 새로운 소비자에게만 새로운 기능을 제공하고 귀하의 모든 소비자가 직접 소비자 (중개자, 프레임 워크 등이 아님) 인 경우 개별 엔드 포인트 방식이 최선의 선택입니다. 휴식을 취할 수있는 기능을 추가 할 때마다 새 끝점을 만들고 새 끝점 번호를 지정한 다음 소비자가이를 확인하고 구성을 전환하도록 알려줍니다. 이 전략은 꽤 노력했지만 사실이지만 소비자에게 최신 정보를 제공해야한다는 단점이 있습니다. 또한 서비스 간 종속성이있는 경우 추적해야 할 자질구리가 될 수 있습니다. 코드가 깨진다면 (직접) 자신의 잘못이 아니라는 단점이 있습니다.
다른 주요 전략은 확장 가능한 인터페이스입니다. 내가 아는 세 가지 종류가 있습니다. 첫째, 기존의 인터페이스에서 추가 할 수있는 모든 기능이 가능할 정도로 서비스 도메인을 잘 설명하려고하는 인터페이스 유형입니다. 그게 어려운 것처럼 들린다면, 그렇습니다. 이 인터페이스를 완벽한 인터페이스라고 부를 수 있습니다. 모든 것이 완전히 기술되어 있지만 전체 도메인도 완전히 설명됩니다. "완벽한"것은 정말로 종이에 단지있다.
두 번째 다양성은 일반 인터페이스처럼 보이지만 일반 확장 점을 추가하는 유형입니다. WSDL에서 이는 xs : any, name-value 쌍 또는 유사한 것을 의미합니다. 이것을 기본 확장 가능 인터페이스라고 부를 수 있습니다. 할 일이 그리 어렵지는 않지만, 그것이 합병증이없는 것은 아닙니다. 확장 점은 인터페이스가 특정 툴링 (xs : any)에서 작동하기 어렵게 만들거나 명시 적으로 입력 및 출력 (이름 - 값 쌍)을 검증하는 기능을 일부 상실 할 수 있습니다. 버전 3 또는 4를 사용하기가 꽤 어렵게 만드는 방식으로 확장 점을 남용하는 것도 꽤 쉽습니다.
세 번째 유형은 인터페이스를 바이트 스트림으로 변환하는 유형입니다. 이 신 인터페이스를 호출 할 수 있습니다. 그것들은 정당한 이유가 없지만, 웹 서비스를 사용하고 있다면 웹 서비스를 사용하는 이유를 묻고 싶을 수도 있습니다. 어쩌면 원시 TCP / IP 또는 기본 HTTP GET / POST에 대해 생각해야합니다. 그러나 WSDL과 XSD의 복잡성에 시달리고 단지 처음부터 시작하기를 원하지만 인프라 스트럭처의 이유로 웹 서비스에 묶여 있어야합니다. 그러나 일단이 경로를 시작하면 소비자에게 서비스를 사용하는 방법과 사용하지 않는 방법을 완전히 새로운 방식으로 설명해야하며 XSD를 사용하는 경우 기본적으로 다시 사용할 수 있습니다. 네가 시작 했어.
가장 좋은 방법은 먼저 "완벽한 인터페이스"를 시도한 다음 일반 확장 성 포인트를 포기하고 추가하여 이러한 모든 옵션을 파악하고 서비스 설계에 접근하는 것입니다. 완벽한 인터페이스를 디자인하려고하면 인터페이스뿐만 아니라 서비스를 향상시킬 수있는 것들을 배우게됩니다. 그러나 시간이 걸릴 것입니다. 그리고 그 시간을 어떻게 든 제한하지 않으면 영원히 걸릴 것입니다.
진정한 신의 인터페이스가 조금 부족하다면 래퍼 인터페이스가있다. 시스템에 레이어가있는 경우 인터페이스도 레이어에 있어야합니다. 레이어 B를 변경하면 레이어 C의 모든 인스턴스가 아니라 레이어 B 만 변경하려고합니다.
가장 일반적인 전략은 wsdl에있는 객체의 네임 스페이스에 버전 관리 ID (일반적으로 yyyy / MM [/ dd])를 추가하여 WSDL을 버전화하는 것입니다.
이는 유형 (유형 / 스키마) 레벨 또는 전체 WSDL 레벨에서 수행 될 수있다. & lt; definitions & gt; 1.1 또는 & lt; description & gt; 2.0에서.
약간 날짜가 있지만 IBM Developer Works의이 링크는이 접근 방식의 근거를 제공합니다. 특히 버전을 늘릴 필요가있는 경우 :
이전 버전 호환 가능 / 변경되지 않은 변경 사항 :
조작 제거 또는 이름 변경 매개 변수를 메소드로 변경 복합 유형 변경.
일반적으로 웹 서비스 URL에 버전 문자열을 추가하여 "버전이있는 끝점"을 제공합니다. 이러한 끝점을 구현하는 코드는 차이점이 사소하고 동일한 코드로 처리 할 수 있거나 코드를 복제 할 수 있거나 그 중간에있을 수있는 경우 공유 할 수 있습니다.
다른 버전 관리 된 종단점은 버전 관리가 필요한 XML 스키마도 사용할 수 있습니다.
그 중 하나는 모든 웹 서비스 작업이 버전 번호를 보유하는 추상 유형을 상속 한 유형의 매개 변수 하나만 갖도록 설계하는 것입니다. 이 접근법은 eBay 웹 서비스 플랫폼에 의해 구현됩니다. 다음과 같은 것 :
또한 http를 통해 작업하는 경우 웹 서비스 끝점 URL에 http GET 매개 변수로 버전을 추가해야 할 수 있으므로 요청한 버전을 쉽게 찾을 수 있습니다. server / service? version = 1.
모든 API에 매개 변수로 "API 버전 번호"를 추가 한 다음 웹 서비스 코드에 전략 패턴을 구현합니다. 여기서 버전 번호는 사용할 전략을 지정합니다.
버전 관리 전략 웹 서비스
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
웹 서비스 업데이트 또는 버전 관리 전략
다른 버전의 웹 서비스가 어떻게 처리되는지에 대한 베스트 프랙티스를 듣고 싶습니다.
명확하게하기 위해 웹 서비스로 노출 된 웹 메소드가있는 경우 기능 / 기능을 추가하여 해당 메소드 호출의 서명을 변경하려는 경우 모든 것을 손상시키지 않는 방식으로이 메소드를 처리하는 방법 현재 서비스를 호출하는 고객의
다른 URL에 서비스를 배포합니까?
메서드 이름 자체에 버전을 지정합니까 (MyMethod, MyMethodv2 등).
매개 변수 목록과 함께 메서드 호출의 일부로 버전을 전달합니까?
누구든지 Google이나 Amazon이 이러한 시나리오를 광범위한 웹 서비스 라이브러리로 처리하는 방법을 알고 있습니까?
편집 : 지금까지 오라클 에서이 문서에 좋은 정보를 발견. 또한이 자바 항목에 대한 블로그 항목도 유용했습니다. 나는 여전히 다른 접근 방식 중 일부를보고 싶어한다.
웹 서비스를 버전 관리하는 일반적인 방법은 클라이언트가 원하는 버전을 지정하도록하는 것입니다. "> 2.0", "<1.5"또는 "= 1.1"과 같은 간단한 제약 조건을 허용 할 수 있습니다. 당연히, 당신은 자신의 온 전성을 위해 지원되는 버전의 수를 최소화하고 싶습니다. 클라이언트가 버전을 지정하지 않으면 최신 버전을 사용합니다.
버전을 제공하는 기술은 다양합니다. 일부는 URL을 사용하고 다른 일부는 헤더를 권장하고 일부는 API 호출의 매개 변수로 포함시킬 수 있습니다. 그러나 거의 아무도 메소드의 이름을 변경하지 않습니다. OSGi 링크를 버전 화하는 "패키지"또는 "네임 스페이스"와 동일한 의미가 있습니다. 업그레이드가 매우 어려워지고 실제 서비스 변경보다 사람들이 업그레이드하는 것을 방해합니다.
또한 웹 서비스에 액세스하는 방법에 따라 다릅니다. REST를 사용하는 경우 URL을 깨끗하게 유지하고 헤더를 사용하는 것이 가장 적합합니다 (필요한 경우 검색어 매개 변수로 해킹하는 것은 간단합니다). SOAP / XMLRPC / whatever-RPC를 사용하고 있다면 URL에 넣는 것이 좋습니다.
클라이언트가 버전을 지정하는 방법은 일반적으로 매우 쉽습니다. 더 복잡한 것은 모든 버전을 동시에 실행하는 방법입니다. 대부분의 언어는 동일한 라이브러리 / 모듈 / 클래스 / 함수의 여러 버전을 동일한 런타임 환경 (VM, 프로세스 또는 기타 사용자)으로로드 할 수있는 방법이 없습니다. 제공 한 OSGi 링크는이를 허용하는 Java의 솔루션입니다.
실제로 OSGi는 대부분의 상황에서 과도하게 사용됩니다. 대개 더 이상 사용되지 않는 요청을 다른 서버 또는 프로세스에 프록시하는 것이 더 쉽습니다.
하지만 서비스의 "버전"을 향상시키는 가장 좋은 방법은 확장 성 및 유연성을 구축하여 전방 및 후방 호환성을 유지하는 것입니다. 그렇다고 모든 버전이 서로 호환되어야한다는 의미는 아니지만 연속 버전은 서로 호환되어야합니다.
doAPIFunction, doAPIFunctionV2 및 doAPIFunctionV3 등을 만드는 솔루션은 제가 일하는 곳에서 두통을 일으키지 않았다고 말할 수 있습니다. 명확하게 설명하는 함수 이름이 부족하다는 것은 모든 종류의 광기를 의미합니다.
명확한 API 함수 이름이 필요하며 API가 변경되면 가능한 한 이전 버전과 호환되도록 시도하고 수행하는 것이 목표입니다. 각 진입 점이 안정적인 API를 지원하고 example. org/api-1.0/의 doFunction이 의미를 변경해야하는 좋은 이유가있는 경우 example. org/api-2.0과 다를 수 있으므로 진입 점의 버전을 지정하는 것이 좋습니다.
나는 당신의 질문을 정확하게 이해할 지 확신하지 못합니다. 하지만 2 센트. 메소드의 시그니처가 다른 새로운 매개 변수와 같이 변경되면 선택 사항이 될 수없는 이유는 무엇입니까? 그러나 기존 매개 변수 데이터 유형이 변경되면 적용 할 수 없습니다.
명백하지 않은 경우이 점에 투표하십시오. :)
몇 년 전에 동일한 웹 서비스 메서드 이름과 다른 매개 변수를 사용할 수 있었을 때 더 간단했습니다. :)
웹 서비스를 작성하고 나면 고객과 계약을 맺고 이것이 지원할 것입니다.
오래된 방법의 경우, 내가 사용하고 있는지, 그리고 누구에 의해 업데이트를받을 수 있는지를 알기 위해 로깅을 제안 할 것입니다.
다른 방법으로는 가장 좋은 방법은 새로운 메소드를 작성하는 것입니다. 따라서 버전에 따라 여러 가지 유사한 함수 이름을 사용할 수 있습니다.
버전 번호를 전달할 때의 문제는 클라이언트가 항상 유효한 숫자를 전달하는지 확인해야한다는 것입니다. 스텁을 생성하면 작동하지만, 그렇지 않으면 매우 약해집니다.
이름에 버전 번호를 넣는 것이 나에게 가장 효과적 인 것처럼 보입니다. 예전 버전을 분명히 알 수 있으며 AOP를 사용하여 이전 버전의 웹 서비스 메소드를 더 쉽게 기록 할 수 있습니다.
웹 서비스 버전 관리.
Gabriel Bechara.
소개.
웹 서비스는 시간이 지남에 따라 변화하고 발전해야합니다. 서비스 지향 아키텍처 (SOA)의 느슨한 결합 원칙은 서비스 제공 업체가 소비자의 적응을 기다리지 않고 새로운 버전의 공유 서비스를 출시 할 수 있다는 것을 의미하며 서비스 소비자는 전환하기 전에 새로운 공유 서비스 버전을 테스트하고 인증해야합니다. 결과적으로 여러 버전의 공유 서비스를 동시에 실행해야하며 다른 서비스 사용자가 동시에 액세스 할 수 있어야합니다. 일부 서비스 소비자는 소비자 코드의 마이그레이션이 발생할 때까지 이전 버전의 서비스를 계속 사용해야 할 수도 있습니다. 따라서 웹 서비스 버전 관리는 모든 엔터프라이즈 SOA 접근 방식에서주의 깊게 고려해야하는 중요한 주제입니다.
현재 웹 서비스 표준은 버전을 명시 적으로 지원하지 않으므로 건축가와 개발자가 패턴 적용을 통해 문제를 해결해야합니다. 이 기사는 :
서비스에서 발생할 수있는 변경 유형을 식별합니다.
이 기사의 끝 부분에서 자신 만의 엔터프라이즈 웹 서비스 버전 관리 전략을 수립 할 때 다루어야 할 주요 측면을 잘 이해해야합니다.
변경 유형.
웹 서비스 구현의 변화는 여러 요인에 따라 소비자에게 영향을 줄 수 있습니다.
웹 서비스의 운영 매개 변수 변경. 여기에는 새 매개 변수 추가 (현재 사용자에게 영향을 미침) 또는 웹 서비스의 메시지 매개 변수로 사용될 수있는 XML 문서의 변경과 같은 기존 매개 변수의 변경이 포함될 수 있습니다. XML 문서의 변경 사항에는 선택 요소 또는 특성 (현재 소비자에게 영향을 줄 수 있음) 또는 필수 요소 (현재 소비자에게 영향을 미침)의 추가가 포함될 수 있습니다.
따라서 웹 서비스의 변경 유형은 해당 서비스의 현재 소비자에게 미치는 영향과 관련하여 작성 될 수 있습니다. 한 가지 방법은 현재 소비자에게 영향을 미치지 않는 변경 사항을 부 릴리스로 제공하고 현재 소비자에게 주요 릴리스로 영향을주는 변경을 적용하는 것입니다.
부 릴리스.
부 릴리스는 두 가지 유형 중 하나 일 수 있습니다. 첫 번째는 버그 수정이나 성능 향상입니다. 이 유형은 웹 서비스의 WSDL (Web Services Description Language)에 영향을 미치지 않습니다. 두 번째 유형은 웹 서비스에 새로운 메소드를 추가하는 것으로 구성됩니다. 여기서 WSD는 서비스 소비자에 영향을 미치지 않고 변경됩니다. 이러한 버전에 레이블을 지정할 때이 두 유형을 구분할 수 있습니다. 예를 들어 첫 번째 유형의 경우 버전 번호 (1.0X)의 두 번째 소수 자릿수를 변경할 수 있고 두 번째 유형의 경우 버전 번호 (1.Y0)의 첫 번째 소수 자릿수를 변경할 수 있습니다.
주요 석방.
주요 릴리스에는 이전 버전과의 호환성을 변경하는 변경이 포함됩니다. 이 경우 소비자를 수정해야합니다. WSDL에 영향을주지 않고 웹 서비스의 기능에만 영향을주는 릴리스는 주요 릴리스로 간주됩니다. 이는 현재 소비자가 웹 서비스의 수정 된 기능을 고려하지 않고 새 버전을 호출 할 수 없기 때문입니다. 다양한 유형의 변경 사항과 현재 소비자에 미치는 영향을 파악 했으므로 이제 웹 서비스 버전 관리의 다양한 패턴을 살펴 보겠습니다.
패턴.
소비자 바인딩 패턴.
새 버전의 웹 서비스가 출시되면 (주요 또는 부 릴리스 여부) 소비자는 변경 사항에 대한 알림을 받고 새 버전에 액세스하기 위해 코드를 변경해야합니다. 새 WSDL이 UDDI 레지스트리에 게시되고 소비자에게 알림이 전송되므로 새 서비스를 찾고 새 서비스 공급자와 바인딩을 설정할 수 있습니다. UDDI 레지스트리를 사용하는 한 가지 방법은 특정 버전의 portType을 고유 한 tModel에 연관시키는 것입니다. 하나의 WSDL은 하나의 tModel과 연결됩니다. 두 개의 주요 버전은 두 개의 서로 다른 WSDL을 의미하기 때문에이 tModel에는 주요 릴리스의 버전 번호에 대한 참조가 포함되어야합니다. 한 번에 두 개의 부 버전을 액세스해야하는 경우 tModel에 부 버전에 대한 참조가 포함될 수 있습니다. 해당 portType / 버전의 소비자는 해당 버전의 tModel과 연결하여 컴플라이언스를 알리는 서비스에 대한 녹색 페이지 UDDI 검색을 수행 할 수 있습니다.
이 방법은 최소한 마이너 릴리스에 대해서도 서비스의 버전 (메이저 또는 마이너)에 액세스하기 위해 레지스트리에서 수행 된 검색에서 소비자 코드에 변경을 부과 할 수 있습니다. 동시에 두 개의 부 버전을 실행해야하는 경우에는 어떻게해야합니까? 예를 들어 테스트 사이트에 제한된 수의 소비자가 사용하도록 새 마이너 릴리스를 배포하고 나머지는 이전 버전을 유지하려고 할 수 있습니다. 테스트 사이트에 배포 된 서비스 사용자는 WSDL이 수정되지 않은 경우에도 (부 버전이기 때문에) 서비스의 끝점을 변경해야합니다. 이 특별한 경우에는 다양한 소비자의 이전을 원활하게 유도하기 위해 소비자와 공급자간에 간접적 인 계층을 갖는 것이 유용 할 수 있습니다.
그림 1. 소비자 바인딩 패턴.
참고 : 소비자 바인딩 패턴은 UDDI의 사용을 의미하지는 않습니다. 그것은 소비자 측에서 구속력있는 결정이 내려 졌다는 사실을 의미합니다. 우리는 잠깐이 패턴의 흥미로운 사용법을 논의 할 것입니다.
간접 패턴의 레이어.
새로운 마이너 버전의 웹 서비스가 출시되면 소비자는 새로운 버전으로 투명하게 마이그레이션 할 수 있습니다. 이 기능은 콘텐츠 기반 라우팅이나 사용자 기반 라우팅 (예 : 요청자의 IP 또는 보안 역할을 전파 할 때 요청자의 주체를 기반으로 함)을 호출하는 라우팅 메커니즘을 통해 간접적 인 계층에 의해 제공됩니다 다른 버전의 웹 서비스.
간접 지정 계층을 사용하면 소비자의 코드를 변경하지 않고 두 개의 마이너 릴리스가 공존 할 수 있으며 새 릴리스로의 원활한 마이그레이션을 보장 할 수 있습니다.
그림 2. 간접 패턴 계층.
그러나 주요 릴리스의 경우 소비자는 코드를 변경해야합니다. 그리고 일부 조직적인 이유로 현재 고객의 코드를 변경하지 않고 새로운 주요 릴리스로 이전해야하고 이전 클라이언트와 새 서비스를 호출해야하는 경우 어떻게해야합니까? 예를 들어 일부 규정 사유로 인해 조직의 외부 비즈니스 파트너가 제공하는 새로운 주요 서비스 릴리스를 사용해야 만 변경 사항을 적용 할 수있는 경우가 있습니다. 이로 인해 어댑터를 사용하여 모든 소비자의 코드가 수정 될 때까지 현재의 소비자에게 새로운 주요 릴리스를 사용할 수 있습니다.
어댑터 패턴.
어댑터 패턴은 새로운 주요 릴리스의 서비스를 사용할 수 있도록 클라이언트 요청 및 응답을 적용하는 것으로 구성됩니다. 이 패턴을 사용하면 일부 주요 비즈니스, 규제 또는 조직적 이유로 새로운 주요 버전의 서비스를 사용해야하는 경우보다 원활한 마이그레이션이 가능합니다.
그림 3. 어댑터 패턴.
패턴 적용을위한 솔루션.
서로 다른 패턴을 다른 방식으로 적용 할 수 있습니다. 이는 소비자의 코드에서 수행 할 수 있지만 코딩 지연을 유발하고 버전 관리를 처리하는 코드의 복잡성을 증가시킬 수 있기 때문에 드문 경우입니다. 대안은 공급자로부터 소비자를 분리하고 중재 계층에 이러한 패턴을 적용하기 위해 중재 계층을 사용하는 것입니다. Oracle Service Bus를 중재 계층으로 사용하면 어댑터 패턴과 관련된 간접 계층 패턴의 기능을 제공하여 소비자의 코드를 그러한 우려로부터 덜어줍니다. 그림 4를 참조하십시오.
그림 4. Oracle Service Bus를 사용하여 패턴 적용.
Oracle Service Bus 기반의이 접근법을 사용하면 다음과 같은 이점이 있습니다.
사소한 변경 사항은 소비자를 수정하지 않고 해결할 수 있으며 테스트 사이트는 컨텐츠 기반 또는 사용자 기반 라우팅을 통해 해결할 수 있습니다.
Oracle Service Bus의 조정은 주로 프록시를 사용하여 비즈니스 서비스에 액세스하도록 구성됩니다. 그 사이에는 스테이지, 액션, 브랜치, 라우팅 노드로 구성된 파이프 라인이 있습니다. 메시지는 라우팅 노드에서 요청을 라우팅하여 해당 파이프 라인에 적용됩니다. 프록시 및 비즈니스 서비스의 구성은 버전 번호를 참조하여 구성 할 수 있습니다. Oracle Service Bus의 프록시는 경로에 주요 릴리스에 대한 참조를 포함 할 수 있으며 비즈니스 서비스에는 주 릴리스 및 부 릴리스가 포함될 수 있습니다. 예를 들어, 주요 v1.XX의 경우 하나의 프록시, 하나 이상의 비즈니스 서비스 (마이너 릴리스 당 하나) 및 하나의 WSDL이 있습니다.
. 주요 V2.XX의 경우 :
주 : 프록시와 WSDL은 부 릴리스의 경우와 동일하기 때문에이 버전을 포함하는 경로에는 부 버전에 대한 참조가 포함될 필요가 없습니다.
우리는 Oracle Service Bus를 통해 다른 서비스에 대한 액세스를 처리했습니다. 그러나 동일한 개발 환경에서 서비스 제공 업체의 두 가지 버전을 배포하는 것과 같이 처리해야 할 다른 문제가 있습니다. 이러한 서비스는 동일한 개발 도구를 사용하여 개발 되었기 때문에 동일한 Java Platform, Enterprise Edition (Java EE) 웹 모듈 컨텍스트 경로를 가질 수 있습니다. 따라서 Java EE 웹 모듈의 컨텍스트에서 버전 참조를 추가하는 빌드 스크립트를 제공하지 않으면 동일한 서비스의 서로 다른 버전을 다른 대상에 배치하는 것을 고려할 수 있습니다. (대상은 클러스터 또는 관리 대상 서버입니다.) 그림 5를 참조하십시오.
그림 5. 다른 대상에 서비스 공급자 배치.
참고 : Oracle JDeveloper를 포함한 일부 프레임 워크 및 개발 도구는 일부 서비스 공급자의 버전을 자동화합니다. 이 기능은 Oracle JDeveloper 11 Technical Preview 4에서 Service Component Architecture (SCA) 복합체 (하나의 복합체에서 여러 서비스)의 버전 관리를 다루기 위해 확장되었습니다.
프레젠테이션 서비스와 오케스트레이션 서비스 (비즈니스 프로세스 서비스)는 비즈니스 서비스 계층 또는 데이터 액세스 서비스 계층에 속한 다른 서비스를 사용할 때이 접근법의 투명성을 활용할 수 있습니다. 그러나 프레젠테이션 서비스의 소비자는 어떻습니까? 복합 포털은 WSRP (Web Services for Remote Portlets)를 사용하여 원격 포틀릿을 사용하는 프레젠테이션 서비스를 사용할 수 있습니다. Oracle Service Bus를 사용하는 어댑터 패턴과 결합 된 간접 계층 패턴도이 경우에 적용 할 수 있지만 포털 기능을 기반으로보다 적응 된 접근 방식을 사용할 수 있습니다. 포털에는 일반적으로 포틀릿에 대한 액세스 구성 (재사용 가능한 프레젠테이션 서비스)을위한 관리 도구가 함께 제공됩니다. 사용자 속성에 따라 복합 포털의 일부분을 표시하기 위해 사용자의 역할 기반 규칙 및 인 타이틀먼트를 사용하면 프레젠테이션 서비스에 더 적합 할 수 있습니다. 이것은 Oracle Service Bus보다 복합 포털 엔진에 대한 관심이 더 큽니다.
따라서 소비자 바인딩 (Binding) 패턴을 사용하여 프리젠 테이션 서비스 계층 버전 관리를보다 잘 조정할 수 있습니다. 이 컨텍스트에서 UDDI 레지스트리를 사용하여 서비스를 선택하면 패턴이 적용되지 않습니다. 이 경우이 패턴을 적용하는 것은 복합 포털에서 제공하는 인 타이틀먼트 또는 개인 설정 엔진에 의존합니다. 이 패턴을 사용하는 중요한 측면 중 하나는 포털 관리 도구에서 구성을 통해 버전을 선택한다는 것입니다. 따라서 코드 수정이나 유지 관리를 의미하지는 않습니다.
아래 그림은 복합 포털이 동일한 응용 프로그램의 서로 다른 버전에서 WSRP를 통해 포틀릿을 소비하는 방법을 보여줍니다. 노출 될 포틀릿 버전 선택은 복합 포털 엔진에서 수행됩니다.
그림 6. 프리젠 테이션 서비스에 적용된 소비자 바인딩 패턴
이렇게하면 동일한 응용 프로그램의 두 버전을 동시에 실행할 수 있으므로 사용자 프로필 속성을 기반으로 선택한 최종 사용자에게만 새로운 기능이 제공됩니다.
결론.
웹 서비스 버전 관리는 비즈니스 제약 조건과 서비스가 속한 계층에 따라 다양한 방식으로 처리 될 수 있습니다. 이 기사에서는 다양한 버전 관리 작업에 적용 할 수있는 방법을 다뤘습니다.
동시에 여러 버전의 서비스 공급자 액세스 및 배포.
XML 스키마 버전 관리 및 서비스와 해당 서비스에서 사용되는 XML 스키마 간의 종속성 관리와 같은 몇 가지 추가 요소를 고려해야합니다. 조직 수준에서는 종속성을 관리하고 적절하고 전체적으로 변경 사항을 관리하기위한 적절한 도구가 없으면이 작업을 처리하기가 매우 어려워집니다.
Gabriel Bechara는 2003 년부터 Oracle-BEA 사전 판매 및 컨설팅 서비스를 담당해 왔습니다. 소프트웨어 업계의 15 년 경력을 지닌 Gabriel은 대형 프로젝트에 대한 건축가이자 조언자로서 실제 경험과 피드백을 제공하여 새로운 정보 시스템 구축. 그의 관심사는 비즈니스 통합 및 SOA에 중점을두고 소프트웨어 및 엔터프라이즈 아키텍처를 정의하는 방법론을 포함합니다.
버전 관리 전략 웹 서비스
Microservices Expo : 기사.
웹 서비스 버전 관리를위한 설계 전략.
사업의 필요에 적응.
응용 프로그램 버전 관리는 개발자 커뮤니티에 항상 도전 과제였습니다. 웹 서비스가 도입됨에 따라 개발자가 반드시 제어 할 필요가없는보다 분산 된 구성 요소 집합을 처리 할 때이 문제는 더욱 어려워집니다.
개발시 여러 버전의 웹 서비스를 지원하려면 강력한 버전 관리 전략이 필요합니다. 이를 통해 이전에 릴리스 된 버전을 계속 지원하면서 웹 서비스를 업그레이드하고 개선 할 수 있습니다. 올바른 버전 관리 전략은 코드 재사용을 극대화하고 웹 서비스의 이름 지정, 배포 및 유지 관리에보다 관리하기 쉬운 접근 방식을 제공 할 수 있습니다.
버전 관리 문제는 복잡하며이 기사에서는 XML 및 웹 서비스 버전 관리와 관련된 모든 질문에 대답하지 않습니다. 그러나 우리가 개발할 때 도움이되는 몇 가지 주요 접근법과 설계 방법이 여기에 있습니다. 우리가 취할 접근법은 컴포넌트 레벨 (XML Schemas)에서 시작하여 facades 및 서비스 지향적 (SOA) 기반 아키텍처를 포함하여 더 높은 서비스 레벨 추상화까지 작업하는 것입니다. 길을 따라 여러 가지 수준의 디자인에 버전 관리 기술을 적용하는 데 적용 할 수있는 몇 가지 중요한 모범 사례를 제공하기를 바랍니다.
먼저 XML 스키마의 중요성을 살펴 보겠습니다.
버전 관리에서 XML 스키마의 중요성.
웹 서비스의 버전 관리는 먼저 사용되는 XML 스키마의 버전 관리 방법을 고려해야합니다. 스키마 버전 속성 사용, 스키마의 실제 위치 변경 및 XML 네임 스페이스 사용을 비롯하여 다양한 XML 스키마 버전을 사용할 수 있습니다.
XML 네임 스페이스는 XML에 대한 범위 지정 메커니즘을 제공하며, 이 네임 스페이스에 정의 된 요소를 고유하게 식별 할 수 있습니다. 네임 스페이스는 일반적으로 스키마 간의 이름 충돌을 줄이기 위해 사용되지만 버전 제어 메커니즘으로도 사용할 수 있습니다. 네임 스페이스를 버전 관리에 사용할 수있는 방법을 보여주는 간단한 예가 있습니다.
버전이있는 스키마를 참조하는 웹 서비스는 targetNamespace에 내장되어 있기 때문에 버전에 대한 지식이 필요합니다. 이 접근법의 이점은 일단 targetNamespace가 업데이트되면이를 참조하는 모든 클라이언트가 무언가를해야한다는 것입니다. 이렇게하면 자동으로 클라이언트의 일부 작업이 필요한 버전 제어 수준이 적용됩니다.
이 접근 방식의 단점은 점진적 변화가 클라이언트가 변경해야한다는 것입니다. 분명히 클라이언트가 사용하는 WSDL 작업을 제거하는 것과 같은 호환되지 않는 변경은 클라이언트 수정이 필요합니다. 그러나 스키마에 선택적 속성을 추가하는 것과 같은 변경 사항은 기존 코드와 계속 호환 될 수 있습니다. 디자인에서 다루어야 할 핵심 질문 중 하나는 다음과 같습니다. 새로운 웹 서비스 버전을 구성해야하는 변경 사항은 무엇입니까? 변경으로 인해 새로운 네임 스페이스가 생기는 방식을 사용하면 스키마를 사용하는 개발자에게 큰 부담이됩니다.
하나의 제안 된 하이브리드 솔루션은 네임 스페이스와 버전 ID의 조합을 사용하는 것입니다. targetNamespace는 호환되지 않는 변경 사항에 대해서만 업데이트됩니다. 증분 호환 가능 변경의 경우 버전 ID 속성을 사용하여 새 개정을 식별 할 수 있습니다. 다음과 같은 접근 방식은 새 버전의 웹 서비스가 출시 될 때 개발자가 요구하는 유지 관리 작업을 크게 줄일 수 있습니다.
버전 호환성은 결정하기가 매우 어려울 수 있습니다. 이를위한 강력한 개발 도구가 없으면 새 릴리스가 호환성을 유지하는지 여부를 결정하는 것은 개발 팀의 책임입니다. 이 절에서는 XML 스키마 버전 관리에 대한 여러 가지 방법을 제시했습니다. 이 아키텍처 수준에서 버전 관리를 고려하는 경우 제한된 용량으로 XML 네임 스페이스를 사용하여 XML의 주요 버전 업그레이드를 권장합니다. 그러나 버전 호환성을 확인하기 위해 서비스를 완전히 테스트하는 것이 좋습니다.
버전 지정을위한 명명 규칙.
릴리스 관리를 단순화하기 위해서는 웹 서비스의 각 릴리스에 대한 이름이 있어야합니다. 명명 전략을 사용하면 기존 인터페이스와 새 인터페이스를 포함하여 여러 버전의 웹 서비스를 쉽게 인식 할 수 있습니다. 순차적 이름 지정 전략이나 날짜 스탬프를 사용하는 등 다양한 전략을 구현할 수 있습니다.
순차적으로 버전 이름을 지정할 때 "vMajor #.Minor # / SERVICE_NAME"규칙을 사용할 수 있습니다. 여기서 Major #는 주 버전이고 Minor #는 부 번호 릴리스입니다. 클라이언트 코드는 새 버전을 사용하지만 마이너 릴리스는 클라이언트와의 이전 버전과의 호환성을 유지하려고 시도하지만 마이너 버전은 내부 시스템에만 영향을주는 웹 서비스의 수정 사항이 될 수 있습니다.
웹 서비스의 표준 메소드 이름은 "_v # _ #"의 이름 끝에 추가됩니다. 따라서 getProductCatalog 서비스의 경우 작업을 "getProductCatalog_v1_1"로 정의 할 수 있습니다. 또는 이것을 XML 네임 스페이스에 적용하면 다음과 같이 보일 수 있습니다.
버전을 명명하는 또 다른 방법은 날짜 스탬프를 네임 스페이스의 일부로 사용하는 것입니다. 날짜는 버전의 순서를 결정하는 데 도움이됩니다. 이 명명 규칙은 주 릴리스 또는 부 릴리스를 표시하지 않습니다. 스키마의 정의에서 이것이 어떻게 나타날지는 다음과 같습니다.
기억해야 할 중요한 점은 버전의 이름을 지정하는 데있어 최상의 솔루션이 하나도 없다는 것입니다. 접근 방식은 사용하는 배포 전략과 클라이언트가 버전을 구별하고 호환성을 유지하기 위해 가질 수있는 특정 요구 사항에 따라 다릅니다.
또한 이러한 기술을 설계의 모든 구성 요소에 적용해야하는 경우 이러한 기술을 관리하기 어려워 질 수 있다는 점도 분명해야합니다.
이를 해결하기 위해 디자인 패턴 및 서비스 지향 아키텍처로보다 조잡한 서비스를 구축하기위한 몇 가지 중요한 설계 방법을 살펴 보겠습니다.
웹 서비스 Facades 사용하기.
조직이 웹 서비스를 구축, 배포 및 조율함에 따라 더 높은 수준의 버전 관리 및 관리가 필요함이 분명해졌습니다. 노출되는 기술 인터페이스보다는 비즈니스 수준에서 서비스에 대해 생각해야합니다. 그러나 웹 서비스를 조사하는 많은 조직에서는 여전히 객체 지향 패러다임의 확장으로 웹 서비스를 조사하고 있습니다. 그들은 기존 객체를 가져 와서 웹 서비스 인터페이스로 직접 노출시키는 실수를합니다. 이렇게하면 세분화되고 사용하기 어려운 웹 서비스가 제공 될 가능성이 큽니다. 또한 웹 서비스 버전 관리에 대한 일관된 접근 방식을 통합하기가 어려울 수 있습니다.
대신, 먼저 WSDL의 관점에서 생각하고 나중에 백엔드 구현에 매핑하십시오. 이 방법은 느슨하게 결합 된 아키텍처를 제공하여 특정 구현에 대한 종속성을 최소화합니다. 또한 Web Services Facade와 같은 패턴을 디자인하여 거친 구성 요소의 생성을 지원해야합니다. 이 패턴은 노출되는 인터페이스의 복잡성을 제거합니다. 복합 웹 서비스는 서비스 콜렉션에 대해 다중 인터페이스 지점을 갖는 것이 아니라보다 간단하고 잘 이해 된 비즈니스 인터페이스로 설계 될 수 있습니다.
그림 1에서 보듯이, Facade는 Change Order 요청을하는 데 필요한 단계를 단순화하는 데 사용할 수 있습니다. 이 그림은 제공자의 관점에서 사용되는 정면을 보여 주지만 소비자는 서비스에 대한 액세스를 단순화하기 위해 정면을 디자인 할 수도 있습니다.
이 패턴을 사용하면 소비자와 서비스 간의 결합 수준을 최소화하고, 관리 가능성을위한 제어 지점을 만들고, 네트워크 통화 수를 줄임으로써 전반적인 성능을 향상시키는 등 여러 가지 이점을 얻을 수 있습니다. 파사드 패턴은 여러 웹 서비스 버전을 동시에 지원하는 본래의 복잡성을 관리하기위한 프레임 워크를 제공 할 수도 있습니다.
그림 2에서 보듯이이 패턴의 한 구현은 코드를 요청 처리자 클래스, facade 비즈니스 플로우 클래스 및 비즈니스 객체 클래스의 세 가지 별개 계층으로 분리하여 추상화 수준을 만듭니다.
관리 클래스 인 세션 Facade 클래스는 더 작은 Business Object 클래스를 함게 체인화합니다. 각 Business Object 클래스에는 처리 로직의 서브 유닛이 들어 있으며이 모든 Business Object 클래스의 체인은 핵심 비즈니스 로직을 제공합니다. 각 세션 facade 클래스 자체는 처리 로직을 포함하지 않지만 비즈니스 오브젝트를 연결하여 원하는 비즈니스 로직을 구현합니다.
이 아키텍처는 프로세스를 서로 분리하여 구성 요소를 재사용 할 수 있도록합니다. 또한 비즈니스 요구 사항이 다른 버전의 서비스에서 변경 될 때 웹 서비스의 복잡성을 관리하는 데 도움이됩니다. 비즈니스 요구 사항을 실행하기 위해 활용되는 프로세스는 개별적으로 클래스 체인을 관리하는 소프트웨어 코드로 추상화되어 순서대로 실행됩니다. 이러한 코드를 하나로 묶어 특정 비즈니스 프로세스 흐름을 준수하도록 필요한 비즈니스 프로세스를 구현합니다. 따라서 여러 관리 클래스를 작성하여 서로 다른 비즈니스 플로우를 동시에 구현하고 유지 관리 할 수 있습니다.
서비스 지향 아키텍처의 중요성.
대단위 서비스의 디자인은 클라이언트 인터페이스를 단순화하고 재사용을 극대화하는 버전 관리 전략의 중요한 측면입니다. 구현 레벨에서 facades를 설계하는 것은 도움이 될 수 있지만, 여전히 누군가가 다루어야하는 다양한 수준에서 기본 인프라에 대한 중대한 변경이 필요합니다. 진정으로 필요한 것은 웹 서비스의 전체 수명주기를 관리하는 데 도움이되는 SOA 기반 플랫폼입니다.
SOA 기반 접근 방식은 소프트웨어 구성 요소를 분산 된 비즈니스 서비스의 모음으로 제공합니다. 비즈니스 서비스는 비즈니스 응용 프로그램을 나타내는 단일 엔터티의 역할을하며 여러 IT 리소스, 플랫폼 및 구성 요소를 포함 할 수 있습니다. 그림 3에서 단순화 된 모델은 소비자, 공급자 및 레지스트리의 역할을 분리합니다. 공급자는 소비자가 나중에 발견하고 호출 할 수있는 레지스트리에 사용 가능한 서비스를 등록합니다. 소비자는 특정 서비스 엔드 포인트 또는 구현 세부 사항을 직접 인식하지 못합니다. SOA는 공급자와 소비자를 더 많이 분리 시키며 SOA가 변경되면 소비자에게 미치는 영향을 최소화 할 수 있습니다.
SOA는 일반적으로 제공자와 소비자 사이의 중개자 역할을 할 수있는 일종의 프레임 워크 또는 플랫폼을 필요로합니다. 이 중간 단계가 없으면 소비자는 서비스 엔드 포인트와보다 밀접하게 결합 된 통합을 구축해야합니다. 이 중개자는 보안, 라우팅, SLA 관리 및 라이프 사이클 관리와 같은 문제를 처리하는 프록시, 게이트웨이 또는 브로커로 구현 될 수 있습니다.
플랫폼에서 제공하는 라이프 사이클 관리 기능은 버전 관리에 대한 핵심적인 논의입니다. 현재 시장에 나와있는 일부 웹 서비스 및 SOA 관리 플랫폼은 라이프 사이클 관리를 지원합니다. 서비스의 여러 버전을 동시에 처리하는 기능 적절한 방식으로 서비스를 사용 중단 또는 중단 요청에 따라 적절한 서비스 끝점으로 요청 라우팅 요청과 응답을 변환하여 이전 버전과의 호환성 유지 (예 : XSLT 사용) 시스템 종료를 요구하지 않고 새 버전을 자동으로 배포 서로 다른 웹 서비스간에 존재하는 종속성 관리 라이프 사이클 관리는 웹 서비스 배포 관리 이상의 것입니다. 라이프 사이클 관리에는 비즈니스 서비스 관점에서 많은 플랫폼, 애플리케이션 서버 및 데이터베이스 인스턴스가 포함될 수 있습니다. 이 수준의 서비스를 진정으로 관리하려면 종속 된 모든 응용 프로그램 구성 요소 및 인프라 요소가 배포 및 관리되는 방법을 고려해야합니다.
일반적인 버전 관리 문제를 보여주는 예를 살펴 보겠습니다. 그림 4에서 제공자는 초기 버전의 웹 서비스 V1.0을 제공했습니다. 플랫폼은이 서비스에 대한 요청을 적절한 서비스 엔드 포인트로 자동 라우팅합니다. 라우팅은 UDDI 레지스트리에 배치 된 정보를 기반으로 결정될 수 있거나 기본 관리 모델이이를 관리 할 수 있습니다 (예 : WSDM 인터페이스를 통해).
어떤 시점에서 이전 버전과의 호환성을 유지하는 두 번째 버전의 서비스가 배포됩니다. SOA 내에서 새로운 서비스는 원래 비즈니스 서비스와 새로운 비즈니스 서비스를 모두 지원하는 것으로 식별됩니다. 원래 비즈니스 서비스에 대한 요청은 서비스 엔드 포인트로 중개 될 수 있습니다. 새로운 기능에 액세스하고자하는 소비자는 적절한 프로그래밍 방식으로 변경해야합니다.
이러한 버전 관리 방식을 통해 IT 조직은 비즈니스에서 요구하는 변경 사항에보다 잘 적응할 수 있습니다. 소비자에게 영향을 미치지 않고 여러 버전의 서비스를 동시에 유지 관리 할 수 있습니다. 이전 버전은 정상적으로 폐기 될 수 있으며 새로운 버전이 출시 될 때까지 강제로 업그레이드되는 대신 소비자가 자신의 시간에 업그레이드 할 수 있습니다.
견고한 디자인과 버전 관리를위한 견고한 아키텍처가 있더라도이 과정에서 반드시 고려해야 할 인적 요소가 있습니다. 버전 관리 수명주기를 이해하면 새 버전을 구현하고 이전 버전을 효과적으로 사용 중지하는 데 도움이됩니다. 이 프로세스의 첫 번째 단계는 지원되는 웹 서비스의 수명주기를 설명하는 견고한 계획을 작성하는 것입니다. 이 계획에는 다음 단계가 포함될 수 있습니다.
1. 얼마나 자주 버전을 발표할지 결정하십시오. 빈도를 고려할 때 병렬로 지원할 웹 서비스 버전을 고려해야합니다.
2. 소비자가 새로운 버전의 서비스로 이동할 것으로 예상되는 시간대를 이해합니다. 웹 서비스 관리 플랫폼은 서비스 사용에 대한 지침을 제공하여 이전 버전을 단계적으로 제거 할 적절한 시간을 결정할 수 있습니다.
3. 파일럿 또는 새 버전의 초기 릴리스 릴리스를 고려하십시오. 호환성을 테스트하고 잠재적 인 코드 영향을 결정할 기회를 소비자에게 제공하십시오.
4. 소프트웨어 패키지가 릴리스 될 수있는 것과 동일한 방식으로 웹 서비스 버전 관리에 접근하십시오. 버그 수정, 파트너 요청 또는 사양 업그레이드로 인한 서비스 변경은 특정 릴리스주기를 따라야합니다.
5. 웹 서비스 사용자에게 웹 서비스 버전 전략을 명확하게 전달하십시오.
각 버전에 대해 버전 관리 전략을 계획하고 나면 다음 단계를 고려해야합니다.
1. 서비스를 적절히 변경 한 후 서비스의 단위 및 기능 테스트를 수행하십시오.
2. 적절한 스키마, WSDL 및 서비스 변경을 통해 새 서비스를 배포합니다. 이 단계에는 UDDI 레지스트리 또는 웹 서비스 플랫폼에 대한 등록이 포함될 수 있습니다.
3. 소비자에게 새로운 서비스를 알리고 소비자 중 한 명과 함께 새 버전을 시험하십시오.
4. 버전 계획에서 할당 한 기간 동안 새 버전과 구 버전을 병행하여 실행하십시오.
5. 이전 버전을 더 이상 사용하지 않을 것으로 예상하는 날짜를 귀하의 서비스 소비자에게 알리십시오.
6. WSDL 설명 및 UDDI 레지스트리에서 이전 버전을 제거하여 새 소비자가 이전 버전을 검색하고 사용하지 못하도록합니다.
7. 기존 서비스의 기능을 제거하고 기존 기능이 추가되어 기존 사용자가 더 이상 지원되지 않는다는 사실을 SOAP 오류 등을 통해 알립니다.
배포에 대한 한 가지 접근 방법이 그림 5에 나와 있습니다. 달력은 회사의 재무 달력의 분기에 표시됩니다. 새 버전은 분기 초에 도입 할 수 있습니다 (예 : 2003 년 1 분기). 4 분기 동안 유효하고 2004 년 1 분기 초 일몰입니다. 이 경우 서비스 소비자는 새 버전으로 전환하는 데 6 개월을 사용할 수 있습니다. 주 버전간에 부 버전을 릴리스 할 수도 있습니다. 그런 다음이 마이너 릴리스는 릴리스 될 때 웹 서비스 버전 2.0으로 접힐 수 있습니다.
이 기사는 웹 서비스를 버전 관리 할 때 여러 가지 고려 사항을 제시했다. 스키마에 대한 버전 관리 방식을 개발하든 SOA 방식을 사용하여 본격적인 버전 관리 시스템을 구축하든간에 우리가 남겨두고 자하는 몇 가지 핵심 사항이 있습니다.
첫째, 서비스가 다른 소비자에게 제공되는 경우 서비스 버전이 늘어날수록 버전 관리가 악몽이 될 수 있습니다. 디자인 목표는 관리되는 버전에서 다시 활용하고 재사용 할 수있는 재사용 가능한 구성 요소를 구축하는 것입니다. 장기적으로 유지 관리 및 배치 비용이 절감됩니다.
둘째, 이러한 변화가 소비자에게 미치는 영향을 과소 평가하지 마십시오. While the design you introduce might reduce your development costs, you must also consider how these changes impact the end consumer. Service compatibility is key to this, and if new services maintain backward compatibility, consumers wishing to use the existing functionality shouldn't be required to change. The architecture should provide an easy migration and upgrade path for them.
Third, you want to strive to isolate the technical implementation and provide a clear separation between the consumer and provider. This might be implemented using design patterns such as the Facade, or it could require an SOA-based approach. Either way, the notion of coarse-grained business services offers a more loosely coupled architecture where consumers and providers can change without impacting the other party.
The last piece of advice we could offer is to not attempt to build the entire versioning infrastructure yourself. If you look at the requirements for manageability, they include a wide range of features such as routing, transformation, versioning, and security. Leveraging a vendor offering, especially one that provides a service-oriented approach IT management, can go a long way toward offering an architecture that can truly adapt to the changing needs of the business.
Published April 5, 2004 Reads 53,759.
저작권 및 사본; 2004 SYS-CON Media, Inc. — 판권 소유.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Chris Peltz.
Chris Peltz is a senior architect within HP's.
Developer Resources Organization (devresource. hp), providing technical and architectural consulting to enterprise customers in the areas of J2EE, Web services, and.
More Stories By Anjali Anagol-Subbarao.
Anjali Anagol-Subbarao works in HP's IT organization as an IT architect. She has 12 years of IT experience, the last five in Web services. Her book on J2EE Web services on BEA WebLogic was published in October 2004.
Click this link to view as XML.
ADD THIS FEED TO YOUR ONLINE NEWS READER.
Cloud Expo.
All of Cloud Is at Cloud Expo!
Containers - Microservices - WebRTC - DevOps.
Join Us at the Javits Center in New York, NY, June 6-8.
• Big Data | 해석학.
• Internet of Things.
지금 등록하세요!
Save on your "Golden Pass"! Call 201.802.3020.
or click here to Register.
Submit your speaking proposal for the upcoming Cloud Expo in New York.
Please Call 201.802.3021.
events (at) sys-con.
carmen (at) sys-con.
판권 소유. All marks are trademarks of Ulitzer, Inc.
Reproduction in whole or in part in any form or medium without express written permission of Ulitzer, Inc. is prohibited.
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
웹 서비스 업데이트 또는 버전 관리 전략
다른 버전의 웹 서비스가 어떻게 처리되는지에 대한 베스트 프랙티스를 듣고 싶습니다.
명확하게하기 위해 웹 서비스로 노출 된 웹 메소드가있는 경우 기능 / 기능을 추가하여 해당 메소드 호출의 서명을 변경하려는 경우 모든 것을 손상시키지 않는 방식으로이 메소드를 처리하는 방법 현재 서비스를 호출하는 고객의
다른 URL에 서비스를 배포합니까?
메서드 이름 자체에 버전을 지정합니까 (MyMethod, MyMethodv2 등).
매개 변수 목록과 함께 메서드 호출의 일부로 버전을 전달합니까?
누구든지 Google이나 Amazon이 이러한 시나리오를 광범위한 웹 서비스 라이브러리로 처리하는 방법을 알고 있습니까?
편집 : 지금까지 오라클 에서이 문서에 좋은 정보를 발견. 또한이 자바 항목에 대한 블로그 항목도 유용했습니다. 나는 여전히 다른 접근 방식 중 일부를보고 싶어한다.
웹 서비스를 버전 관리하는 일반적인 방법은 클라이언트가 원하는 버전을 지정하도록하는 것입니다. "> 2.0", "<1.5"또는 "= 1.1"과 같은 간단한 제약 조건을 허용 할 수 있습니다. 당연히, 당신은 자신의 온 전성을 위해 지원되는 버전의 수를 최소화하고 싶습니다. 클라이언트가 버전을 지정하지 않으면 최신 버전을 사용합니다.
버전을 제공하는 기술은 다양합니다. 일부는 URL을 사용하고 다른 일부는 헤더를 권장하고 일부는 API 호출의 매개 변수로 포함시킬 수 있습니다. 그러나 거의 아무도 메소드의 이름을 변경하지 않습니다. OSGi 링크를 버전 화하는 "패키지"또는 "네임 스페이스"와 동일한 의미가 있습니다. 업그레이드가 매우 어려워지고 실제 서비스 변경보다 사람들이 업그레이드하는 것을 방해합니다.
또한 웹 서비스에 액세스하는 방법에 따라 다릅니다. REST를 사용하는 경우 URL을 깨끗하게 유지하고 헤더를 사용하는 것이 가장 적합합니다 (필요한 경우 검색어 매개 변수로 해킹하는 것은 간단합니다). SOAP / XMLRPC / whatever-RPC를 사용하고 있다면 URL에 넣는 것이 좋습니다.
클라이언트가 버전을 지정하는 방법은 일반적으로 매우 쉽습니다. 더 복잡한 것은 모든 버전을 동시에 실행하는 방법입니다. 대부분의 언어는 동일한 라이브러리 / 모듈 / 클래스 / 함수의 여러 버전을 동일한 런타임 환경 (VM, 프로세스 또는 기타 사용자)으로로드 할 수있는 방법이 없습니다. 제공 한 OSGi 링크는이를 허용하는 Java의 솔루션입니다.
실제로 OSGi는 대부분의 상황에서 과도하게 사용됩니다. 대개 더 이상 사용되지 않는 요청을 다른 서버 또는 프로세스에 프록시하는 것이 더 쉽습니다.
하지만 서비스의 "버전"을 향상시키는 가장 좋은 방법은 확장 성 및 유연성을 구축하여 전방 및 후방 호환성을 유지하는 것입니다. 그렇다고 모든 버전이 서로 호환되어야한다는 의미는 아니지만 연속 버전은 서로 호환되어야합니다.
doAPIFunction, doAPIFunctionV2 및 doAPIFunctionV3 등을 만드는 솔루션은 제가 일하는 곳에서 두통을 일으키지 않았다고 말할 수 있습니다. 명확하게 설명하는 함수 이름이 부족하다는 것은 모든 종류의 광기를 의미합니다.
명확한 API 함수 이름이 필요하며 API가 변경되면 가능한 한 이전 버전과 호환되도록 시도하고 수행하는 것이 목표입니다. 각 진입 점이 안정적인 API를 지원하고 example. org/api-1.0/의 doFunction이 의미를 변경해야하는 좋은 이유가있는 경우 example. org/api-2.0과 다를 수 있으므로 진입 점의 버전을 지정하는 것이 좋습니다.
나는 당신의 질문을 정확하게 이해할 지 확신하지 못합니다. 하지만 2 센트. 메소드의 시그니처가 다른 새로운 매개 변수와 같이 변경되면 선택 사항이 될 수없는 이유는 무엇입니까? 그러나 기존 매개 변수 데이터 유형이 변경되면 적용 할 수 없습니다.
명백하지 않은 경우이 점에 투표하십시오. :)
몇 년 전에 동일한 웹 서비스 메서드 이름과 다른 매개 변수를 사용할 수 있었을 때 더 간단했습니다. :)
웹 서비스를 작성하고 나면 고객과 계약을 맺고 이것이 지원할 것입니다.
오래된 방법의 경우, 내가 사용하고 있는지, 그리고 누구에 의해 업데이트를받을 수 있는지를 알기 위해 로깅을 제안 할 것입니다.
다른 방법으로는 가장 좋은 방법은 새로운 메소드를 작성하는 것입니다. 따라서 버전에 따라 여러 가지 유사한 함수 이름을 사용할 수 있습니다.
버전 번호를 전달할 때의 문제는 클라이언트가 항상 유효한 숫자를 전달하는지 확인해야한다는 것입니다. 스텁을 생성하면 작동하지만, 그렇지 않으면 매우 약해집니다.
이름에 버전 번호를 넣는 것이 나에게 가장 효과적 인 것처럼 보입니다. 예전 버전을 분명히 알 수 있으며 AOP를 사용하여 이전 버전의 웹 서비스 메소드를 더 쉽게 기록 할 수 있습니다.
웹 서비스 버전 관리.
Gabriel Bechara.
소개.
웹 서비스는 시간이 지남에 따라 변화하고 발전해야합니다. 서비스 지향 아키텍처 (SOA)의 느슨한 결합 원칙은 서비스 제공 업체가 소비자의 적응을 기다리지 않고 새로운 버전의 공유 서비스를 출시 할 수 있다는 것을 의미하며 서비스 소비자는 전환하기 전에 새로운 공유 서비스 버전을 테스트하고 인증해야합니다. 결과적으로 여러 버전의 공유 서비스를 동시에 실행해야하며 다른 서비스 사용자가 동시에 액세스 할 수 있어야합니다. 일부 서비스 소비자는 소비자 코드의 마이그레이션이 발생할 때까지 이전 버전의 서비스를 계속 사용해야 할 수도 있습니다. 따라서 웹 서비스 버전 관리는 모든 엔터프라이즈 SOA 접근 방식에서주의 깊게 고려해야하는 중요한 주제입니다.
현재 웹 서비스 표준은 버전을 명시 적으로 지원하지 않으므로 건축가와 개발자가 패턴 적용을 통해 문제를 해결해야합니다. 이 기사는 :
서비스에서 발생할 수있는 변경 유형을 식별합니다.
이 기사의 끝 부분에서 자신 만의 엔터프라이즈 웹 서비스 버전 관리 전략을 수립 할 때 다루어야 할 주요 측면을 잘 이해해야합니다.
변경 유형.
웹 서비스 구현의 변화는 여러 요인에 따라 소비자에게 영향을 줄 수 있습니다.
웹 서비스의 운영 매개 변수 변경. 여기에는 새 매개 변수 추가 (현재 사용자에게 영향을 미침) 또는 웹 서비스의 메시지 매개 변수로 사용될 수있는 XML 문서의 변경과 같은 기존 매개 변수의 변경이 포함될 수 있습니다. XML 문서의 변경 사항에는 선택 요소 또는 특성 (현재 소비자에게 영향을 줄 수 있음) 또는 필수 요소 (현재 소비자에게 영향을 미침)의 추가가 포함될 수 있습니다.
따라서 웹 서비스의 변경 유형은 해당 서비스의 현재 소비자에게 미치는 영향과 관련하여 작성 될 수 있습니다. 한 가지 방법은 현재 소비자에게 영향을 미치지 않는 변경 사항을 부 릴리스로 제공하고 현재 소비자에게 주요 릴리스로 영향을주는 변경을 적용하는 것입니다.
부 릴리스.
부 릴리스는 두 가지 유형 중 하나 일 수 있습니다. 첫 번째는 버그 수정이나 성능 향상입니다. 이 유형은 웹 서비스의 WSDL (Web Services Description Language)에 영향을 미치지 않습니다. 두 번째 유형은 웹 서비스에 새로운 메소드를 추가하는 것으로 구성됩니다. 여기서 WSD는 서비스 소비자에 영향을 미치지 않고 변경됩니다. 이러한 버전에 레이블을 지정할 때이 두 유형을 구분할 수 있습니다. 예를 들어 첫 번째 유형의 경우 버전 번호 (1.0X)의 두 번째 소수 자릿수를 변경할 수 있고 두 번째 유형의 경우 버전 번호 (1.Y0)의 첫 번째 소수 자릿수를 변경할 수 있습니다.
주요 석방.
주요 릴리스에는 이전 버전과의 호환성을 변경하는 변경이 포함됩니다. 이 경우 소비자를 수정해야합니다. WSDL에 영향을주지 않고 웹 서비스의 기능에만 영향을주는 릴리스는 주요 릴리스로 간주됩니다. 이는 현재 소비자가 웹 서비스의 수정 된 기능을 고려하지 않고 새 버전을 호출 할 수 없기 때문입니다. 다양한 유형의 변경 사항과 현재 소비자에 미치는 영향을 파악 했으므로 이제 웹 서비스 버전 관리의 다양한 패턴을 살펴 보겠습니다.
패턴.
소비자 바인딩 패턴.
새 버전의 웹 서비스가 출시되면 (주요 또는 부 릴리스 여부) 소비자는 변경 사항에 대한 알림을 받고 새 버전에 액세스하기 위해 코드를 변경해야합니다. 새 WSDL이 UDDI 레지스트리에 게시되고 소비자에게 알림이 전송되므로 새 서비스를 찾고 새 서비스 공급자와 바인딩을 설정할 수 있습니다. UDDI 레지스트리를 사용하는 한 가지 방법은 특정 버전의 portType을 고유 한 tModel에 연관시키는 것입니다. 하나의 WSDL은 하나의 tModel과 연결됩니다. 두 개의 주요 버전은 두 개의 서로 다른 WSDL을 의미하기 때문에이 tModel에는 주요 릴리스의 버전 번호에 대한 참조가 포함되어야합니다. 한 번에 두 개의 부 버전을 액세스해야하는 경우 tModel에 부 버전에 대한 참조가 포함될 수 있습니다. 해당 portType / 버전의 소비자는 해당 버전의 tModel과 연결하여 컴플라이언스를 알리는 서비스에 대한 녹색 페이지 UDDI 검색을 수행 할 수 있습니다.
이 방법은 최소한 마이너 릴리스에 대해서도 서비스의 버전 (메이저 또는 마이너)에 액세스하기 위해 레지스트리에서 수행 된 검색에서 소비자 코드에 변경을 부과 할 수 있습니다. 동시에 두 개의 부 버전을 실행해야하는 경우에는 어떻게해야합니까? 예를 들어 테스트 사이트에 제한된 수의 소비자가 사용하도록 새 마이너 릴리스를 배포하고 나머지는 이전 버전을 유지하려고 할 수 있습니다. 테스트 사이트에 배포 된 서비스 사용자는 WSDL이 수정되지 않은 경우에도 (부 버전이기 때문에) 서비스의 끝점을 변경해야합니다. 이 특별한 경우에는 다양한 소비자의 이전을 원활하게 유도하기 위해 소비자와 공급자간에 간접적 인 계층을 갖는 것이 유용 할 수 있습니다.
그림 1. 소비자 바인딩 패턴.
참고 : 소비자 바인딩 패턴은 UDDI의 사용을 의미하지는 않습니다. 그것은 소비자 측에서 구속력있는 결정이 내려 졌다는 사실을 의미합니다. 우리는 잠깐이 패턴의 흥미로운 사용법을 논의 할 것입니다.
간접 패턴의 레이어.
새로운 마이너 버전의 웹 서비스가 출시되면 소비자는 새로운 버전으로 투명하게 마이그레이션 할 수 있습니다. 이 기능은 콘텐츠 기반 라우팅이나 사용자 기반 라우팅 (예 : 요청자의 IP 또는 보안 역할을 전파 할 때 요청자의 주체를 기반으로 함)을 호출하는 라우팅 메커니즘을 통해 간접적 인 계층에 의해 제공됩니다 다른 버전의 웹 서비스.
간접 지정 계층을 사용하면 소비자의 코드를 변경하지 않고 두 개의 마이너 릴리스가 공존 할 수 있으며 새 릴리스로의 원활한 마이그레이션을 보장 할 수 있습니다.
그림 2. 간접 패턴 계층.
그러나 주요 릴리스의 경우 소비자는 코드를 변경해야합니다. 그리고 일부 조직적인 이유로 현재 고객의 코드를 변경하지 않고 새로운 주요 릴리스로 이전해야하고 이전 클라이언트와 새 서비스를 호출해야하는 경우 어떻게해야합니까? 예를 들어 일부 규정 사유로 인해 조직의 외부 비즈니스 파트너가 제공하는 새로운 주요 서비스 릴리스를 사용해야 만 변경 사항을 적용 할 수있는 경우가 있습니다. 이로 인해 어댑터를 사용하여 모든 소비자의 코드가 수정 될 때까지 현재의 소비자에게 새로운 주요 릴리스를 사용할 수 있습니다.
어댑터 패턴.
어댑터 패턴은 새로운 주요 릴리스의 서비스를 사용할 수 있도록 클라이언트 요청 및 응답을 적용하는 것으로 구성됩니다. 이 패턴을 사용하면 일부 주요 비즈니스, 규제 또는 조직적 이유로 새로운 주요 버전의 서비스를 사용해야하는 경우보다 원활한 마이그레이션이 가능합니다.
그림 3. 어댑터 패턴.
패턴 적용을위한 솔루션.
서로 다른 패턴을 다른 방식으로 적용 할 수 있습니다. 이는 소비자의 코드에서 수행 할 수 있지만 코딩 지연을 유발하고 버전 관리를 처리하는 코드의 복잡성을 증가시킬 수 있기 때문에 드문 경우입니다. 대안은 공급자로부터 소비자를 분리하고 중재 계층에 이러한 패턴을 적용하기 위해 중재 계층을 사용하는 것입니다. Oracle Service Bus를 중재 계층으로 사용하면 어댑터 패턴과 관련된 간접 계층 패턴의 기능을 제공하여 소비자의 코드를 그러한 우려로부터 덜어줍니다. 그림 4를 참조하십시오.
그림 4. Oracle Service Bus를 사용하여 패턴 적용.
Oracle Service Bus 기반의이 접근법을 사용하면 다음과 같은 이점이 있습니다.
사소한 변경 사항은 소비자를 수정하지 않고 해결할 수 있으며 테스트 사이트는 컨텐츠 기반 또는 사용자 기반 라우팅을 통해 해결할 수 있습니다.
Oracle Service Bus의 조정은 주로 프록시를 사용하여 비즈니스 서비스에 액세스하도록 구성됩니다. 그 사이에는 스테이지, 액션, 브랜치, 라우팅 노드로 구성된 파이프 라인이 있습니다. 메시지는 라우팅 노드에서 요청을 라우팅하여 해당 파이프 라인에 적용됩니다. 프록시 및 비즈니스 서비스의 구성은 버전 번호를 참조하여 구성 할 수 있습니다. Oracle Service Bus의 프록시는 경로에 주요 릴리스에 대한 참조를 포함 할 수 있으며 비즈니스 서비스에는 주 릴리스 및 부 릴리스가 포함될 수 있습니다. 예를 들어, 주요 v1.XX의 경우 하나의 프록시, 하나 이상의 비즈니스 서비스 (마이너 릴리스 당 하나) 및 하나의 WSDL이 있습니다.
. 주요 V2.XX의 경우 :
주 : 프록시와 WSDL은 부 릴리스의 경우와 동일하기 때문에이 버전을 포함하는 경로에는 부 버전에 대한 참조가 포함될 필요가 없습니다.
우리는 Oracle Service Bus를 통해 다른 서비스에 대한 액세스를 처리했습니다. 그러나 동일한 개발 환경에서 서비스 제공 업체의 두 가지 버전을 배포하는 것과 같이 처리해야 할 다른 문제가 있습니다. 이러한 서비스는 동일한 개발 도구를 사용하여 개발 되었기 때문에 동일한 Java Platform, Enterprise Edition (Java EE) 웹 모듈 컨텍스트 경로를 가질 수 있습니다. 따라서 Java EE 웹 모듈의 컨텍스트에서 버전 참조를 추가하는 빌드 스크립트를 제공하지 않으면 동일한 서비스의 서로 다른 버전을 다른 대상에 배치하는 것을 고려할 수 있습니다. (대상은 클러스터 또는 관리 대상 서버입니다.) 그림 5를 참조하십시오.
그림 5. 다른 대상에 서비스 공급자 배치.
참고 : Oracle JDeveloper를 포함한 일부 프레임 워크 및 개발 도구는 일부 서비스 공급자의 버전을 자동화합니다. 이 기능은 Oracle JDeveloper 11 Technical Preview 4에서 Service Component Architecture (SCA) 복합체 (하나의 복합체에서 여러 서비스)의 버전 관리를 다루기 위해 확장되었습니다.
프레젠테이션 서비스와 오케스트레이션 서비스 (비즈니스 프로세스 서비스)는 비즈니스 서비스 계층 또는 데이터 액세스 서비스 계층에 속한 다른 서비스를 사용할 때이 접근법의 투명성을 활용할 수 있습니다. 그러나 프레젠테이션 서비스의 소비자는 어떻습니까? 복합 포털은 WSRP (Web Services for Remote Portlets)를 사용하여 원격 포틀릿을 사용하는 프레젠테이션 서비스를 사용할 수 있습니다. Oracle Service Bus를 사용하는 어댑터 패턴과 결합 된 간접 계층 패턴도이 경우에 적용 할 수 있지만 포털 기능을 기반으로보다 적응 된 접근 방식을 사용할 수 있습니다. 포털에는 일반적으로 포틀릿에 대한 액세스 구성 (재사용 가능한 프레젠테이션 서비스)을위한 관리 도구가 함께 제공됩니다. 사용자 속성에 따라 복합 포털의 일부분을 표시하기 위해 사용자의 역할 기반 규칙 및 인 타이틀먼트를 사용하면 프레젠테이션 서비스에 더 적합 할 수 있습니다. 이것은 Oracle Service Bus보다 복합 포털 엔진에 대한 관심이 더 큽니다.
따라서 소비자 바인딩 (Binding) 패턴을 사용하여 프리젠 테이션 서비스 계층 버전 관리를보다 잘 조정할 수 있습니다. 이 컨텍스트에서 UDDI 레지스트리를 사용하여 서비스를 선택하면 패턴이 적용되지 않습니다. 이 경우이 패턴을 적용하는 것은 복합 포털에서 제공하는 인 타이틀먼트 또는 개인 설정 엔진에 의존합니다. 이 패턴을 사용하는 중요한 측면 중 하나는 포털 관리 도구에서 구성을 통해 버전을 선택한다는 것입니다. 따라서 코드 수정이나 유지 관리를 의미하지는 않습니다.
아래 그림은 복합 포털이 동일한 응용 프로그램의 서로 다른 버전에서 WSRP를 통해 포틀릿을 소비하는 방법을 보여줍니다. 노출 될 포틀릿 버전 선택은 복합 포털 엔진에서 수행됩니다.
그림 6. 프리젠 테이션 서비스에 적용된 소비자 바인딩 패턴
이렇게하면 동일한 응용 프로그램의 두 버전을 동시에 실행할 수 있으므로 사용자 프로필 속성을 기반으로 선택한 최종 사용자에게만 새로운 기능이 제공됩니다.
결론.
웹 서비스 버전 관리는 비즈니스 제약 조건과 서비스가 속한 계층에 따라 다양한 방식으로 처리 될 수 있습니다. 이 기사에서는 다양한 버전 관리 작업에 적용 할 수있는 방법을 다뤘습니다.
동시에 여러 버전의 서비스 공급자 액세스 및 배포.
XML 스키마 버전 관리 및 서비스와 해당 서비스에서 사용되는 XML 스키마 간의 종속성 관리와 같은 몇 가지 추가 요소를 고려해야합니다. 조직 수준에서는 종속성을 관리하고 적절하고 전체적으로 변경 사항을 관리하기위한 적절한 도구가 없으면이 작업을 처리하기가 매우 어려워집니다.
Gabriel Bechara는 2003 년부터 Oracle-BEA 사전 판매 및 컨설팅 서비스를 담당해 왔습니다. 소프트웨어 업계의 15 년 경력을 지닌 Gabriel은 대형 프로젝트에 대한 건축가이자 조언자로서 실제 경험과 피드백을 제공하여 새로운 정보 시스템 구축. 그의 관심사는 비즈니스 통합 및 SOA에 중점을두고 소프트웨어 및 엔터프라이즈 아키텍처를 정의하는 방법론을 포함합니다.
Comments
Post a Comment