기술과 산업/언어 및 프레임워크
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