기술과 산업/언어 및 프레임워크

Java JSON 처리 실전 시리즈 10화 – JSON ↔ YAML, XML 포맷 변환: Jackson 기반 다중 포맷 처리 전략

B컷개발자 2025. 5. 19. 11:02
728x90

Jackson은 JSON뿐 아니라 YAML, XML 등 다양한 포맷을 처리할 수 있는 모듈을 제공합니다. Spring Boot 환경에서 포맷 변환을 구현하는 방법과 실무 활용 전략을 예제로 설명합니다.


1. 왜 JSON 외의 포맷이 필요한가?

REST API 시대에도 여전히 다음과 같은 이유로 다양한 포맷 변환 수요가 존재합니다:

  • YAML: 설정 파일, DevOps 구성, Kubernetes manifest 등에서 주로 사용
  • XML: 금융, 보험, 공공기관 등 레거시 시스템과의 연동에서 사용
  • CSV: 데이터 이관, 리포트, 분석용 다운로드 등에서 필요
  • JSON ↔ YAML ↔ XML 간 변환이 필요한 상황이 실제 현장에서 반복적으로 발생

Jackson은 이 모든 포맷을 하나의 ObjectMapper 구조를 확장해서 처리할 수 있도록 설계되어 있습니다.


2. YAML 포맷 처리 – jackson-dataformat-yaml

의존성 추가 (Maven)

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

사용 예시

ObjectMapper jsonMapper = new ObjectMapper();
ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory());

User user = new User("홍길동", 30);

// JSON → YAML
String json = jsonMapper.writeValueAsString(user);
JsonNode tree = jsonMapper.readTree(json);
String yaml = yamlMapper.writeValueAsString(tree);

// YAML → Java 객체
User parsed = yamlMapper.readValue(yaml, User.class);

결과 (YAML 포맷)

name: "홍길동"
age: 30

YAMLFactory를 사용하는 별도의 ObjectMapper가 필요하며, JSON과 동일한 직렬화/역직렬화 API를 사용할 수 있습니다.


3. XML 포맷 처리 – jackson-dataformat-xml

의존성 추가

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

사용 예시

ObjectMapper xmlMapper = new XmlMapper();

User user = new User("홍길동", 30);

// Java → XML
String xml = xmlMapper.writeValueAsString(user);

// XML → Java
User parsed = xmlMapper.readValue(xml, User.class);

결과 (XML 포맷)

<User>
  <name>홍길동</name>
  <age>30</age>
</User>

XmlMapper는 Jackson의 ObjectMapper를 상속한 클래스이며, XML 기반 처리에 최적화되어 있습니다.


4. Spring Boot에서 YAML/XML을 지원하도록 설정

Spring Boot에서는 기본적으로 JSON만 HttpMessageConverter에 등록되어 있으므로, XML 또는 YAML 응답을 직접 처리하려면 수동 설정이 필요합니다.

예: XML 응답 컨트롤러

@GetMapping(value = "/user.xml", produces = MediaType.APPLICATION_XML_VALUE)
public User getUserXml() {
    return new User("홍길동", 30);
}

XML HttpMessageConverter 등록 (선택)

@Bean
public MappingJackson2XmlHttpMessageConverter xmlHttpMessageConverter() {
    return new MappingJackson2XmlHttpMessageConverter(new XmlMapper());
}

YAML은 웹 응답 포맷보다는 주로 파일 입출력이나 백엔드 내부 처리에서 사용됩니다.


5. 실무 활용 시나리오 예시

상황 사용 포맷 설명

DevOps 설정 변환 JSON → YAML API 설정 결과를 Helm 또는 K8s yaml로 내보내기
금융기관 연동 JSON ↔ XML 외부 시스템이 XML 스키마 기반일 때
사용자 설정 저장 YAML 구조적이면서 읽기 쉬운 설정 포맷
백업 & 내보내기 JSON ↔ YAML, XML 유연한 백업 포맷 선택 가능성 확보

6. 변환 전략 요약

포맷 Jackson 모듈 ObjectMapper 유형

JSON 기본 new ObjectMapper()
YAML jackson-dataformat-yaml new ObjectMapper(new YAMLFactory())
XML jackson-dataformat-xml new XmlMapper()

동일한 POJO 클래스를 여러 포맷으로 변환할 수 있기 때문에, DTO 중복 없이 포맷 대응이 가능합니다.


결론: Jackson은 다중 포맷 대응에 매우 강력한 도구다

  • 의존성만 추가하면 JSON ↔ YAML ↔ XML 간 자유로운 변환 가능
  • Spring Boot와 함께 사용할 때는 수동 등록 또는 API 분리 전략 고려
  • REST API 응답뿐 아니라, 내부 설정 관리, 데이터 백업, 설정 배포 등에 폭넓게 활용 가능
728x90