JAVA (10) XML과 JSON 데이터 처리

통밀·2026년 7월 29일

JAVA

목록 보기
10/10

XML과 JSON 데이터 처리

들어가며

실제 개발에서는 데이터를 직접 코드에 작성하는 경우보다 외부 시스템에서 전달받는 경우가 훨씬 많다.

대표적인 예가 공공데이터포털(Open API), 기상청 API, 지도 API, 금융 API 등이다.

이러한 데이터는 대부분 CSV, XML, JSON 형태로 제공된다.

과거에는 XML이 많이 사용되었지만, 현재는 대부분 JSON을 사용한다. 그렇다고 XML이 사라진 것은 아니다. 공공기관이나 오래된 시스템에서는 XML을 사용하는 경우가 여전히 많으며, Java에서는 XML을 처리하는 SAX, DOM Parser도 자주 등장한다.

이번 글에서는 공공데이터의 형태와 XML의 구조, SAX와 DOM Parser의 차이, 그리고 JSON의 특징까지 정리해보려고 한다.


공공데이터와 데이터 형식

공공데이터란?

공공데이터란 국가기관이나 공공기관이 생산하거나 관리하는 공적인 정보를 의미한다.

대표적인 예는 다음과 같다.

  • 날씨 정보
  • 버스 도착 정보
  • 지하철 운행 정보
  • 관광지 정보
  • 미세먼지 정보
  • 병원 및 약국 정보
  • 문화 행사 정보

이러한 데이터는 대부분 Open API 형태로 제공되며 프로그램에서 쉽게 사용할 수 있도록 일정한 형식을 가진다.

대표적인 데이터 형식은 다음 세 가지이다.

  • CSV
  • XML
  • JSON

CSV

CSV(Comma Separated Values)는 가장 단순한 형태의 데이터이다.

이름 그대로 쉼표(,) 로 데이터를 구분한다.

id,name,age
1,Kim,20
2,Lee,25
3,Park,30

장점

  • 파일 크기가 작다.
  • 사람이 읽기 쉽다.
  • 처리 속도가 빠르다.

단점

  • 데이터 구조를 표현하기 어렵다.
  • 계층 구조를 표현할 수 없다.
  • 데이터 타입 정보가 없다.

간단한 테이블 데이터를 저장할 때 많이 사용된다.


XML

XML(Extensible Markup Language)은 태그를 이용하여 데이터를 표현하는 문서 형식이다.

HTML과 비슷하게 생겼지만 목적은 완전히 다르다.

HTML은 화면을 표현하기 위한 언어이고,

XML은 데이터를 저장하고 전달하기 위한 언어이다.

<person>
    <name>Kim</name>
    <age>20</age>
</person>

XML은 구조가 명확하고 확장성이 뛰어나기 때문에 공공데이터에서 많이 사용되었다.


JSON

JSON(JavaScript Object Notation)은 현재 가장 많이 사용되는 데이터 교환 형식이다.

객체를 Key-Value 형태로 표현한다.

{
  "name": "Kim",
  "age": 20
}

현재 대부분의 REST API는 JSON을 기본 형식으로 사용한다.


데이터 형식 비교

형식장점단점
CSV용량이 작고 단순하다.구조 표현이 어렵다.
XML계층 구조 표현이 가능하다.문법이 복잡하고 용량이 크다.
JSON가볍고 사용하기 쉽다.주석을 사용할 수 없다.

현재는 JSON이 가장 많이 사용되지만 XML 역시 공공데이터나 레거시 시스템에서는 여전히 중요한 역할을 한다.


XML

XML이란?

XML은 Extensible Markup Language의 약자이다.

"확장 가능한 마크업 언어"라는 의미이며, 필요한 태그를 개발자가 직접 정의하여 사용할 수 있다.

예를 들어 사람 정보를 저장한다면 다음과 같이 작성할 수 있다.

<person>
    <name>Kim</name>
    <age>20</age>
</person>

학생이라면

