{
"user": {
"id": 1001,
"name": "홍길동",
"email": "hong@example.com",
"roles": ["admin", "user"]
}
}
<user>
<id>1001</id>
<name>홍길동</name>
<email>hong@example.com</email>
<roles>
<role>admin</role>
<role>user</role>
</roles>
</user>
| 구분 | JSON | XML |
| 발표 시기 | 2001년경 (대중화 2005~) | 1998년 (W3C 표준) |
| 문법 | 키-값 쌍 ({}, []) | 태그 기반 (<tag></tag>) |
| 데이터 크기 | 작음 (가벼움) | 큼 (태그 중복) |
| 가독성 | 높음 (간결) | 낮음 (장황함) |
| 파싱 속도 | 빠름 | 느림 |
| 데이터 타입 | string, number, boolean, null, object, array | 모두 문자열 (타입 개념 없음) |
| 속성(attribute) | 없음 (다 키-값) | 있음 (<user id="1001">) |
| 주석 | 지원 안 함 | 지원 (<!-- -->) |
| 스키마 검증 | JSON Schema (선택적) | XSD, DTD (강력·표준) |
| 네임스페이스 | 없음 | 있음 (xmlns) |
| 변환·표현 | 별도 도구 필요 | XSLT, XPath, XQuery 내장 |
| 주 사용처 | REST API, 모바일, 웹 | SOAP, 금융 전문, 공공 표준, 설정 파일 |
같은 데이터를 표현할 때 XML이 태그가 열고 닫히기 때문에 훨씬 큽니다.
대용량 통신·모바일 환경에서 JSON이 유리한 가장 큰 이유입니다.
{ "age": 30, "active": true, "score": null }
JSON은 숫자·불리언·null이 구분됩니다.
<age>30</age>
<active>true</active>
<score></score>
XML은 전부 문자열이라 받는 쪽에서 타입 변환을 해야 합니다.
JSON은 []로 깔끔하게:
"roles": ["admin", "user"]
XML은 같은 태그를 반복 (배열 개념이 없음):
<roles>
<role>admin</role>
<role>user</role>
</roles>
XML은 같은 정보를 두 가지 방식으로 표현 가능:
<!-- 속성 방식 -->
<user id="1001" name="홍길동"/>
<!-- 엘리먼트 방식 -->
<user>
<id>1001</id>
<name>홍길동</name>
</user>
→ 어느 쪽으로 쓸지 설계 시 고민해야 함 (JSON은 이런 고민 없음).
→ 금융·공공 표준처럼 엄격한 계약(Contract)이 필요한 도메인에선 XML이 여전히 강세
| 연동 대상 | 주력 포맷 |
| 신규 PG / 간편결제 REST API | JSON |
| 카드사 VAN 전문통신 | 자체 바이너리 전문 (JSON·XML 아님) |
| 오픈뱅킹 (금융결제원) | JSON |
| ISO 20022 (국제 송금·차세대 결제) | XML |
| 일부 은행 펌뱅킹·구형 시스템 | XML 또는 고정 전문 |
| 공공기관(국세청, 건강보험 등) | XML 많음 |
JSON은 가볍고 빠르고 모바일·웹에 최적 → 현대 REST API의 사실상 표준 XML은 엄격한 스키마·메타데이터·표준화가 강점 → 금융 국제표준·공공·레거시에 여전히 살아있음
신규 서비스라면 JSON이 디폴트, 외부 표준·레거시 연동 시에만 XML 사용 — 이게 실무 기준입니다.
| import java.time.LocalDate; import java.time.LocalDateTime; 차이는? (0) | 2026.06.03 |
|---|---|
| IT 개발, 서비스에서 Grace Period 의미는? (0) | 2026.04.15 |
| mermaid 란? 사용방법은? (0) | 2026.03.29 |
| @getmapping 하고 @postmapping 차이는? (0) | 2026.03.19 |
| temurin jdk open jdk 차이는? (0) | 2026.03.18 |