일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 웨크롤링
- web crowling
- 무상태
- 티스토리챌린지
- 12factorapp
- chatGPT
- java17
- 레이어패턴
- 포트바인딩
- JSON
- API
- MSA
- 3티어아키텍처
- 클라우드네이티브
- 책임분리
- AI
- xmlschema
- 웹크롤링
- 블루그린배포
- temurin
- DALL-E
- 카나리배포
- OpenAI
- ci_cd
- WSL
- 쳇지피티
- 티어구조
- Python
- 오블완
- chaosengineering
- Today
- Total
Nacho
[SSAFY] XML 본문
**필기를 바탕으로 GPT가 작성한 글입니다.**
XML의 개념과 특징: 데이터 구조와 전송의 강력한 도구
XML(Extensible Markup Language)은 데이터를 구조화하고 표현하기 위해 설계된 마크업 언어로, 다양한 분야에서 널리 사용되고 있습니다. 이 글에서는 XML의 발전 과정, 주요 특징, 다른 기술과의 비교, 그리고 XML 파싱 방식에 대해 알아보겠습니다. 이를 통해 XML이 왜 여전히 중요한 데이터 형식으로 자리 잡고 있는지 이해할 수 있을 것입니다.
1. XML의 역사: GML → SGML → HTML → XML
XML은 IBM의 GML(Generalized Markup Language)에서 시작된 마크업 언어 발전의 결과물입니다.
1) GML (Generalized Markup Language)
- IBM에서 개발된 초기 마크업 언어로, 데이터를 구조화하기 위한 기초적인 도구.
- 이후 등장한 SGML의 기반이 되었습니다.
2) SGML (Standard Generalized Markup Language)
- GML을 확장하여 ISO 표준화된 언어.
- 매우 유연하고 강력하지만, 복잡하고 무거운 설계로 인해 실무 사용이 어려웠습니다.
3) HTML (HyperText Markup Language)
- SGML의 하위 집합(subset)으로 웹 문서 표시를 위해 설계.
- 단순하고 사용하기 쉬운 구조 덕분에 웹에서 급격히 확산.
- HTML5로 발전하며 멀티미디어 콘텐츠와 현대적 웹 애플리케이션을 지원.
4) XML (Extensible Markup Language)
- SGML의 복잡성을 단순화하고 데이터 정의 및 전송을 목적으로 설계된 언어.
- HTML과는 달리 데이터를 표현하고 저장하기 위한 유연한 구조를 제공합니다.
2. XML의 주요 특징
XML은 데이터를 저장하고 전송하는 강력한 도구로, 다음과 같은 특징을 가지고 있습니다.
1) 트리(Tree) 구조 기반
- XML 문서는 루트 노드, 부모 노드, 자식 노드로 구성된 계층적 트리 구조를 가집니다.
- 데이터를 체계적으로 표현하고 관계를 명확히 나타냅니다.
2) 텍스트 기반
- 사람과 기계 모두 읽기 쉬운 텍스트 형식으로 데이터를 표현.
- 플랫폼 독립적이며 다양한 환경에서 처리 가능.
3) 확장성
- 사용자가 필요에 따라 맞춤형 태그를 정의할 수 있어, 다양한 목적의 데이터 표현이 가능합니다.
4) 다양한 응용 분야
- Voice XML: 음성 인터페이스.
- MathML: 수학 방정식 표현.
- SOAP: 웹 서비스 통신.
- RSS/Atom: 뉴스 피드 및 업데이트 제공.
5) 플랫폼 독립성
- 다양한 운영체제와 플랫폼에서 동일한 방식으로 데이터를 저장하고 처리.
3. HTML과 XML의 비교
특성 | HTML | XML |
---|---|---|
목적 | 문서의 표현 및 렌더링 | 데이터의 정의 및 전송 |
태그 사용 | 미리 정의된 태그만 사용 가능 | 사용자 정의 태그 허용 |
구조 강제성 | 느슨한 구조 (닫는 태그 생략 가능) | 엄격한 구조 (모든 태그 닫아야 함) |
가독성 | 주로 브라우저에서 사람이 읽음 | 기계와 사람이 모두 읽음 |
4. DTD와 XML Schema: 구조와 유효성 검증
XML 문서의 구조를 정의하고 유효성을 검증하기 위해 DTD(Document Type Definition)와 XML Schema를 사용합니다.
1) DTD (Document Type Definition)
역할:
- XML 문서의 구조와 규칙을 정의합니다.
- 태그, 속성, 요소 간의 관계를 규정하여 문서의 일관성을 보장.
특징:
- 문자열 기반으로 설계되어 단순하지만 제한적.
- XML Schema 등장 이전에 주로 사용되었습니다.
2) XML Schema
역할:
- DTD를 대체하는 강력하고 유연한 데이터 구조 정의 도구.
- 숫자, 날짜 등 데이터 타입을 명시적으로 정의 가능.
- 네임스페이스(namespace)를 지원해 태그 충돌을 방지.
XML Schema의 장점:
- 데이터의 구조를 더 정밀하게 정의 가능.
- JSON Schema와 비슷한 역할을 수행.
5. XML 문서의 조건: Well-formed vs Valid XML
XML 문서는 반드시 Well-formed XML 조건을 충족해야 하며, 선택적으로 Valid XML 규칙을 따를 수 있습니다.
1) Well-formed XML (필수 조건)
- 문법적으로 올바른 XML을 의미하며, 다음 규칙을 따라야 합니다.
- 태그는 반드시 시작 태그와 종료 태그가 있어야 함.
- 태그의 중첩 순서가 올바르게 유지되어야 함.
- 태그와 속성은 대소문자를 구분해야 함.
- 루트 태그는 반드시 하나만 존재해야 함.
2) Valid XML (선택 조건)
- DTD 또는 XML Schema를 사용해 구조와 데이터 타입이 정의된 XML.
- Valid XML은 Well-formed XML 조건을 충족하면서, 추가적으로 DTD나 XML Schema의 규칙에 적합해야 합니다.
6. XML과 JSON 비교
XML과 JSON은 데이터를 전송하고 저장하기 위한 대표적인 형식입니다. 각 형식의 특징은 다음과 같습니다.
특징 | XML | JSON |
---|---|---|
구조 | 트리 구조 기반 | 키-값 쌍 기반 |
가독성 | 복잡할 수 있음 | 간결하고 가독성 높음 |
데이터 타입 | 문자열 기반 (Schema 필요) | 기본적으로 숫자, 문자열, 배열 지원 |
확장성 | 태그를 자유롭게 정의 가능 | 제한적 |
주요 용도 | 문서 및 데이터 표현 | 데이터 교환 |
7. XML 파싱 방식: DOM, SAX, StAX
XML을 처리하기 위해 DOM, SAX, StAX와 같은 파싱 방식이 사용됩니다.
1) DOM (Document Object Model)
특징:
- XML 문서를 트리 구조로 메모리에 로드하여 조작 가능.
- 문서의 임의 위치에 자유롭게 접근 가능.
단점:
- 대규모 문서를 처리할 경우 메모리 사용량이 많음.
2) SAX (Simple API for XML)
특징:
- 이벤트 기반 파싱으로 메모리 사용이 적음.
- 순차적으로 XML 데이터를 처리하며, 임의 위치로 이동 불가.
단점:
- 문서를 동적으로 수정하거나 조작하기 어려움.
3) StAX (Streaming API for XML)
특징:
- SAX의 이벤트 기반 방식과 유사하지만, 개발자가 데이터 처리 흐름을 제어 가능.
- Pull 방식으로 필요할 때 데이터를 가져옵니다.
DOM vs SAX 비교
특성 | DOM | SAX |
---|---|---|
메모리 사용 | 문서 전체를 메모리에 로드 | 필요할 때만 데이터를 처리 |
속도 | 문서 크기에 따라 속도가 느려질 수 있음 | 문서 크기와 관계없이 빠름 |
조작 가능성 | 문서를 동적으로 조작 가능 | 읽기 전용, 조작 불가 |
API 난이도 | 상대적으로 간단 | 이벤트 기반으로 구현이 복잡 |
XML은 유연성과 확장성을 바탕으로 데이터를 정의, 저장, 전송하는 강력한 도구입니다.
DTD와 XML Schema를 통해 문서의 구조와 유효성을 보장하며, DOM, SAX, StAX와 같은 다양한 파싱 방식을 활용하여 XML 데이터를 처리할 수 있습니다.
JSON과의 비교에서 XML은 다소 무겁지만, 복잡한 데이터 표현과 문서화에는 여전히 뛰어난 장점을 제공합니다. XML을 올바르게 활용하면 더 효율적인 데이터 전송 및 관리를 실현할 수 있습니다.
'Java' 카테고리의 다른 글
[SSAFY] 레이어 패턴과 티어(Tier), 레이어(Layer) (0) | 2025.01.19 |
---|---|
[SSAFY] 12-Factor App (0) | 2025.01.19 |
[SSAFY] Distributed Architecture (0) | 2025.01.19 |
(mac) Homebrew로 JAVA 17 JDK (8, 11, 17, 20) 설치하기. (0) | 2024.02.25 |