<student>
    <name>Hong</name>
    <grade>3</grade>
</student>

처럼 자유롭게 태그를 만들 수 있다.

이것이 HTML과 가장 큰 차이점이다.


Well-Formed XML

XML은 반드시 문법을 지켜야 한다.

이를 Well-Formed XML이라고 한다.

대표적인 규칙은 다음과 같다.

XML 선언

문서는 일반적으로 다음과 같이 시작한다.

<?xml version="1.0" encoding="UTF-8"?>
  • XML 버전
  • 문자 인코딩

을 지정한다.


Root Element는 하나만 존재

XML에는 최상위 태그가 반드시 하나 존재해야 한다.

올바른 예

<students>
    ...
</students>

잘못된 예

<student></student>

<teacher></teacher>

루트 태그가 두 개이므로 잘못된 XML이다.


시작 태그와 종료 태그가 일치해야 한다.

올바른 예

<name>Kim</name>

잘못된 예

<name>Kim</age>

태그는 대소문자를 구분한다.

<Name>

과

<name>

은 서로 다른 태그이다.


속성(Attribute)

태그에는 속성을 가질 수 있다.

<student id="1">

여기서

id → 속성 이름
1 → 속성 값

이다.


XML 문서 검증

XML은 개발자가 자유롭게 태그를 만들 수 있다.

그러다 보니 사람마다 태그 이름을 다르게 작성하면 문제가 발생한다.

이를 방지하기 위해 XML 문서의 규칙을 정의하는 방법이 존재한다.

대표적인 방법은

  • DTD(Document Type Definition)
  • XML Schema(XSD)

이다.

이를 이용하면 XML 문서가 정해진 규칙대로 작성되었는지 검사할 수 있다.

이러한 XML을 Valid XML이라고 한다.


XML Parsing

XML은 단순한 문자열이 아니다.

프로그램에서 원하는 데이터를 사용하려면 XML을 분석해야 한다.

이 과정을 Parsing이라고 한다.

XML 문서

↓

Parser

↓

Java 객체

Java에서는 대표적으로 두 가지 Parser를 제공한다.

  • SAX Parser
  • DOM Parser

SAX Parser

SAX란?

SAX(Simple API for XML)는 XML을 처음부터 끝까지 한 줄씩 읽으면서 이벤트 방식으로 처리하는 Parser이다.

문서 읽기

↓

시작 태그 발견

↓

이벤트 발생

↓

데이터 처리

↓

다음 태그 읽기

메모리에 XML 전체를 저장하지 않는다.

필요한 순간에만 처리한다.


특징

장점

  • 매우 빠르다.
  • 메모리 사용량이 적다.
  • 대용량 XML 처리에 적합하다.

단점

  • 이미 지나간 데이터를 다시 읽을 수 없다.
  • 앞뒤를 자유롭게 탐색하기 어렵다.
  • 구조를 자유롭게 수정하기 어렵다.

즉,

속도는 빠르지만 탐색은 불편하다.


이벤트 기반 처리

SAX는 태그를 만날 때마다 이벤트가 발생한다.

예를 들어

<name>Kim</name>

을 읽으면

startElement()

↓

characters()

↓

endElement()

순서대로 호출된다.

개발자는 이벤트가 발생했을 때 필요한 작업을 수행하면 된다.


Handler

SAX Parser는 이벤트가 발생했을 때 실행할 코드를 Handler에 작성한다.

대표적인 메서드는 다음과 같다.

startElement()

characters()

endElement()

각 메서드가 호출될 때 원하는 데이터를 저장하면 된다.


Record 클래스

Java에서는 XML 데이터를 저장하기 위해 Record를 사용할 수도 있다.

Record는 데이터를 저장하기 위한 불변 객체이다.

public record Person(
    String name,
    int age
) {}

Record의 특징은 다음과 같다.

  • 모든 필드는 final
  • Setter가 없다.
  • 생성자, equals(), hashCode(), toString() 등을 자동 생성한다.

