-
Java JSON 처리 실전 시리즈 10화 – JSON ↔ YAML, XML 포맷 변환: Jackson 기반 다중 포맷 처리 전략기술과 산업/언어 및 프레임워크 2025. 5. 19. 11:02728x90
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'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글