클라우드 환경에서의 XML 활용
Altova 도구와 아마존 관계형 데이터베이스 서비스(Amazon RDS)를 함께 사용하는 방법
점점 더 많은 기업들이 클라우드 환경에서 데이터베이스 애플리케이션을 구축하는 것의 장점을 발견하고 있습니다
- 높은 가용성과 안정성
- 자동 확장 기능
- 하드웨어 구매 비용 및 유지 보수 부담에서 자유로움
이번 블로그 게시물에서는 Altova DatabaseSpy를 사용하여 Amazon Relational Database Service (Amazon RDS)에 연결하고 간단한 데이터베이스를 구축하는 방법을 보여드리겠습니다. Altova MissionKit 제품군 내에서 데이터베이스 연결 마법사는 일관성을 유지하므로, XMLSpy, MapForce, 또는 StyleVision을 사용하여 동일한 방식으로 연결할 수 있습니다.
아래에 설명된 단계를 직접 따라 하고 싶으시다면, 아마존 웹 서비스(AWS) 계정을 다음 주소에서 등록해야 합니다: http://aws.amazon.com/rds/ 또한, Altova MissionKit 또는 Altova의 개별 애플리케이션의 완전 기능이 포함된 무료 체험 버전을 다음 주소에서 다운로드할 수 있습니다: https://www.altova.com/download-trial/
지역 내 프로토타입 제작
Amazon RDS는 MySQL을 기반으로 하므로, 먼저 MySQL 커뮤니티 에디션을 사용하여 로컬 환경에 작은 데이터베이스를 구축한 다음, Amazon RDS로 마이그레이션하고 클라우드 환경에서 데이터베이스를 테스트할 것입니다. MySQL은 데이터베이스 컬럼의 데이터 유형으로 XML을 직접 지원하지 않지만, MySQL 5.1 및 6.0 버전에서는 텍스트 형식으로 저장된 XML 데이터에 대한 일부 기능을 제공합니다. 이번 실습에서는 다음의 MySQL 참조 자료에 있는 XML 예제들을 일부 수정하고 확장하여 사용하겠습니다. http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html 먼저, DatabaseSpy를 실행하고 로컬 MySQL Community Edition에 연결했습니다. 저희는 "LocalPrototype"이라는 새로운 데이터 소스를 만들었고, "XMLtest"라는 이름의 새로운 데이터베이스 스키마를 생성했습니다. 다음은 DatabaseSpy 온라인 브라우저 및 속성 창의 모습입니다
![]()
다음으로, "books"와 "cities"라는 두 개의 테이블을 생성하고, MySQL 설명서에 나와 있는 예시를 참고하여 데이터를 입력했습니다. 저희가 만든 테이블의 DatabaseSpy 디자인 화면은 다음과 같습니다
![]()
저희는 특정 쿼리를 실행하고, 테이블의 내용을 여러 개의 결과 창에 중첩하여 표시할 수 있습니다
![]()
참고로, "books" 테이블의 "doc" 컬럼은 XML 데이터를 포함하고 있지만, 데이터 타입은 varchar(150)으로 정의되어 있습니다. MySQL은 텍스트 필드 내의 XML 데이터를 처리하기 위한 두 가지 함수, 즉 ExtractValue()와 UpdateXML()을 지원하며, 이 함수들은 XPath 표현식을 사용하여 개별 요소에 대한 작업을 수행할 수 있습니다. 아래는 "books" 테이블의 모든 행에서 저자의 이니셜만 반환하는 간단한 ExtractValue() 쿼리입니다
![]()
UpdateXML() 함수는 SQL 표현식을 사용하여 개별 XML 요소의 내용을 수정하는 데 사용될 수 있습니다. 아래 스크린샷에서, 1행의 쿼리는 "books" 테이블의 모든 행을 업데이트하고, 2행의 쿼리는 업데이트된 새로운 값을 반환합니다
![]()
다음과 같이 Concat() 함수를 사용하여 XML 데이터가 아닌 데이터, 예를 들어 "도시" 테이블과 같은 데이터에 XML 요소를 추가할 수도 있습니다
![]()
지금까지 저희의 XML 쿼리는 각 테이블의 모든 행에 대해 수행되었습니다. 단일 행에 대한 쿼리를 더 쉽게 만들기 위해, 각 테이블에 고유한 행 인덱스를 저장하는 열을 추가하는 것이 유용합니다. 저희의 "books" 테이블을 복사하고, "id"라는 이름의 열을 추가하여 행 인덱스를 저장할 수 있습니다. "id" 열은 또한 다른 테이블의 행에서 해당 테이블의 특정 XML 문서를 참조하는 데 편리한 외부 키 역할을 할 수 있습니다.
예를 들어, 한 테이블에는 채용 후보자들의 이름을 저장하고, 다른 테이블에는 각 후보자의 XML 형식 이력서를 저장하며, 첫 번째 테이블의 각 항목은 두 번째 테이블의 해당 이력서를 참조하는 외래 키를 가질 수 있습니다 SQL 편집기 DatabaseSpy에서 기존의 "books" 테이블에 대한 CREATE 문을 생성하고, 이를 직접 편집할 수 있습니다. 또는 DatabaseSpy의 다른 기능을 활용할 수도 있습니다 디자인 편집자 표를 시각적으로 구성합니다. (자세한 내용은 다음을 참조하십시오.) DatabaseSpy ...의 일부 Altova (웹사이트)
저희는 나중에 Amazon RDS 환경에서도 동일한 쿼리를 실행할 예정이므로, books2 테이블에 대한 SQL CREATE 문과 SQL INSERT 문을 하나의 스크립트로 통합했습니다. 아래 스크린샷은 books2 테이블에 대한 스크립트의 일부를 보여줍니다
![]()
다음과 같이 "books2" 테이블에 대해 쿼리를 실행하여 각 행에 해당하는 고유한 ID 값을 확인할 수 있습니다
![]()
이제 우리는 UpdateXML() 및 ExtractValue() 쿼리를 개선하여 개별 행에 대한 작업을 수행하도록 만들 수 있습니다
![]()
이러한 예시들을 활용하여 클라우드 환경으로 옮기고, 아마존 RDS에서 테스트를 진행할 수 있는 좋은 기반을 마련할 수 있습니다.
Amazon RDS 클라우드에 DatabaseSpy를 연결합니다
Amazon RDS에서 데이터베이스 인스턴스를 생성하기 위해 AWS 관리 콘솔의 안내를 따르신 후, "Connection Wizard"를 사용하면 DatabaseSpy를 쉽게 시작할 수 있습니다. 아래와 같이 "MySQL" 옵션을 선택하십시오
![]()
처음 연결할 때는 새로운 DSN(데이터 원본 이름)을 생성해야 합니다. 이후에는 "기존 데이터 원본 이름 사용" 옵션을 선택하여 목록에서 원하는 DSN을 선택할 수 있습니다. 또한, XMLSpy, MapForce 또는 StyleVision으로 다시 연결할 때에도 원래 사용하던 DSN을 그대로 사용할 수 있습니다.
![]()
연결 대화 상자에서 다음 정보를 입력하세요:
- 데이터 소스 이름: 이 이름은 DatabaseSpy 프로젝트 창과 기존 데이터 소스 목록에 표시되며, 다시 연결할 때도 목록에 나타납니다.
- 설명: 참고용 정보입니다.
- 서버: 이는 Amazon RDS 계정 대시보드에 표시된 엔드포인트 이름입니다.
- 포트: 3306 – IT 부서에서 방화벽을 통해 이 포트를 차단하고 있는지 확인하십시오!
- 사용자 이름 / 비밀번호: 이는 Amazon RDS에서 설정한 사용자 계정입니다.
- 데이터베이스: RDS 인스턴스를 시작할 때 설정한 기본 데이터베이스 이름입니다.
![]()
저희는 로컬 프로토타입을 위해 구축했던 DatabaseSpy 프로젝트와 동일한 프로젝트에서 Amazon RDS 클라우드 데이터베이스에 연결했습니다. 아래는 프로젝트 창의 스크린샷으로, 데이터 소스 이름과 프로젝트에 추가한 SQL 파일들이 표시되어 있습니다
![]()
테이블을 생성하고 쿼리를 실행하기 전에, 각 시스템의 버전을 확인하는 것이 유용할 것입니다. 아래 스크린샷은 각 시스템의 버전 정보를 요청하는 쿼리를 보여줍니다. 참고로, 각 쿼리 바로 위에 있는 회색 막대는 해당 SQKL 문장이 어떤 데이터 연결에 할당되어 있는지 나타냅니다.
![]()
![]()
Amazon RDS에서 보고한 바에 따르면, 해당 시스템은 MySQL 커뮤니티 서버 버전 5.1을 사용하고 있는데, 이는 저희가 개발한 프로토타입과 동일합니다. 이는 매우 긍정적인 신호입니다!
로컬 프로젝트를 클라우드로 이전합니다
우리는 각 테이블 생성 스크립트를 열고, 속성 창에서 실행 대상을 재설정하여 클라우드 데이터베이스에서 해당 스크립트를 실행할 수 있습니다
![]()
SQL 편집기 창 상단 근처에 있는 회색 "실행 대상" 표시줄은 쿼리의 대상이 클라우드 기반 Amazon RDS 데이터베이스임을 나타냅니다
![]()
비슷하게 "books"와 "books2" 테이블을 생성한 후, 클라우드 데이터베이스에서 각 SQL 쿼리를 실행할 수 있습니다. 모든 행에 대해 ExtractValue() 함수를 사용하는 예시는 다음과 같습니다
![]()
테이블 내의 XML 형식이 아닌 데이터를 사용하여 XML 형식의 결과물을 생성하는 Concat() 쿼리:
![]()
테이블의 단일 행에 대한 UpdateXML() 함수의 예시입니다.
![]()
단일 행에서 값을 추출하는 방법:
![]()
결론
저희가 수행한 모든 테스트에서, Amazon RDS는 로컬 MySQL 커뮤니티 에디션과 완전히 동일하게 작동했습니다. 이러한 특성은 개발자들이 클라우드 리소스 비용을 지불하지 않고도 새로운 클라우드 데이터베이스 애플리케이션을 개발하고 테스트하거나, 기존 애플리케이션을 개선하는 데 훨씬 효율적입니다.
저희는 클라우드 데이터베이스에 저장된 XML 데이터를 처리하는 MySQL의 XML 함수들이 제대로 작동하는지 확인했습니다. 저희의 XML 데이터는 제한적이었는데, "books" 테이블의 텍스트 컬럼은 150자 이내로 제한되어 있었습니다. 하지만 MySQL을 사용하면 훨씬 더 큰 XML 문서를 하나의 컬럼에 저장할 수 있습니다. 각 테이블은 최대 65,535 바이트의 행 크기를 가집니다. 테이블에 인덱스 컬럼을 사용하더라도, 하나의 XML 항목을 저장하기 위한 varchar 컬럼은 64KB를 초과할 수 있습니다. 더 큰 XML 문서를 저장해야 하는 경우, MySQL은 BLOB과 유사한 MediumText 및 LongText 데이터 유형을 제공합니다. MediumText는 1,600만 개 이상의 단일 바이트 문자를 저장할 수 있으며, LongText는 최대 4GB의 데이터를 저장할 수 있습니다. 이 블로그 게시물에서는 보여드리지 않았지만, 저희는 MediumText 및 LongText 데이터 유형을 사용하여 ExtractValue() 및 UpdateXML() 함수를 성공적으로 테스트했습니다.
대용량 XML 데이터 파일을 저장해야 할 때, 개별 요소를 식별하기 위한 XPath 표현식을 작성하는 것은 개발 과정에서 어려움을 초래할 수 있습니다. XMLSpy에 포함된 XPath 분석기는 이러한 어려움을 해결하는 데 매우 유용한 도구입니다 XPath 1.0 및 2.0 표현식의 테스트 및 디버깅. XMLSpy에서 XPath 표현식을 입력하면, XMLSpy는 해당 표현식을 실시간으로 평가하고 그 결과를 노드 집합 형태로 반환합니다. 이를 통해 XPath 관련 문제를 이해하고 해결하는 데 소요되는 시간을 크게 절약할 수 있습니다.
향후 블로그 게시물에서는 XMLSpy, MapForce, DiffDog, DatabaseSpy가 아마존 RDS를 사용하는 클라우드 애플리케이션 개발 속도를 높이는 데 어떻게 도움이 되는지 더 자세히 알아보겠습니다. 곧 다시 찾아뵙기를 기대합니다! Altova 도구들이 아마존 RDS와 얼마나 잘 연동되는지 직접 확인해 보고 싶으시다면, 무료 평가판을 다운로드하여 Altova MissionKit을 사용해 보세요.