์๋ ํ์ธ์! ์ค๋์ ์ฌ๋ฌ๋ถ์ด ์น ๊ฐ๋ฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ๋ง์ฃผํ๊ฒ ๋๋ ์ค์ํ ๊ฐ๋ ์ธ XML์ ๋ํด ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. XML์ ๋ง์น ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ์ ๋ณด๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์กฐํํ๊ณ ํํํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ธ๋ฐ์. ๋ณต์กํด ๋ณด์ด๋ XML์ ์ฝ๊ณ ๋ช ํํ๊ฒ ์ดํดํ ์ ์๋๋ก, ํต์ฌ ๋ด์ฉ๋ง ์์ ๋ฝ์ ์์ธํ ์ค๋ช ํด ๋๋ฆด๊ฒ์. ํจ๊ป XML์ ์ธ๊ณ๋ก ๋ ๋๋ณผ๊น์?

๐งฉ XML์ด๋ ๋ฌด์์ผ๊น์?
XML(eXtensible Markup Language)์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๊ธฐ ์ํ ๋งํฌ์ ์ธ์ด์ ๋๋ค. HTML๊ณผ ๋น์ทํด ๋ณด์ด์ง๋ง, HTML์ ์น ํ์ด์ง์ ๋ด์ฉ์ โํ์โํ๋ ๋ฐ ์ค์ ์ ๋๋ ๋ฐ๋ฉด, XML์ ๋ฐ์ดํฐ์ โ๊ตฌ์กฐโ์ โ์๋ฏธโ๋ฅผ ์ ์ํ๋ ๋ฐ ์ง์คํฉ๋๋ค. ์ฆ, XML์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ๋ฐ์ดํฐ๋ผ๊ณ ํ ์ ์์ฃ .
XML์ ์ฌ๋๊ณผ ๊ธฐ๊ณ ๋ชจ๋ ์ฝ๊ธฐ ์ฌ์ด ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ํํํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋๋ถ์ ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ฑฐ๋, ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฑฐ๋, ์ค์ ํ์ผ์ ์ ์ฅํ๋ ๋ฐ XML์ด ํ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
XML์ W3C(World Wide Web Consortium)์์ ํ์ค์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ซํผ์์ ์ง์๋ฉ๋๋ค. ๋ฐ๋ผ์ XML์ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋ค๋ฉด, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํ์ธต ๋ ๋์ด์ฌ๋ฆด ์ ์์ ๊ฒ์ ๋๋ค.
๐งฑ XML์ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํดํ๊ธฐ
XML ๋ฌธ์๋ ์์(Element), ์์ฑ(Attribute), ํ ์คํธ(Text) ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ง์น ๊ฑด๋ฌผ์ ์ง๋ ๋ ๊ณ ๋ธ๋ก๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฑฐ์์.
- ์์(Element): XML ๋ฌธ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ ๋จ์์
๋๋ค. ์์ ํ๊ทธ์ ์ข
๋ฃ ํ๊ทธ๋ก ๋๋ฌ์ธ์ฌ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์ปจํ
์ด๋ ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
<book>,<title>๋ฑ์ด ์์์ ํด๋นํฉ๋๋ค. - ์์ฑ(Attribute): ์์์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ฑ์ ์์ ํ๊ทธ ์์ ์ด๋ฆ-๊ฐ ์์ผ๋ก ์ ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
<book id="123">์์id๋ ์์ฑ ์ด๋ฆ์ด๊ณ ,"123"์ ์์ฑ ๊ฐ์ ๋๋ค. - ํ
์คํธ(Text): ์์ ์์ ํฌํจ๋ ์ค์ ๋ฐ์ดํฐ์
๋๋ค. ์๋ฅผ ๋ค์ด,
<title>XML ์๋ฒฝ ๊ฐ์ด๋</title>์์XML ์๋ฒฝ ๊ฐ์ด๋๋ ํ ์คํธ์ ํด๋นํฉ๋๋ค.
XML ๋ฌธ์๋ ๋ฃจํธ ์์(Root Element)๋ฅผ ๋ฐ๋์ ํ๋๋ง ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๋ฃจํธ ์์๋ XML ๋ฌธ์์ ์ต์์ ์์์ด๋ฉฐ, ๋ชจ๋ ๋ค๋ฅธ ์์๋ฅผ ํฌํจํฉ๋๋ค.
XML ๋ฌธ์๋ ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค. ๋ฃจํธ ์์๋ฅผ ์์์ผ๋ก, ์์๋ค์ด ๊ณ์ธต์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํฉ๋๋ค. ์ด๋ฌํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๋ค์์ ๊ฐ๋จํ XML ๋ฌธ์์ ์์์ ๋๋ค.
โ`xml
โ`
์ ์์์์ <bookstore>๋ ๋ฃจํธ ์์์ด๋ฉฐ, <book>, <title>, <author>, <price>๋ <bookstore> ์์์ ์์ ์์์
๋๋ค. id๋ <book> ์์์ ์์ฑ์
๋๋ค.
โ XML ๋ฌธ๋ฒ ๊ท์น ์๋ฒฝ ์ ๋ฆฌ
XML ๋ฌธ์๋ ์ ํจ์ฑ(Validity)๊ณผ ์ ํ์ฑ(Well-formedness)์ด๋ผ๋ ๋ ๊ฐ์ง ์ค์ํ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
- ์ ํ์ฑ(Well-formedness): XML ๋ฌธ์๊ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ท์น์ ์ค์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ํ์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ XML ๋ฌธ์๋ ํ์ฑ(Parsing)ํ ์ ์์ต๋๋ค.
- ์ ํจ์ฑ(Validity): XML ๋ฌธ์๊ฐ DTD(Document Type Definition) ๋๋ XML Schema์ ๊ฐ์ ์คํค๋ง(Schema)์ ์ ์๋ ๊ท์น์ ์ค์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ํจ์ฑ์ ๋ง์กฑํ๋ XML ๋ฌธ์๋ ์ ํ์ฑ์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
XML ๋ฌธ์๋ฅผ ์์ฑํ ๋ ๋ฐ๋์ ์ง์ผ์ผ ํ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ ์์๋ ์์ ํ๊ทธ์ ์ข
๋ฃ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๋น ์์๋
<element/>์ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค. - ํ๊ทธ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
<Book>๊ณผ<book>์ ์๋ก ๋ค๋ฅธ ์์๋ก ์ธ์๋ฉ๋๋ค. - ์์๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ฒฉ๋์ด์ผ ํฉ๋๋ค.
<book><title>XML ์๋ฒฝ ๊ฐ์ด๋</book></title>์ ๊ฐ์ด ํ๊ทธ๊ฐ ์๊ฐ๋ฆฌ๊ฒ ์ค์ฒฉ๋๋ฉด ์ ๋ฉ๋๋ค. - ์์ฑ ๊ฐ์ ๋ฐ๋์ ๋ฐ์ดํ(โโ) ๋๋ ์์ ๋ฐ์ดํ(โ)๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค.
<book id=123>์ ์๋ชป๋ ํํ์ด๋ฉฐ,<book id="123">๋๋<book id='123'>์ ๊ฐ์ด ํํํด์ผ ํฉ๋๋ค. - ํน์ ๋ฌธ์๋ ์ํฐํฐ(Entity)๋ก ํํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
<๋<,>๋>,&๋&,'๋',"๋"๋ก ํํํด์ผ ํฉ๋๋ค. - XML ์ ์ธ์ ์ ํ ์ฌํญ์ด์ง๋ง, ๋ฌธ์์ ์ฒซ ๋ฒ์งธ ์ค์ ์์นํด์ผ ํฉ๋๋ค. XML ์ ์ธ์ XML ๋ฌธ์์ ๋ฒ์ ๊ณผ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
<?xml version="1.0" encoding="UTF-8"?>์ XML ๋ฒ์ 1.0์ ์ฌ์ฉํ๊ณ , UTF-8 ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
XML ๋ฌธ๋ฒ ๊ท์น์ ์ ์งํค๋ฉด, ์ค๋ฅ ์์ด XML ๋ฌธ์๋ฅผ ํ์ฑํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.

