---
title: "혹시 Apache Ant를 위한 스키마가 필요했던 적이 있으신가요?"
date: "2012-09-05"
tags: 
  - "ant-schema"
  - "ant-xsd"
  - "apache-ant"
  - "xmlspy"
description: XMLSpy를 사용하여 Apache Ant 프로젝트에 맞는 사용자 정의 XML 스키마를 만드는 방법을 알아보세요. 이를 통해 Ant 파일에 대한 검증 및 편집 기능을 향상시킬 수 있습니다.
---
Status: #blog

Tags:  #ant-schema #ant-xsd #apache-ant #xmlspy

Categories: [Altova](/blog/ko/category/altova.md) 
# 혹시 Apache Ant를 위한 스키마가 필요했던 적이 있으신가요?

최근에 제가 진행 중인 소프트웨어 프로젝트의 Ant 파일에서 몇 가지 문제가 발생했습니다. 저는 [XMLSpy](https://www.altova.com/ko/xmlspy.html)에서 해당 파일을 편집하고 있었는데, 스크립트에 스키마가 할당되어 있지 않아서 코드 완성 기능이나 도움말을 제대로 받지 못했습니다.

그 문제는 단순해 보였기 때문에, 저는 스키마를 찾아 나섰습니다.

저는 곧 Stack Overflow에서 비슷한 질문을 찾았습니다. 그 답변은 다음과 같았습니다. Ant에는 공식적인 스키마나 DTD가 존재하지 않습니다. 그 이유는 간단합니다. Ant의 핵심 기능을 유연하고 포괄적으로 모델링하는 것 자체가 어려운 일인데, 여기에 더해 모든 외부 작업을 포함하는 것은 더욱 복잡해질 것입니다.

저는 바로 이전에 몇 년 전에 이곳에 왔던 기억이 났습니다. 하지만 이번에는 XMLSpy의 스키마 생성 기능을 활용하여 이 문제를 해결해 보려고 생각했습니다

<table class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;" cellspacing="0" cellpadding="0"><tbody><tr><td style="text-align: center;"><a style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;" href="http://lh6.ggpht.com/-0YuLu2iBKTk/UEEWxHUUk5I/AAAAAAAAAU0/Xz5UgEpor1U/s1600-h/clip_image002%25255B3%25255D.jpg"><img style="border: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="clip_image002" src="https://lh5.ggpht.com/-7-tEVMHFTzo/UEEWxala_SI/AAAAAAAAAU8/xonqJUBJBZo/clip_image002_thumb.jpg?imgmax=800" alt="XMLSpy XML editor" width="202" height="177" border="0"></a></td></tr><tr><td class="tr-caption" style="text-align: center;"></td></tr></tbody></table>

<!--more-->

공식적인 스키마를 만들 계획이 없다면, XMLSpy를 사용하여 특정 작업 및 기능에 맞춰 스키마를 빠르게 생성할 수 있습니다. 더 많은 기능을 사용할수록, XSD에 추가하는 작업은 매우 간단하며, 뛰어난 편집 지원과 유효성 검사 기능을 얻을 수 있습니다.

XMLSpy는 여러 XML 파일을 기반으로 스키마를 생성할 수 있습니다. 작동 방식은 다음과 같습니다. 먼저 "프로젝트" 메뉴에서 "새 프로젝트"를 선택하여 프로젝트를 생성합니다. 프로젝트 창이 열려 있지 않다면 "창" 메뉴를 사용하여 열어주세요. 그런 다음, 해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 "파일 추가"를 선택하여 Ant 파일을 폴더에 추가합니다.

[![XMLSpy 프로젝트](https://lh5.ggpht.com/-mre2_DXTlp4/UEEWyHDjglI/AAAAAAAAAVM/O_eIwwrQBhY/clip_image004_thumb.jpg?imgmax=800 "XMLSpy Project")](http://lh3.ggpht.com/-RuUoEQXnGbY/UEEWx5722GI/AAAAAAAAAVE/hJh7kKSxiSU/s1600-h/clip_image004%25255B3%25255D.jpg)

파일을 추가한 후, 폴더를 다시 마우스 오른쪽 버튼으로 클릭하고 "DTD/스키마 생성"을 선택합니다.

[![Ant 파일 기반으로 스키마 생성하기](https://lh6.ggpht.com/-ozQ64GJ-nWk/UEEWy4Qxf5I/AAAAAAAAAVc/engfRgPVVMs/clip_image006_thumb.jpg?imgmax=800 "Generating a Schema based on Ant files")](http://lh3.ggpht.com/-eu93uiRCaZI/UEEWyVmYsKI/AAAAAAAAAVU/v9-LmOs5zlc/s1600-h/clip_image006%25255B3%25255D.jpg)

저희 프로젝트에는 수십 개의 Ant 스크립트가 있기 때문에, 저희가 수행하는 개발 작업에서 Ant가 사용되는 다양한 방식을 비교적 포괄적으로 파악하고 있습니다. 즉, XMLSpy는 저희가 Ant를 사용하는 모든 다양한 방법을 확인하고, 지금까지 저희가 Ant를 통해 수행한 모든 작업 내용을 담은 스키마를 생성할 것입니다.

[![앤트(Ant) 관련 파일들](https://lh3.ggpht.com/-UUx0gazWKws/UEEWzeDg4TI/AAAAAAAAAVs/Pxaz6KoFviY/clip_image008_thumb.jpg?imgmax=800 "Ant files ")](http://lh4.ggpht.com/-ymrJbZ-C7FU/UEEWzLlutwI/AAAAAAAAAVk/ZnZLs6ZeTDA/s1600-h/clip_image008%25255B3%25255D.jpg)

스키마를 생성하는 것은 매우 간단했습니다. 하지만 XMLSpy가 모델 생성에 얼마나 뛰어난 도구이든, 60개의 Ant 파일을 입력하면 복잡한 스키마가 생성될 수밖에 없습니다. 이 스크린샷에서 "스키마 생성" 대화 상자에 제가 선택한 옵션들을 확인할 수 있습니다. 저에게 가장 중요한 옵션은 전역 유형을 포함하고, 스키마 확장을 단순화하기 위해 몇 가지 열거형을 사용하는 것이었습니다.

[![XSD 대화 상자 생성](https://lh6.ggpht.com/-d6dHbL60V1M/UEEW0Pl0bdI/AAAAAAAAAV8/Jo1vECdU4FQ/clip_image010_thumb.jpg?imgmax=800 "Generate XSD dialog")](http://lh4.ggpht.com/-QccmDlCiiac/UEEWzwq_xuI/AAAAAAAAAV0/iXWZfw_JQLI/s1600-h/clip_image010%25255B3%25255D.jpg)

새로운 XSD 파일을 개선하기 전에, 이 작업을 통해 무엇을 얻고 싶은지 결정해야 했습니다.

Ant는 매우 유연하며, 속성 값으로 다양한 형태를 허용하고, 많은 외부 작업들이 네임스페이스를 사용하지 않습니다. 저는 완벽한 스키마를 원한 것이 아니라, 이 프로젝트에 도움이 될 만한 스키마를 원했습니다. 제 목표는 XMLSpy가 Ant 파일을 편집할 때 유용한 기능을 제공하여 작업 속도를 높일 수 있도록, 매우 유연한 스키마를 만드는 것이었습니다.

장기적으로는 좀 더 엄격하게 규칙을 적용하여 일관성 있고 정확한 Ant 파일을 작성하는 데 도움이 될 수 있겠지만, 그것은 앞으로의 일입니다. 우선 저는 매우 간단한 프로토타입을 만들고 싶었습니다.

이 점을 염두에 두고, 저는 생성된 스키마를 간결하게 다듬기 시작했습니다. XMLSpy는 모든 경우를 완벽하게 포괄하는 XSD 파일을 생성합니다. 기술적으로 정확한 스키마를 제공했지만, 제가 원하거나 필요로 하는 것보다 약간 더 상세한 스키마였습니다. 하지만 XSD 뷰에서 몇 가지 요소를 드래그하여 재배치하고 불필요한 부분을 제거하는 데 몇 분 정도만 걸렸습니다. 그 결과, 매우 간단하고 명확한 모델을 만들 수 있었습니다.

[![개미 관련 스키마](https://lh4.ggpht.com/-w_6eLKDf0uY/UEEW0x2LEiI/AAAAAAAAAWM/IQ9kJ0I87kQ/clip_image012_thumb.jpg?imgmax=800 "Ant schema")](http://lh5.ggpht.com/-QtfDL83gfzY/UEEW0iCNveI/AAAAAAAAAWE/rMjq6ILsGgc/s1600-h/clip_image012%25255B3%25255D.jpg)
 
처음으로 확인해야 할 부분은 제가 만든 단순화된 XSD 파일과 비교하여 약 60개의 Ant 파일을 모두 검증할 수 있을 때였습니다. 정리 과정에서 의도치 않게 몇 가지 요소를 삭제했었는데, 이를 다시 추가한 후에는 문제없이 진행할 수 있었습니다. 프로젝트 폴더에서 마우스 오른쪽 버튼을 클릭하고 "모두 검증"을 선택했습니다. 모든 파일이 빠르게, 단 5초 만에 검증되었습니다.

[![생성된 스키마에 대한 Ant 유효성 검사](https://lh6.ggpht.com/-s3ozsT7aSuk/UEEW1oNCvjI/AAAAAAAAAWc/yHwfkOFnMaM/clip_image014_thumb.jpg?imgmax=800 "Validating Ant against generated schema")](http://lh5.ggpht.com/-ocdYbJiia6g/UEEW1GaH5DI/AAAAAAAAAWU/EMxziDPR_Zw/s1600-h/clip_image014%25255B3%25255D.jpg)
 

두 번째로 인상 깊었던 점은 XMLSpy를 사용하여 새로운 Ant 파일을 만들 때, 상황에 맞는 도움말을 제공받을 수 있었다는 것입니다. 새로운 작업과 기능을 사용할수록 시간이 지남에 따라 추가해야 할 새로운 요소들이 많을 것이라는 것을 빠르게 깨달았습니다. 예를 들어, 이전에 사용하지 않았던 `sysproperty` 요소를 `junit`에 추가해야 한다는 것을 알게 되었습니다.

하지만 스키마 뷰에서는 여기저기에 요소나 속성을 추가하는 것이 간단하며, 시간이 지날수록 이러한 작업은 점점 더 줄어들 것입니다.

[![스키마 뷰에 요소 추가하기](https://lh6.ggpht.com/-9vVSTwycnI8/UEEW2Dn0Y5I/AAAAAAAAAWs/zcDGrzUJv2g/clip_image016_thumb.jpg?imgmax=800 "Adding elements in schema view")](http://lh4.ggpht.com/-DBr4vr075Iw/UEEW1yNzjOI/AAAAAAAAAWk/fTHD2c8VKC0/s1600-h/clip_image016%25255B3%25255D.jpg)


전반적으로, 저의 간단한 목적을 위해 Ant 스키마를 만드는 것은 작은 성공이라고 생각합니다.

[![IntelliSense 기능을 갖춘 Ant 편집기](https://lh6.ggpht.com/-j64qoAj-y1s/UEEW2zqdjJI/AAAAAAAAAW8/q1Mm5Ip6uoU/clip_image018_thumb.jpg?imgmax=800 "Editing Ant with intellisense")](http://lh4.ggpht.com/-3Ol_tgqt7q0/UEEW2buRmOI/AAAAAAAAAW0/x1oJ5PFJ6Xs/s1600-h/clip_image018%25255B3%25255D.jpg)


만약 제가 제공하는 매우 기본적인 틀을 참고하여 자신만의 틀을 만들고 싶으시다면, 아래에서 다운로드하여 사용하실 수 있습니다. [여기에서 다운로드하세요](http://metateam.net/extras/ant-schema.xsd) 그리고 사용해 보시고, 어떻게 활용하는지 알려주시면 감사하겠습니다.
