본문 바로가기
카테고리 없음

요청 데이터 형식 - XML과 JSON

by code study 2026. 5. 13.

들어가며

클라이언트와 서버가 데이터를 주고받을 때 데이터를 특정 형식으로 표현해야 합니다.
가장 많이 사용되는 두 가지 형식이 바로 XMLJSON입니다.
이 글에서는 두 형식의 특징과 차이점, 실제 사용 예시를 정리해보겠습니다.


XML(eXtensible Markup Language)이란?

XML은 태그(Tag) 를 사용해 데이터를 표현하는 형식입니다.
HTML처럼 열리는 태그와 닫히는 태그 사이에 데이터를 담습니다.

<?xml version="1.0" encoding="UTF-8"?>
<member>
    <id>1</id>
    <name>홍길동</name>
    <age>25</age>
    <email>hong@test.com</email>
</member>

태그를 직접 정의할 수 있어 데이터의 구조를 명확하게 표현할 수 있습니다.


JSON(JavaScript Object Notation)이란?

JSON은 키(Key)-값(Value) 쌍으로 데이터를 표현하는 형식입니다.
JavaScript 객체 문법을 기반으로 하며 현재 REST API에서 가장 널리 사용됩니다.

{
    "id": 1,
    "name": "홍길동",
    "age": 25,
    "email": "hong@test.com"
}

중괄호 {}로 객체를 표현하고, 대괄호 []로 배열을 표현합니다.


XML vs JSON 구조 비교

같은 데이터를 두 형식으로 표현했을 때 차이를 비교해보겠습니다.

단일 객체

<!-- XML -->
<member>
    <id>1</id>
    <name>홍길동</name>
    <age>25</age>
</member>
// JSON
{
    "id": 1,
    "name": "홍길동",
    "age": 25
}

배열(목록) 데이터

<!-- XML -->
<members>
    <member>
        <id>1</id>
        <name>홍길동</name>
    </member>
    <member>
        <id>2</id>
        <name>김철수</name>
    </member>
</members>
// JSON
{
    "members": [
        { "id": 1, "name": "홍길동" },
        { "id": 2, "name": "김철수" }
    ]
}

JSON이 XML에 비해 훨씬 간결하다는 것을 확인할 수 있습니다.


XML vs JSON 비교

항목 XML JSON
표현 방식 태그 (<key>value</key>) 키-값 ("key": value)
가독성 태그 반복으로 상대적으로 복잡 간결하고 읽기 쉬움
데이터 크기 태그가 많아 용량 큼 태그 없어 용량 작음
파싱 속도 상대적으로 느림 빠름
주석 지원 가능 (<!-- -->) 불가
배열 표현 태그 반복으로 장황함 []로 간결하게 표현
사용 예시 레거시 시스템, SOAP, 설정 파일 REST API, 현대 웹/앱 개발

 


JSON 데이터 타입

JSON은 다양한 데이터 타입을 표현할 수 있습니다.

{
    "name": "홍길동",        // 문자열 (String)
    "age": 25,              // 숫자 (Number)
    "isActive": true,       // 불리언 (Boolean)
    "address": null,        // null
    "scores": [90, 85, 92], // 배열 (Array)
    "profile": {            // 객체 (Object)
        "height": 175,
        "weight": 70
    }
}

Spring에서의 XML과 JSON 처리

JSON 요청/응답 - @RequestBody, @ResponseBody

Spring Boot는 기본적으로 Jackson 라이브러리를 통해 JSON ↔ Java 객체 변환을 자동으로 처리합니다.

// DTO
public class MemberDto {
    private Long id;
    private String name;
    private int age;
    // getter, setter
}

// JSON 요청 받기
@RestController
@RequestMapping("/api/members")
public class MemberController {

    // POST 요청 바디 (JSON) → Java 객체 자동 변환
    @PostMapping
    public ResponseEntity<MemberDto> create(@RequestBody MemberDto memberDto) {
        // { "name": "홍길동", "age": 25 } → MemberDto 자동 매핑
        System.out.println(memberDto.getName()); // "홍길동"
        return ResponseEntity.ok(memberDto);     // Java 객체 → JSON 자동 변환
    }
}
[JSON ↔ Java 객체 자동 변환]

요청:  { "name": "홍길동", "age": 25 }
           ↓  Jackson 역직렬화
       MemberDto { name="홍길동", age=25 }

응답:  MemberDto { name="홍길동", age=25 }
           ↓  Jackson 직렬화
       { "name": "홍길동", "age": 25 }

Content-Type 헤더

요청 시 어떤 형식의 데이터를 보내는지 헤더로 알려줘야 합니다.

// JSON 전송
Content-Type: application/json

// XML 전송
Content-Type: application/xml
// JSON과 XML 모두 처리하는 컨트롤러
@PostMapping(
    consumes = { "application/json", "application/xml" }, // 받는 형식
    produces = "application/json"                          // 응답 형식
)
public ResponseEntity<MemberDto> create(@RequestBody MemberDto dto) {
    return ResponseEntity.ok(dto);
}

 


실전 예시 - REST API 요청/응답

Creator-Flex 프로젝트에서 휴가 신청 API를 예시로 보면 아래와 같습니다.

요청 (클라이언트 → 서버)

POST /api/vacation
Content-Type: application/json

{
    "type": "ANNUAL",
    "startDate": "2025-03-10",
    "endDate": "2025-03-12",
    "reason": "개인 사유"
}

응답 (서버 → 클라이언트)

{
    "id": 15,
    "type": "ANNUAL",
    "startDate": "2025-03-10",
    "endDate": "2025-03-12",
    "status": "APPROVE_NEED",
    "createdAt": "2025-03-05T09:30:00"
}

언제 XML을 쓰고 언제 JSON을 쓸까?

JSON을 사용하는 경우

  • REST API 개발 (현재 표준)
  • React, Vue 등 프론트엔드와 데이터 통신
  • 모바일 앱 API

XML을 사용하는 경우

  • 레거시 시스템과의 연동 (SOAP 방식)
  • Maven, Spring의 설정 파일 (pom.xml, applicationContext.xml)
  • 복잡한 문서 구조가 필요한 경우
<!-- Spring 설정 파일 - XML 사용 예시 -->
<beans>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    </bean>
</beans>

정리

  • XML은 태그(<key>value</key>) 방식으로 데이터를 표현하며, 레거시 시스템이나 설정 파일에서 많이 사용된다.
  • JSON은 키-값("key": value) 방식으로 데이터를 표현하며, 간결하고 빠르다.
  • 현대 REST API에서는 JSON이 표준으로 사용된다.
  • Spring Boot는 Jackson 라이브러리를 통해 JSON ↔ Java 객체 변환을 자동으로 처리한다.
  • 요청 시 Content-Type 헤더로 데이터 형식을 명시해야 서버가 올바르게 파싱할 수 있다.