โ๏ธ XML ํ์ฉ ์ฌ๋ก ์ดํด๋ณด๊ธฐ
XML์ ๋ค์ํ ๋ถ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๋ ๋ฐ ํ์ฉ๋ฉ๋๋ค. ๋ช ๊ฐ์ง ๋ํ์ ์ธ ํ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณผ๊น์?
- ์น ์๋น์ค(Web Service): ์น ์๋น์ค๋ ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํด XML์ ์ฌ์ฉํฉ๋๋ค. SOAP(Simple Object Access Protocol)์ XML ๊ธฐ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ์ฌ ์น ์๋น์ค ๊ฐ์ ํต์ ์ ์ํํ๋ ํ๋กํ ์ฝ์ ๋๋ค. REST(Representational State Transfer) API์์๋ XML ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
- ์ค์ ํ์ผ(Configuration File): ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์์คํ ์์ ์ค์ ์ ์ ์ฅํ๊ธฐ ์ํด XML์ ์ฌ์ฉํฉ๋๋ค. XML์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํ๊ธฐ ๋๋ฌธ์, ์ค์ ํ์ผ์ ์์ฑํ๊ณ ํ์ฑํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Apache Tomcat, Spring Framework ๋ฑ๊ณผ ๊ฐ์ ์คํ ์์ค ํ๋ก์ ํธ์์ XML ๊ธฐ๋ฐ์ ์ค์ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database): ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ XML ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. XML ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ ์ฉ ๋ฐ์ดํฐ ํ์ (Data Type)์ ์ง์ํ๊ฑฐ๋, XML ๋ฐ์ดํฐ๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ์ฌ ์ ์ฅํ ์ ์์ต๋๋ค.
- ๋ฌธ์ ํฌ๋งท(Document Format): XML์ ๋ฌธ์ ํฌ๋งท์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Microsoft Office Open XML(OOXML)์ ์๋, ์์ , ํ์ํฌ์ธํธ ๋ฑ์ ๋ฌธ์ ํฌ๋งท์ ์ ์ํ๊ธฐ ์ํด XML์ ์ฌ์ฉํฉ๋๋ค.
์ด ์ธ์๋ XML์ ๋ค์ํ ๋ถ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ๊ตํํ๋ ๋ฐ ํ์ฉ๋ฉ๋๋ค. XML์ ํ์ฉ ๊ฐ๋ฅ์ฑ์ ๋ฌด๊ถ๋ฌด์งํ๋ฉฐ, ์ฌ๋ฌ๋ถ์ ์์ด๋์ด์ ๋ฐ๋ผ ๋์ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ์ฉ๋ ์ ์์ต๋๋ค.
XML ํ์ฑ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
XML ๋ฌธ์๋ฅผ ํ์ฑ(Parsing)ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
- DOM(Document Object Model): XML ๋ฌธ์์ ์ ์ฒด ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ฌ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํํฉ๋๋ค. DOM ํ์๋ XML ๋ฌธ์๋ฅผ ํ์ํ๊ณ ์์ ํ๋ ๋ฐ ์ ์ฉํ์ง๋ง, ๋์ฉ๋ XML ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- SAX(Simple API for XML): XML ๋ฌธ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ผ๋ฉด์ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. SAX ํ์๋ ํ์ํ ๋ถ๋ถ๋ง ์ฝ์ด ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ๋์ฉ๋ XML ๋ฌธ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง XML ๋ฌธ์๋ฅผ ์์ ํ๊ฑฐ๋ ํน์ ์์๋ฅผ ํ์ํ๋ ๋ฐ๋ DOM ํ์๋ณด๋ค ๋ณต์กํ ์ ์์ต๋๋ค.
๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ XML ํ์ฑ์ ์ํ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Java์์๋ JAXP(Java API for XML Processing), Python์์๋ xml.etree.ElementTree ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์์ Python์์ xml.etree.ElementTree ๋ชจ๋์ ์ฌ์ฉํ์ฌ XML ๋ฌธ์๋ฅผ ํ์ฑํ๋ ๊ฐ๋จํ ์์์ ๋๋ค.
โ`python
import xml.etree.ElementTree as ET
XML ๋ฌธ์ ํ์ฑ
tree = ET.parse(โbooks.xmlโ)
root = tree.getroot()
๋ชจ๋ book ์์์ ๋ํด ๋ฐ๋ณต
for book in root.findall(โbookโ):
# title, author, price ์์์ ๊ฐ ์ถ์ถ
title = book.find(โtitleโ).text
author = book.find(โauthorโ).text
price = book.find(โpriceโ).text
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(fโTitle: {title}, Author: {author}, Price: {price}โ)
โ`
์ ์์์์๋ books.xml ํ์ผ์ ํ์ฑํ์ฌ <book> ์์์ <title>, <author>, <price> ์์์ ๊ฐ์ ์ถ์ถํ์ฌ ์ถ๋ ฅํฉ๋๋ค.

๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ค๋์ XML์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ํ์ฉ ์ฌ๋ก, ํ์ฑ ๋ฐฉ๋ฒ๊น์ง ๋ค์ํ ๋ด์ฉ์ ์ดํด๋ณด์์ต๋๋ค. XML์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ตํํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ด๋ฉฐ, ์น ๊ฐ๋ฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉ๋ฉ๋๋ค.
XML์ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ํํ๊ฒ ๊ตํํ ์ ์์ ๊ฒ์ ๋๋ค. ์์ผ๋ก๋ XML์ ๋ํ ๊ด์ฌ์ ๊ฐ์ง๊ณ ๊พธ์คํ ํ์ตํ๊ณ ํ์ฉํด ๋ณด์ธ์.
๋ค์์ ๋ ์ ์ตํ ์ ๋ณด๋ก ๋ง๋์!
์ค๋ ์ค๋นํ ๋ด์ฉ์ ์ฌ๊ธฐ๊น์ง์ ๋๋ค. XML์ ๋ํด ๋ ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก ์ง๋ฌธํด์ฃผ์ธ์! ์ฌ๋ฌ๋ถ์ ๊ฐ๋ฐ ์ฌ์ ์ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ค์์ ๋ ์ ์ตํ๊ณ ์ฌ๋ฏธ์๋ ๋ด์ฉ์ผ๋ก ๋ค์ ๋ง๋์!
์ง๊ธ ํ์ธํ์ง ์์ผ๋ฉด ๋์น ์ ์์ต๋๋ค.
xml์ ์จ๊ฒจ์ง ์ด์ผ๊ธฐ์ ๋ ๋ง์ ํต์ฌ์ ๋ณด ์์๋ณด๊ธฐ!