DTO(Data Transfer Object)를 만들 때 매우 유용하다.


DOM Parser

DOM이란?

DOM(Document Object Model)은 XML 문서를 전부 메모리에 읽은 후 트리 구조를 생성한다.

XML

↓

메모리에 전체 저장

↓

트리 생성

↓

원하는 노드 탐색

특징

장점

  • 원하는 위치를 자유롭게 탐색 가능
  • 수정 가능
  • 부모, 자식 노드 접근 가능

단점

  • 메모리 사용량이 크다.
  • 속도가 느리다.
  • 큰 XML에서는 부담이 크다.

즉,

탐색은 편하지만 무겁다.


Node 구조

DOM에서는 XML을 모두 Node로 관리한다.

예를 들어

<person>
    <name>Kim</name>
</person>

은 다음과 같은 트리 구조가 된다.

person
 └── name
      └── Kim

태그, 속성, 값 모두 Node로 관리된다.


SAX와 DOM 비교

구분SAXDOM
읽는 방식순차적으로 읽음전체를 메모리에 로드
메모리 사용적음많음
속도빠름느림
탐색어려움자유로움
수정불가능가능
대용량 처리유리불리

간단히 기억하면

SAX는 빠르고 가볍고, DOM은 무겁지만 자유롭다.


JSON

JSON이란?

JSON(JavaScript Object Notation)은 현재 가장 많이 사용되는 데이터 교환 형식이다.

사람이 읽기 쉽고 용량도 작으며 대부분의 프로그래밍 언어에서 사용할 수 있다.

대표적인 형태는 다음과 같다.

{
  "name": "Kim",
  "age": 20,
  "major": "Computer"
}

객체는 Key-Value 형태로 구성된다.


배열 표현

JSON은 배열도 표현할 수 있다.

{
  "students": [
    {
      "name": "Kim"
    },
    {
      "name": "Lee"
    }
  ]
}

JSON의 장점

JSON이 널리 사용되는 이유는 다음과 같다.

  • 문법이 단순하다.
  • 사람이 읽기 쉽다.
  • 용량이 작다.
  • 대부분의 언어에서 지원한다.
  • 웹과 모바일 환경에서 매우 많이 사용된다.

현재 REST API에서는 거의 JSON을 사용한다고 생각해도 될 정도이다.


XML과 JSON 비교

항목XMLJSON
문법태그 기반Key-Value 기반
가독성복잡한 편간결함
용량크다작다
속도느린 편빠른 편
계층 구조가능가능
현재 활용도공공기관, 레거시 시스템대부분의 REST API

최근에는 대부분 JSON을 사용하지만,

공공데이터나 오래된 시스템에서는 XML도 자주 사용되므로 두 형식을 모두 이해하고 있어야 한다.


오늘 배운 내용 정리

이번 글에서는 Java에서 사용하는 XML과 JSON의 구조와 XML Parser를 정리했다.

  • 공공데이터는 CSV, XML, JSON 형태로 제공된다.
  • CSV는 단순하지만 구조 표현이 어렵다.
  • XML은 태그 기반의 구조적인 데이터 형식이다.
  • XML은 Well-Formed 문법을 반드시 따라야 한다.
  • DTD와 XML Schema를 이용하면 XML 문서를 검증할 수 있다.
  • XML Parsing은 XML 데이터를 프로그램에서 사용할 수 있도록 분석하는 과정이다.
  • SAX Parser는 이벤트 기반으로 동작하며 빠르고 메모리 사용량이 적다.
  • DOM Parser는 문서를 모두 메모리에 저장한 후 트리 구조로 탐색한다.
  • Record는 불변 DTO를 간결하게 작성하기 위한 문법이다.
  • JSON은 Key-Value 구조를 사용하는 데이터 형식이다.
  • 현재 대부분의 REST API는 JSON을 사용한다.
  • XML은 공공기관과 레거시 시스템에서 여전히 많이 사용된다.
profile
넘어가 울타리 green green

0개의 댓글