오늘날과 같이 다양한 거래 파트너와 함께 XML 및 연관된 대규모 XSD 스키마를 이용하여 복잡한 정보를 교환하는 환경에서는 모든 수신 트랜잭션을 정확하게 처리하도록 지원하고 이를 유지 관리하는 것이 중요한 과제가 된다. 현재, XML 스키마와 DTD는 XML 문서의 구조적 내용을 확인하거나 검증하는 기능을 제공한다. XML 스키마의 일부로서 유효성 검증 규칙을 수용할 수도 있지만, XML 스키마나 DTD를 사용하여 모든 종류의 트랜잭션 유효성 검증을 수행할 수 있는 것은 아니다.
STAR(Standards for Technology in Automotive Retail)와 같은 산업별 표준이 등장하면서, 표준 XML 메시지 교환 형식 전체가 XML 스키마 형태로 제공된다. 웹 서비스의 소비자와 공급자는 모두 해당 산업 표준 기구에서 인증하는 이런 스키마를 준수해야 한다. 하지만, 이런 산업별 스키마는 최소한의 유효성 검증과 느슨하게 바인드되어 있으므로 수신 XML의 구조적 유효성 검증에만 사용할 수 있다. 스키마 검사 횟수를 증가시키는 필수 유효성 검증을 구현하려면 추가적인 코드가 요구된다. 이런 유효성 검증을 통해 데이터가 특정한 구조로 되어 있을 것으로 예상하고 비즈니스 컨텐츠 유효성 검증 규칙을 준수하는 애플리케이션이나 컴포넌트에서 데이터를 수신할 때 오류를 예방한다.
웹 서비스와 이에 연관된 XML 애플리케이션에서 필요한 유효성 검증 논리를 구현하는 가장 일반적인 방법은 사용자 정의 코드를 작성하는 것이다. 결과적으로, 유효성 검증 규칙은 애플리케이션 내부에 포함되어 이를 손쉽게 조정, 문서화 또는 공유할 수 없다. 필요한 유효성 검증의 횟수와 특성에 따라, 파트너가 더 추가될수록 유효성 검증 코드가 복잡하고 길어질 수 있고 이런 코드의 유지 관리가 상당한 부담이 될 수 있다. 유효성 검증 논리가 변경될 때마다 그 코드를 다시 컴파일하여 프로덕션 서버에 다시 배포하는 데 따른 시간, 노력 및 위험도 늘어난다.
독립형 애플리케이션 외에, ESB(Enterprise Service Bus)를 통해 서비스를 노출할 때도 유효성 검증이 필수적이다. 그림 1은 메시징 버스를 중심으로 하여 ESB의 일반적인 아키텍처를 나타낸 것이다. 버스는 SOAP, HTTP 및 JMS(Java Messaging Service)와 같은 표준을 바탕으로 메시지 배달 서비스를 제공한다. ESB는 개별 트랜잭션의 서비스 품질 요구 사항을 바탕으로 하여 서로 상호 작용할 수 있는 서비스를 지원한다. ESB는 SOAP, XML, WSDL, JMS, J2EE, JAX-RPC 등의 다양한 표준도 지원한다.
그림 1. ESB 아키텍처에서 유효성 검증을 수행하는 방법
개발자들이 직면한 주요 과제 중 하나는 ESB를 통해 상호 작용하는 동안 메시지 공급자 및 메시지 소비자 엔드포인트에서 메시지 유효성 검증을 어떻게 수행할 것인가 하는 점이다. 예를 들어, 그림 1과 같이 웹 서비스 컴포넌트가 기존 애플리케이션에서 정보를 요구할 수 있다. 웹 서비스(소비자)는 ESB를 통해 기존 애플리케이션(공급자)으로 정보를 요청하는 메시지를 보낸다. 애플리케이션 컴포넌트에서는 올바른 정보를 가진 특정한 형식의 요청을 요구하므로, 요청을 처리하기 전에 요청 메시지의 유효성을 검증한다. 웹 서비스 컴포넌트에는 고유의 요구 사항이 있으며, 그에 따라 응답 메시지의 유효성을 검증한다. 두 엔드포인트에서 다른 프로토콜이나 표준을 사용하는 경우 ESB는 각각의 메시지를 변환할 수 있는데, 유효성 검증을 수행한 후 메시지를 변환한다.
각각의 공급자와 소비자는 고유의 요구 사항이 있으므로, 트랜잭션 유형 개수와 유효성 검증 횟수에 따라 모든 유효성 검증을 정의, 작성 및 테스트하느라 개발 주기가 길어질 수 있다. 각각의 유효성 검증 컴포넌트가 메시지 유효성 검증에 대한 올바른 피드백을 호출 컴포넌트에 제공할 수 있을 때까지 이런 안정화 단계가 진행된다.
여기서 설명하는 해결 방법은 OASIS CAM(Content Assembly Mechanism) 스펙을 바탕으로 XML 유효성 검증 서비스를 구현하는 것이다. OASIS CAM 템플리트 접근 방식은 기업에서 XML 형식으로 정보를 교환하기 위한 공통의 교환 모델을 만들 수 있게 해주는 XML 컨텐츠 처리 및 유효성 검증에 대한 간단한 접근 방식을 기반으로 한다. CAM 템플리트는 컨텍스트 기반 규칙, 코드 목록 및 크로스 필드 유효성 검증을 지원한다. XSD 스키마로만 수많은 크로스 필드 유효성 검증을 구현할 수는 없다. 다른 경우에는 게시된 산업 스키마에서 모든 유효성 검증 유형을 수용하는 것이 불가능하다.
CAM 템플리트를 정의하는 데 사용되는 CAM Studio(Eclipse 기반 UI 템플리트 편집기)가 솔루션에 포함된다. CAMV 유효성 검증 엔진은 런타임에서 컴파일된 특정 CAM 템플리트로 XML의 유효성을 검증하는 데 사용되는 오픈 소스 Java API 세트를 제공한다. CAM Studio 템플리트 편집기에서는 사용자 정의 XPath 표현식을 생성된 템플리트에 추가하는 기능을 지원하지만, UI를 사용하면 어떤 사용자 정의 표현식도 작성하지 않고 대부분의 규칙을 정의할 수 있다.
그림 2는 유효성 검증 규칙의 라이프사이클에서 모델, 작성 및 테스트, 배치 및 모니터 단계를 나타낸 것이다.
그림 2. 유효성 검증 규칙 라이프사이클
이 단계에서는 데이터 엔티티와 그 데이터 요소가 해당 유효성 검증 규칙으로 식별된다. 필수적인 XML 교환 스키마가 디자인되거나, 필수 요소가 STAR(Standards for Technology in Automotive Retail) 스키마와 같은 기존의 산업 표준 스키마로 매핑된다.
CAM 템플리트는 CAM Studio 편집기를 사용하여 어셈블 또는 작성된다. 다.음은 CAM 템플리트를 작성할 때 제공되는 세 가지 가능한 편집기 옵션이다.
- 처음부터 작성 또는 손으로 만들기
- 기존 XML 스키마 사용
- 기존 XML 인스턴스 사용
CAM 템플리트를 작성한 후, 다음 단계는 각각의 요소와 속성을 모두 검토하고 유효성 검증 규칙을 적절히 지정하는 것이다. 편집기의 패널에 각 템플리트 노드에 대한 규칙이 표시된다. 그림 3은 CAM 템플리트 편집기의 템플리트 구조를 나타내는 화면을 캡처한 것이다.
그림 3. CAM 템플리트 편집기의 CAM 템플리트
모든 유효성 검증 규칙이 2진 형식(즉, 통과 또는 실패)일 필요는 전혀 없지만, CAM에서는 유효성 검사 실패를 경고로 분류한다. 이런 기능은 서비스 공급자 쪽에서 교정 조치를 취할 수 있는 상황에 유용하게 쓰이는데, 페이로드를 수정하여 전체 메시지를 거부하지 않고 메시지를 사용할 수 있게 만들 수 있다. 예를 들어, 어떤 규칙에서는 특정 설명 필드의 길이를 255자 이내로 제한해야 할 수도 있지만, 길이가 최대값을 초과할 때 요청 메시지를 거부하면 안 되고 앞의 255자만 설명에서 사용될 것임을 소비자에게 알리는 경고를 보내야 한다.
이 기사의 팁 및 트릭 섹션에서 유효성 검증 메시지 분류를 경고로 설정하는 자세한 방법을 확인할 수 있다.
애플리케이션 런타임 CAMV 엔진에서 CAM 템플리트를 사용하기 전에 이 템플리트는 CAM Studio Editor를 사용하여 컴파일된다. 컴파일된 형식은 원본 CAM 템플리트 자체의 압축된 XML 버전으로서, CAMV 유효성 검증 엔진의 성능을 최적화하도록 디자인되었다. CAM 템플리트를 컴파일하려면 Tools > Compile Template 메뉴 옵션을 선택한다. 그러면 런타임에서 사용될 템플리트의 .cxx 파일 형식이 생성된다.
CAMV 유효성 검증 엔진에서는 어떤 Java 애플리케이션에서든 적절한 CAM 템플리트로 입력 XML의 유효성을 검증하는 데 사용할 수 있는 간단한 오픈 소스 Java API를 제공한다. Listing 1의 코드 스니펫은 CAMV의 사용법을 보여준다.
Listing 1. CAMV API의 사용법
TemplateValidator tv = new TemplateValidator(templateDocument);
tv.setErrHandler(new ElementErrorHandler(tv));
boolean tvResult = tv.validate(ioReader);
if (tvResult){
System.out.println("No errors, might be warnings.....");
}
List errList = tv.getErrors();
List warnList = tv.getWarnings();
|
오류 및 경고 메시지의 형식은 다음과 같다.
<오류 분류>: <XPATH> => <오류 또는 경고 메시지> => Node: <노드 이름> => attribute: <속성 이름>
예를 들어, 오류 메시지는 다음과 같은 형태이다.
/p:ProcessRepairOrder[1]/p:ApplicationArea[1]/p:CreationDateTime[1]=>내용이 마스크에 맞지 않음:YYYY-MM-DD'T'HH:MI:SSZ =>Node: CreationDateTime
경고 메시지는 다음과 같은 형태이다.
경고: /p:ProcessRepairOrder[1]/p:ProcessRepairOrderDataArea[1]/p:RepairOrder[1] /p:RepairOrderHeader[1]/p:OwnerParty[1]/p:SpecifiedPerson[1]/p:ResidenceAddress[1] /p:LineOne[1]=> 길이가 80 미만이어야 함 =>Node: LineOne
CAMV를 사용하면 모든 유효성 검증 확인을 구체화할 수 있고 이들을 코드 안에 임베드하거나 사용자 정의 코딩을 사용하여 구현할 필요가 없다. 모니터링 주기 동안, 유효성 검증 템플리트를 업데이트만 해도 추가적인 유효성 검증 요구를 충족시킬 수 있다. 더 많은 유효성 검증을 추가하거나 기존 유효성 검증을 제거하려면 컴파일된 CAM 템플리트(.cxx 파일)를 다시 배포한다. 유효성 검증 논리가 변경되는 경우 어떤 Java 코드도 다시 컴파일하고 다시 배치할 필요가 없다.
CAMV의 최신(2009년 12월) 릴리스에 추가된 주요 기능 중 몇 가지를 소개한다.
- 기본 Java 1.6 외에도 Java 1.5를 위해 이전 버전과 호환되는 릴리스 다운로드 버전을 만들었다.
- CAMV는 스레드로부터 안전하므로, WebSphere® Application Server 등의 모든 J2EE 컨테이너에 배치 가능하다.
- CAMV는 현재 JDOM 문서 외에도 XML 입력을 StringReader로 받아들이므로, 메시지 처리 중 발생 가능한 직렬화 및 직렬화 해제 인스턴스 수가 줄어든다.
- 이제는 단일 XML 요소나 속성에서 여러 가지 조건을 정의할 수 있다.
다음은 자동차 업계의 한 주요 조직을 위한 STAR 기반 웹 서비스를 노출하는 B2B 게이트웨이에 대한 유효성 검증 프레임워크를 만들기 위해 CAMV를 사용한 최근의 프로젝트에서 확인한 유용한 정보이다.
CAMV에서는 오류 메시지 외에도 경고 메시지를 제공하기 위해 유효성 검증 규칙 작성을 지원한다. 경고 메시지에 대한 유효성 검증을 지정하려면 XML 요소에 대해 조건부 XPath 표현식을 지정해야 한다.
예를 들어, 특정 필드의 길이가 지정된 한계인 255자를 초과하는 경우 웹 서비스 요청을 거부할 필요가 없는 비즈니스 시나리오를 고려한다. 백엔드 시스템의 요구에 따라 이 길이를 초과하는 경우 비즈니스 의사결정은 필드의 길이를 255자로 자르는 것이지만, 호출 컴포넌트에 경고 메시지를 전달해야 한다.
CAM 템플리트 규칙에서 printmessage() 표현식을 지정하면 그런 시나리오를 처리할 수 있다.
메시지 텍스트에는 접두부로 Warning:이 표시된 다음 length should be less than 255와 같이
필요한 경고 메시지가 표시되어야 한다. 전체 메시지 텍스트는 Warning: length should be less than 255로 나타난다.
특정 요소의 길이가 지정된 길이를 초과하는 경우에만 경고가 리턴되므로, 이 규칙은 조건부로 지정되고 그림 4에 표시된 CAM Studio Editor 표현식 입력 마법사 도구의 화면 캡처와 같이 길이 검사를 수행하기 위한 XPath 표현식이 작성된다.
그림 4. 경고 규칙 구성 방법
CAMV 템플리트를 메모리로 캐시하여 반복되는 유효성 검증을 수행하고, 수행되는 각각의 유효성 검증 모두에 대해 하드 디스크에서 템플리트를 읽지 않을 수 있다. 이렇게 하면 디스크 I/O가 줄어들고 성능과 처리량이 크게 개선된다.
CAMV Java 메소드 TemplateValidator.validate(..)는 경고가 리턴되더라도 true를 리턴한다. 이 메소드는
오류가 리턴될 때만 false로 설정된다.
따라서 경고만 리턴되는 경우에는 getWarnings() 메소드를 사용하여 모든 경고 메시지 목록을 얻는다.
리턴되는 메시지(XPath 경로, 유효성 검증 메시지 및 노드 이름이 들어 있음)가 비즈니스 시나리오에 충분치 않고 자세한 정보가 필요한 경우, 클라이언트 애플리케이션에서 사용자 정의 코드를 만들 수 있다. Listing 2에 나타낸 것처럼, CAMV에서는 CAMERROR 및 CAMWARN 속성을 입력 교환 메시지 XML에 추가한 후 동일한 입력 XML을 리턴한다.
Listing 2. 유효성 검증 수행 후 수정된 XML
<p:ApplicationArea> <p:Sender> <p:CreatorNameCode>CNV</p:CreatorNameCode> <p:SenderNameCode>SNC</p:SenderNameCode> </p:Sender> <p:CreationDateTime CAMERROR="CreationDateTime | Content does not conform to the mask:YYYY-MM-DD'T'HH:MI:SSZ">2001-12-31T12:00:00</p:CreationDateTime> <p:Destination/> </p:ApplicationArea> <p:ResidenceAddress> <p:LineOne CAMWARN="WARNING:LineOne | length should be less than 80">100 Moon Drive 100 Moon Drive 100 Moon Drive 100 Moon Drive 100 Moon Drive 100 Moon Drive</p:LineOne> <p:LineTwo>APT # 100</p:LineTwo> <p:CityName>MALIBU</p:CityName> <p:CountryID>US</p:CountryID> <p:Postcode>99999</p:Postcode> <p:StateOrProvinceCountrySub-DivisionID>CA</p:StateOrProvinceCountrySub-DivisionID> </p:ResidenceAddress> |
템플리트에 규칙을 입력할 때, (기본적으로) 위치에 상관없이 선택과 일치하는 현재 노드에서 문서에 있는 모든 노드를 선택하는 두 개의
슬래시(//)로 구성된 와일드카드 표현식을 사용하여 XPath 유효성 검증 표현식이 지정된다.
그림 5. 규칙을 정의하는 동안 와일드카드 표현식을 지정하는 방법
이를 통해 특정 요소의 모든 해당 인스턴스에 적용되는 규칙이 생성된다. (주: 이 규칙은 특정 요소의 다른 모든 인스턴스에서는 즉시 보이지 않게 될 수 있지만, CAM 템플리트 편집기 보기에서 템플리트를 새로 고친 후 볼 수 있게 됨).
하지만, XML 요소의 특정 인스턴스에 이런 검사를 적용할 필요가 있는 경우에는 Rule XPath 선택란에 Full을 선택하는 것이 좋다.
그림 6. 규칙을 정의하는 동안 명시적인 표현식을 지정하는 방법
CAMV를 사용하면 유효성 검증 확인을 일관되게 시행한 다음 빠르게 규칙을 변경하여 메시지 처리를 미세 조정함으로써 특정 파트너 교환 및 컨텐츠에 일치시킬 수 있다. 기존에는 백엔드 애플리케이션 코드 내부에 깊이 임베드되었던 유효성 검증 규칙을 구체화함으로써, 예측 가능성을 더욱 높인 메시지 처리로 제어 및 관리 능력이 훨씬 개선되었다. 이런 표준 기반 규칙 템플리트를 파트너와 선택적으로 공유함으로써 여러 시스템에 걸쳐 손쉽게 더 나은 컨텐츠 처리를 구현하고 적절히 조정할 수 있다.
적응 능력과 내결함성이 더욱 향상된 프로세스를 이용해, 애플리케이션이 더욱 다양한 컨텐츠를 처리할 수 있으므로, 지원 및 유지 관리 비용을 줄이면서도 파트너와 폭넓고 다양한 상호 작용을 손쉽게 수행하도록 지원할 수 있으며—이는 일반적인 경험과는 정반대의 경험이다.
오픈 소스를 사용함으로써 솔루션 개발과 CAMV 엔진을 개발 환경으로 통합하는 데 있어 협업이 크게 촉진되었다.
전체적으로, 이 프로젝트에서는 XML과 동적으로 구성 가능한 XML 규칙 템플리트를 혁신적인 방법으로 사용함으로써, 정적으로 컴파일된 코드 리소스에만 의존하는 것보다 더 낫고 더 안정적이고 더 빠르며 우수한 고객 애플리케이션 경험을 제공할 수 있다는 점을 입증했다.
| 설명 | 이름 | 크기 | 다운로드 방식 |
|---|---|---|---|
| Sample Java project that uses CAMV Java APIs | ValidationFrameworkSample.zip | 2032KB | HTTP |
교육
- JCAM Engine with XML Editor / Validator: SourceForge
웹 사이트에서 CAMV 프로젝트에 대한 정보를 확인할 수 있다.
- OASIS CAM Wiki: CAM 템플리트 및 CAM 프로세서 사용자와 개발자를 위한
다양한 자료와 정보를 제공하는 웹 사이트이다.
- 새로운 XML 유효성 확인 기술인 CAM에 대한 소개(Brian M.
Carey, developerWorks, 2009년 9월): CAM에 대한 소개와 개요를 살펴볼 수 있다.
- Taking XML Validation to the Next Level: Introducing CAM:
CAM을 잘 설명해주는 기사 시리즈인 "The Missing Manual"을 읽을 수 있다.
- developerWorks의 XML 영역: XML 영역에서 기술 향상에 도움이 되는 참고자료를 얻을 수 있다.
- IBM XML 인증: XML 및 관련 기술에 대한 IBM 인증 개발자가 되는 방법을 찾아볼 수 있다.
- XML 기술 자료: developerWorks XML 영역에서 다양한 기술 관련 기사와 팁, 튜토리얼, 표준 및 IBM Redbook을 볼 수 있다.
- developerWorks technical events and webcasts: 이들 세션에 참가하여 최신 기술에 대한 정보를 얻을 수 있다.
- Twitter의 developerWorks 페이지: 오늘 가입하여 developerWorks 트윗을 팔로우하자.
- developerWorks
podcasts: 소프트웨어 개발자의 흥미로운 인터뷰와 토론을 확인할 수 있다.
제품 및 기술 얻기
- OASIS CAM specification standard:
CAM 스펙을 다운로드하고 검토할 수 있는 웹 사이트이다.
- IBM 제품 평가판을
다운로드하거나 IBM SOA Sandbox의 온라인 시험판을 살펴보고
DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®의 애플리케이션 개발 도구 및
미들웨어 제품을 사용해 볼 수 있다.
토론
- XML 영역 토론 포럼: 여러 XML 관련 토론에 참여해 볼 수 있다.
- developerWorks 포럼 & 블로그를 통해 developerWorks 커뮤니티에 참여하자.
Puneet Kathuria is an Integration Architect working with IBM India Ltd. He has more than 13 years of experience, mainly in the application and integration architectures, and has been with IBM for the past four years.
David is currently consulting on NIEM IEPD development for the US government and is based in Washington DC, USA. David is Chair of the OASIS CAM technical committee and co-developer of the CAM Studio Eclipse editor responsible for the majority of the XSLT processing scripts. David has over 30 years experience in the industry and in 2007 was recognized as a Senior Member of the ACM for his industry work in XML. David has authored many articles on the topic of XML and information exchange optimization, standards specifications for OASIS, and presented widely on XML in North America, Europe, and Asia.
Martin is a consultant based in Suffolk, England specializing in XML, Ontologies, Java, Eclipse and Web solutions with over 20 years experience. Martin authored both the original OASIS CAM specifications and the CAM Studio Eclipse editor and CAMV validation engine implementations. Martin was also previously active in the telecommunications industry work on XML-based message exchanges and standards work in Europe. He has presented at a number of industry events including OASIS sponsored technology expositions in Europe particularly.