
xml 문법을 정확히 알지 못하고 사용하고 있는 상태이다. 띄어쓰기 하나를 추가했다고, / 하나를 입력 안했다고 Was 가 오류를 내곤 했다. 도대체 그깟 공백하나가 뭐라고 tomcat 이 안뜨는지, 또 어떤 설정들이 있길래 xml 을 주로 이용하는지 궁금해지기 시작했다. 오늘은 깐깐한 xml 문법에 대해 맛보기를 해보려 한다.
1. XML은 무엇인가
XML은 데이터를 구조화해서 표현하기 위해 만들어진 마크업 언어이다. 보통 데이터를 다룰 때는 엑셀처럼 칸이 나눠져 있거나, JSON처럼 중괄호로 구분된 형식을 떠올리기 쉽다. XML은 그와 달리 태그(<tag>) 형태로 데이터를 표현하며, 트리 구조로 확장 가능한 문서를 만든다.
비유하자면, XML은 "내가 정한 제목으로 서랍을 만들고, 그 안에 데이터를 정리해서 넣는" 문서 서랍장 같은 것이다. HTML처럼 생겼지만 목적은 완전히 다르다. HTML은 "보여주기" 위한 언어이고, XML은 "전달하고 저장하기" 위한 데이터 표현 언어이다.
2.어느 곳에 XML 언어를 사용할 수 있을까?
XML은 주로 환경설정 파일이나 시스템 간 데이터 교환에서 사용된다. 서로 다른 시스템이 통신할 때, 같은 형식으로 데이터를 주고받기 위해 XML이 많이 활용된다. 과거 SOAP 기반의 웹서비스가 대표적이며, 지금도 일부 금융·공공 시스템에서 여전히 사용 중이다. 그리고 또 많은 개발자 들이 접하는 WAS(Web Application Server)의 설정 파일이 XML 파일이다. Tomcat의 web.xml 파일이나, Spring의 applicationContext.xml 파일이 대표적이다.
이런 파일들은 서버가 동작할 때 어떻게 움직일지 지시하는 설명서와 같다.
3. XML의 특징과 주요 문법
XML은 HTML과 비슷한 구조를 가지고 있지만, 태그를 사용자가 정의한다는 점이 가장 큰 차이점이다.
기계가 읽기 쉽도록 구성되어 있고, 다음과 같은 특징을 가진다.
- 루트 엘리먼트는 하나여야 한다
문서 전체를 감싸는 최상위 태그는 반드시 하나여야 한다. - 태그는 반드시 닫아야 한다
<tag></tag> 또는 <tag /> 형태로, 열고 닫는 구조가 확실해야 한다. - 속성(attribute)과 요소(element)를 함께 쓸 수 있다
예: <book title="XML"> 또는 <title>XML</title> - 주석은 <!-- 내용 --> 형태로 작성한다
<예시>
<?xml version="1.0" encoding="UTF-8"?>
<soccer>
<title>대한민국</title>
<player>손흥민</player>
<number>7</number>
</soccer>
4. WAS에서 XML이 사용되는 방식
WAS에서는 XML을 통해 서버의 동작을 제어하거나 설정 정보를 전달한다.
예를 들어 Tomcat의 context.xml 파일은 웹 애플리케이션의 경로, DB 연결 정보, 자동 재시작 여부 등을 설정한다.
이런 XML 설정 파일은 마치 "웹서버의 행동 메뉴얼" 역할을 한다.
서버는 XML에 적힌 내용을 참고해서 "어디에서 어떤 파일을 로딩할지", "에러가 나면 어떻게 처리할지" 등을 결정하게 된다.
<예시>
<Context path="/myapp" docBase="myapp" reloadable="true"> </Context>
- path: 애플리케이션 경로
- docBase: 실제 위치 (디렉토리 또는 WAR 파일)
- reloadable: 변경 시 자동으로 다시 로드할지 여부
-> 이 구성은 myapp이라는 애플리케이션을 /myapp 경로에 매핑하며, 소스가 수정될 경우 자동으로 다시 로딩하도록 한다.
또 XML은 사람이 보기에는 너그럽지만, 컴퓨터 입장에서는 단 한 줄의 오타나 공백도 치명적이다.
특히 WAS는 부팅 중 XML 오류가 나면 아예 실행이 중단되기 때문에, 다음과 같은 실수는 반드시 조심해야 한다.
- 속성 값과 등호 사이에 공백이 들어간 경우
#오류발생
<Context path= "myapp" docBase= "myapp" reloadable= "true" />
#정상작동
<Context path="myapp" docBase="myapp" reloadable="true" />
- 보기에는 별 문제 없어 보이지만,
=과 " 사이에 공백이 들어가면 톰캣에서는 오류가 발생할 수 있다. - 정확히는 XML 1.0 표준에서는 허용되지만, 일부 파서 구현(Tomcat 포함) 에 따라 오류 처리될 수 있다.
- 태그가 열리고 닫히지 않을 때
<Context path="myapp"
- 태그가 닫히지 않으면 파서는 어디서부터 어디까지가 하나의 블록인지 판단하지 못한다.
- 반드시 </Context> 또는 self-closing (/>) 형태로 마무리해야 한다.
- 루트 태그가 두 개인 경우
<config>...</config>
<another>...</another>
- XML은 하나의 루트 태그만을 가져야 한다.
- WAS 설정 파일에서는 루트 엘리먼트가 고정돼 있는 경우가 많으므로, 반드시 명세를 따라야 한다.
-속성에 작은따옴표 사용
<Context path='myapp' />
- XML 1.0에서 작은따옴표도 technically는 허용된다.
- 하지만 실무에서는 쌍따옴표(")를 쓰는 게 통일성과 가독성 면에서 훨씬 좋다.
-특수문자를 그대로 사용하는 경우
<message>5 < 10</message>
<message>5 < 10</message>
<, > 같은 문자는 반드시 이스케이프 처리해야 한다.
5. xmlValidation, xmlNamespaceAware, <Context>의 의미
이제 XML을 실제로 다룰 때 자주 접하게 되는 설정 옵션들을 정리해보자.
5-1. xmlValidation
- XML 문서가 정해진 스키마나 DTD 규칙을 따르는지 검사할지 여부를 설정하는 옵션이다.
- true로 설정하면, 문서가 정확한 형식인지 자동으로 체크한다.
- 비유하자면, 시험지를 채점하듯 문법 오류가 있는지 검사하겠다는 의미이다.
5-2. xmlNamespaceAware
- XML에서 네임스페이스를 별도로 인식할 것인지 여부를 설정하는 옵션이다.
- 네임스페이스란 태그 이름 충돌을 막기 위해 도입된 개념인데, 같은 이름의 태그라도 다른 의미를 갖도록 구분할 수 있게 해준다.
- 이 옵션이 true이면, 파서는 네임스페이스까지 고려해서 태그를 해석한다.
- 쉽게 말해, 동명이인을 성까지 구분해서 알아보겠다"는 의미이다.
5-3. <Context> 태그
- Tomcat 설정 파일에서 가장 핵심이 되는 태그이다.
- 웹 애플리케이션 단위로 설정을 부여할 수 있으며,
- path, docBase, reloadable, debug, crossContext 등 다양한 속성이 있다.
- 각각의 속성은 WAS가 애플리케이션을 어디에 연결하고, 언제 다시 불러올지, 로그를 얼마나 남길지 등을 결정하게 해준다.
6. 마무리
XML은 단순한 데이터 표현을 넘어서, 시스템 구성과 설정을 제어하는 중요한 역할을 한다. 처음엔 문법이 다소 까다로워 보일 수 있지만(스페이스 하나, 따옴표 하나 차이로 웹 서버의 에러를 발생시킬 수 있다.), 실제 환경에서 쓰이는 구조를 기준으로 이해하면 훨씬 쉽게(쉽다고 이해해줄게....) 다가갈 수 있다.
'CS 공부 > 기타' 카테고리의 다른 글
| [기타] Raspberry Pi Zero 2W 초기 설정하기 (Ubuntu 설치) (1) | 2025.05.23 |
|---|---|
| [기타] Raspberry Pi Zero 2W 를 영입한 이유 (1) | 2025.05.21 |
| [CS] Liquibase 란 무엇인가? (0) | 2025.05.14 |
| [기타 CS] NVIDIA 그래픽카드 상태 모니터링 해보기 (0) | 2025.05.13 |
| [ETC] RabbitMQ 란 무엇인가? (0) | 2025.04.25 |