등록일: 2002년 11월 20일조회수: 2,586 프린트 전체기사목록 「한빛 네트워크 기사 공모전」 입선작: 한동훈
SVG란?
SVG(Scalable Vector Graphics)는 XML에 기반한 웹 상의 그래픽을 기술하는 마크업 언어다. 1998년 W3C는 PGML(Precision Graphics Markup Language)와 VML(Vector Markup Language)라는 새로운 그래픽 포맷을 두 가지를 소개했었다. 이때 VML은 CSS를 사용하도록 되어 있었는데, 후일에 이 두 가지 언어가 하나로 합쳐져 새로운 언어를 탄생시켰다. 이것이 바로 SVG로 SVG가 탄생하게 된 목적은 동적이고 자유롭게 변환할 수 있으며, 사용자와 상호 작용할 수 있는 그래픽을 플랫폼 독립적으로 표현할 수 있도록 하는데 있다.
SVG는 현재 20여개 이상의 회원들로 구성되어 있으며, 이들 회원사들 중에는 썬(Sun), IBM, 어도비(Adobe), 매크로미디어(Macromedia), 휴렛패커드(HP), 마이크로소프트(Microsoft), AOL 등이 있다. 특히 어도비는 SVG용 플러그 인을 제공하는 등 SVG에 많은 투자를 하고 있다.
SVG의 버전은 현재 1.0, 1.1, 2.0이 있지만 1.1까지 작업이 마무리 되었으며 2.0은 기존의 문제점을 개선, 보완하기 위해 작업중이다. 또한 모빌 기기에서의 그래픽 표현을 위한 SVG Mobile이 작업중이며, XHTML + MathML + SVG를 위한 프로파일도 준비되어 있다. 관심있는 분들은 W3C를 방문하기 바란다.
SVG의 이점
SVG가 제공하는 이점은 앞에서도 얘기했지만, 여기서는 몇 가지 특징들을 정리해보겠다.
SVG Essentials
변환이 자유로운 벡터 그래픽: 독자들이 흔히 알고 있는 플래시와 마찬가지로 SVG 역시 벡터 기반 그래픽이기 때문에 그래픽을 축소 또는 확대하는 경우에 그래픽이 손상되지 않는다.
정확한 색상 표현: 화면상에서 볼 때와 인쇄물로 볼 때 정확히 같은 색상을 표현하는 것을 보장해준다. SVG에는 1600만 이상의 색상들을 제대로 지원한다.
Scalable: XML, HTML4, XHTML과 호환가능할 뿐만 아니라 CSS, XSL, DOM과 함께 사용할 수 있다. 다시 말해서 SVG는 확장가능하며, 스타일을 쉽게 적용할 수 있으며, 그래픽을 제어할 수 있으며, 쉽게 다른 문서와 통합할 수 있다는 것을 의미한다.
오픈 소스: 오픈 소스로 개발되고 있으므로 자유롭게 사용할 수 있으며, 다양한 언어들에서 SVG에 대한 개발을 제공하고 있다.(자바를 예로 들 수 있다)
기존 그래픽과 달리 고품질의 그래픽 이미지를 제공하고, 이미지에 있는 텍스트를 검색할 수 있으며, 사용자와 상호 작용하는 이미지를 작성할 수 있다.
SVG 도구
먼저 SVG를 보기 위해서는 Adobe SVG Viewer가 시스템에 설치되어 있어야 한다. 또는 Sun과 IBM이 개발한 SVG Viewer를 설치할 수 있다. 현재 SVG를 편집, 생성하기 위한 다양한 도구들이 제공되고 있으며, 이들에 대한 전체 목록은 SVG Implementations에서 쉽게 확인할 수 있다. 다음 절에서 설명하게 될 SVG 문법을 보면서 '저러한 것들을 어떻게 일일이 입력할까?'하는 생각은 하지 않아도 된다. 이미 Illustrator 9, Adobe GoLive 5.0, Paint Shop Pro, Corel Draw 9 또는 그 이상의 최근 버전의 그래픽 소프트웨어는 모두 'SVG로 내보내기(export)' 기능을 제공하고 있으며, 기존의 그래픽을 SVG로 쉽게 변환할 수 있다. SVG로 그래픽을 그릴 수 있는 SVG Editor들도 다수 제공되고 있으며, W3C에서는 SVG Editor인 Amaya를 제공하고 있으며, XMLSpy, HomeSite와 같은 소프트웨어 에서도 SVG를 지원한다. Protocol7.com에서는 C#으로 작성된 SVG#의 소스를 제공하고 있으니 관심있는 분들은 참고하기 바란다.
현재 SVG용 도구들은 맥, 리눅스, 솔라리스, 윈도우 환경에서 모두 이용할 수 있으며, 다양한 플랫폼에서 이용할 수 있다. Amaya와 같은 도구는 모티프, GTK, OpenGL과 같은 다양한 위젯으로 포팅되어 있다. 그놈(Gnome)의 GTK+에서의 SVG 지원에 대한 개발이 한창이며, 이미 SVG로 작성한 테마들도 눈에 띄고 있다.
SVG에서의 한글
SVG에서의 인코딩은 utf-8과 ISO-8859-x와 같은 기본적인 인코딩만 제공한다. 따라서 euc-kr과 같은 인코딩을 사용할 수 없으므로 SVG에 한글 텍스트를 추가하고 싶다면 유니코드를 입력하고 편집할 수 있는 SVG Editor(Amaya나 XMLSpy)등을 사용하기 바란다. 여기서는 도구의 사용법은 설명하지 않는다.
SVG 구현
SVG의 구문은 대부분의 경우에 사용하기 쉽고 매우 직관적이라는 것을 알 수 있을 것이다. SVG 역시 다른 언어들과 마찬가지로 XML에 기반한다. 먼저 간단한 상자를 그리는 SVG 예제를 살펴보자.
예제 : SimpleBox.svg
예제는 직접 입력하는 일 없이 이해만 하기 바란다. 위 텍스트는 코드를 통해서 생성한 것이다.
SVG와 MathML
웹 상에 수식을 표현하기 위해 정의된 XML 기반의 마크업 언어가 MathML이다. XML로 정의된 다양한 마크업 언어들을 어떻게 혼용할 것인가 궁금하게 생각하는 분들도 있을 것이다. 이 궁금증은 다음의 예제를 보면 해결될 것이다.
http://www.w3.org/2000/svg">
d="M 87,82 C 83,69 104,52 117,48 C 130,43 152,44 164,56 C 175,67 174,91
171,104 C 167,114 156,130 145,134 C 133,137 114,131 106,124 C 99,118 92,104 94,95 C
95,82 108,68 120,65 C 129,61 144,65 152,73 C 157,78 160,91 159,99 C 157,105 151,114
145,117 C 137,119 126,116 121,111 C 117,107 116,99 118,95 C 119,90 124,83 131,84 C
137,84 142,95 141,98"
style="stroke: #FFCB69" stroke-width="4" />
다른 마크업 언어를 사용할 때는 태그를 사용하고, 해당 마크업 언어로 표시할 영역을 태그로 정의한다. 나머지는 일반 XML 문서와 동일하게 XML 네임 스페이스를 선언하고, 해당 마크업으로 기술하면 된다.
SVG와 응용
SVG 역시 XML 문서이기 때문에 CSS와 XSL을 사용해서 스타일을 정의할 수 있다. 또한 대부분의 경우에 특정한 작업(차트)을 위해서 내부 포맷으로 SVG를 사용하는 경우에 모든 것을 매번 프로그램하는 대신에 이러한 차트를 표현할 컨트롤을 생성하는 것이 더 좋다. 이러한 컨트롤을 생성함으로써 사용자와 상호작용하는 응용 프로그램을 쉽게 작성할 수 있다.
SVG와 지도
SVG가 가지고 있는 다양한 특징들 때문에 여러 분야에서 사용되고 있으며, 가장 대표적인 것으로는 지도를 예로 들 수 있다. 사용자와 쉽게 상호작용할 수 있으며, 확대와 축소가 자유로우면서 고품질의 그래픽을 제공하기 때문이다. 관심있는 분들은 SVGMapMaker 2.0 for MapInfo Professional을 참고하기 바란다. 참고로 MapInfo 소프트웨어는 전세계의 다양한 지도들을 검색할 수 있는 소프트웨어를 판매하는 회사다(국내지도 역시 CD 5장 분량의 컨텐트로 제공되고 있으며 특수 용도로도 사용되고 있음).
특별히 지도에 SVG가 유용한 이유는 무엇인가? 만약 지도상에서 어떤 건물이 잘못된 좌표에 있다면 SVG는 텍스트 에디터에서 간단한 수치 입력 만으로도 지도상의 건물을 쉽게 옮길 수 있으며 도로와 건물을 쉽게 새로 만들 수 있기 때문이다. 플래시라면 제너레이터를 사용해야 할 것이고, 다른 소프트웨어들은 더 복잡하다(상상만으로 필자는 끔찍하다!). 국내에서 개발된 지도 저작 도구로는 XEG(XML Editor for Graphics)가 있으며, 국내 지리 정보 제공용으로 많이 사용되고 있다.
마치며
SVG의 우수성에 대해서는 많은 이야기가 있었다. 마이크로소프트의 VML과 어도비의 PGML이 합쳐지고, 다시 W3C에서 2년이란 세월이 걸쳐서 2000년에 나왔던 SVG는 현재에도 업계에서 인정 받지 못하고 있다. 그러나 최근에는 SVG의 우수함을 널리 알리기 위해 활동하는 사람들은 물론이고 『SVG Essentials』와 같은 책도 나와 있다.
SVG 2는 지금 보다 더 확장하기 쉽게 발전할 것이다. 예를 들어 Xform이나 FO-XML과 함께 사용할 수 있게 될 것이고, 심지어는 VoiceXML도 함께 사용할 수 있게 될지도 모른다. 또한 현재 보다 파일 크기를 보다 작게 하기 위해 노력하고 있으며 모빌 기기를 위한 Tiny SVG로 진행중에 있다. SVG를 압축하여 전달하는 .svgz과 같은 압축 포맷은 이미 제공되고 있다.
현재 SVG는 오픈 소스를 중심으로 빠르게 퍼져나가고 있다. 2002년 7월에 GTK+의 SVG 지원 소식에 이어, 9월에는 SVG를 이용한 테마 제작에 대한 이야기가 퍼져나가고 있다. (리눅스에서 플래시와 같은 데스크탑도 가능해질 것이고, Mac OS X보다 이쁜 운영체제가 될 지도 모른다.) 이미 SVG를 사용한 윤곽선 글꼴 지원도 제공하며 웹 상에 CAD, 지도와 같은 복잡한 그래픽을 표현하면서 사용자와 상호 작용할 수 있는 그래픽 포맷으로 널리 각광받고 있다. SVG를 익히는 것은 웹에서 여러분에게 가장 최신 기술을 익힐 수 있는 기회를 제공할 것이다. 또한, SVG 2의 등장은 그래픽 세상을 멋지게 바꿔줄 것이라 생각한다. 독자들도 SVG 탐구에 뛰어들어 보는 것은 어떨까?
참고자료
SVG Zone
『SVG Essentials』, O'Reilly
SVG Programming: The Graphical Web, Kurt Cagle, Apress
SVG Image Generation Demo
SVG#: C#으로 작성된 SVG 뷰어이며, 소스 또한 제공된다.
SVG Toolkit: 자바로 작성한 툴킷이며, SVG Viewer와 같은 애플릿 또한 제공한다.
Learn more about Graphing
Dominic Lachowicz이 3분 만에 만든 SVG 테마: 이것은 테마 작성자에게 상상의 나래를, 스티브 잡스와 애플에게 맥OS X이 가장 예쁜 데스크탑으로 있을 날이 얼마 남지 않았다는 두려움을 줄 것이다.
떠오르고 있는 SVG: SVG에 대한 장점과 특징들에 대해 설명한 글이다.
SVG 히스토그램: SVG로 만든 히스토그램을 설명하면서 SVG의 장점을 설명하고 있으나, 소스 코드가 Perl로 되어 있어서 Perl에 익숙하지 않은 독자에게는 어려울 수 있다.