Java에서 XML 변환기
Java 클래스나 POJO를 붙여넣으세요. 깔끔한 XML이 돌아옵니다.
이 도구가 하는 일
SOAP 클라이언트, Spring 설정, 레거시 뱅킹 연동, JUnit 픽스처 같은 작업에서 Java 클래스에 맞는 XML 페이로드를 손으로 만들어본 경험이 있다면 얼마나 귀찮은 일인지 아실 겁니다. 여기에 Java를 붙여넣으면 한 번에 well-formed XML이 돌아옵니다. 단일 POJO, Lombok 어노테이션이 달린 DTO로 채워진 파일, 여러 클래스가 들어간 깊게 중첩된 모델 — 결과는 같습니다. 모든 필드가 보존된 완전한 XML 문서가 나옵니다.
단순한 템플릿 치환이 아닙니다. 이 도구는 Java가 XML로 어떻게 직렬화되는지 알고 있습니다. BigDecimal은 정확한 정밀도를 유지하고(지수 표기법 없음), LocalDate와 LocalDateTime은 ISO-8601로 나오며, UUID는 표준 8-4-4-4-12 16진 문자열이 되고, Instant는 Z 접미사가 붙은 타임스탬프가 되며, null 값을 가진 박싱된 기본형은 빈 요소가 됩니다. List<T>는 컨테이너 요소가 되는데 — 기본적으로 래핑되고 항목마다 자식 하나가 붙는 형태로 — Jakarta XML Binding (JAXB)이 생성하는 그대로입니다.
어노테이션은 Eclipse JAXB RI가 다루는 방식 그대로 존중됩니다. @XmlRootElement(name="...")는 루트 이름을 바꾸고, @XmlElement(name="...")는 자식 이름을 바꾸며, @XmlAttribute는 필드를 부모의 속성으로 내보내고, @XmlTransient는 완전히 제거하며, @XmlElementWrapper는 컬렉션 바깥에 래핑 컨테이너를 추가합니다. Lombok @Data도 동작합니다 — 생성된 getter와 setter는 빈 프로퍼티로 취급됩니다. Jackson XML 모듈을 선호한다면 @JacksonXmlProperty와 @JacksonXmlElementWrapper도 동일하게 반영됩니다. 중첩 클래스, 상속된 필드, 여러 최상위 클래스 모두 깔끔하게 나옵니다.
사용 방법
세 단계면 됩니다. POJO 하나를 붙여넣든, 클래스 열두 개가 담긴 파일을 붙여넣든 똑같이 동작합니다.
Java 붙여넣기 (또는 샘플 사용)
왼쪽 에디터에 Java를 있는 그대로 떨궈주세요. 일반 POJO, @Data Lombok 클래스, JAXB 어노테이션이 달린 DTO, 여러 클래스가 담긴 파일 — 모두 동작합니다. 현실적인 예제를 먼저 보고 싶으면 Load Sample을 눌러보세요.
import를 지우거나 어노테이션을 제거하거나 파일을 정리할 필요 없습니다. IDE에 놓여 있는 그대로 붙여넣으세요 — 주석, package 선언까지 전부요.
Convert 누르기
초록색 Convert 버튼을 누르세요. 도구가 Java를 읽고, 모든 필드와 클래스를 보존하고, 어노테이션을 존중한 채 한 번에 XML을 만듭니다. 실행 중에는 짧게 로딩 표시가 뜹니다.
XML 복사하기
오른쪽 패널에 표준을 준수하는 XML 파서가 받아들일 수 있는 들여쓰기된 well-formed XML이 채워집니다. SOAP envelope, Spring Boot 설정, 통합 테스트, XSD 기반 스키마 예제로 복사해 쓰세요.
이럴 때 유용합니다
SOAP 픽스처 만들기
JAX-WS나 Apache CXF 요청 DTO가 있고 SoapUI나 Postman용 XML 바디가 필요한 상황. 클래스를 붙여넣고 envelope에 바로 쓸 수 있는 XML을 받은 뒤 다음 작업으로 넘어가면 됩니다.
Spring Boot XML 설정
필드가 30개 있는 Spring @ConfigurationProperties 클래스가 바로 편집 가능한 XML 템플릿으로 바뀝니다 — applicationContext.xml 보일러플레이트를 손으로 쓸 필요가 없습니다.
문서와 코드 맞추기
실제 엔티티 클래스에서 README, 사내 위키, XSD 기반 스키마 문서용 XML 예제를 바로 생성할 수 있어서, 예제가 코드와 어긋날 일이 없습니다.
레거시 통합 테스트 시드 데이터
JUnit object-mother를 mock 서버, IBM MQ 픽스처, 아직도 XML로 통신하는 레거시 엔터프라이즈 시스템용 XML 시드 파일로 만들 수 있습니다.
자주 묻는 질문
여러 클래스를 한 번에 붙여넣을 수 있나요?
네 — 파일 전체를 붙여넣으세요. 각 최상위 클래스는 중첩 타입이 펼쳐지고 슈퍼클래스에서 상속한 필드까지 포함된 상태로 나옵니다. 루트에서 참조하지 않는 클래스는 별도 XML 프래그먼트로 내보내져서, 조용히 빠지는 일은 없습니다.
@XmlRootElement, @XmlElement, @XmlAttribute, @XmlTransient 같은 JAXB 어노테이션을 존중하나요?
네. @XmlRootElement(name="x")는 루트 이름을 바꾸고, @XmlElement(name="x")는 자식 이름을 바꾸며, @XmlAttribute(name="x")는 필드를 부모의 속성으로 내보내고, @XmlTransient는 제거하며, @XmlElementWrapper는 컬렉션 바깥에 컨테이너를 추가합니다. JAXB 튜토리얼에 적힌 동작과 동일합니다.
Lombok과 Jackson XML은요?
Lombok @Data, @Getter, @Setter는 접근자를 손으로 작성한 것처럼 취급됩니다. Jackson XML 어노테이션 — @JacksonXmlProperty, @JacksonXmlRootElement, @JacksonXmlElementWrapper, @JacksonXmlText — 도 존중되므로 Jackson dataformats-text의 XmlMapper용으로 만든 클래스도 제대로 나옵니다.
BigDecimal, LocalDate, UUID, null 필드는 어떻게 처리되나요?
BigDecimal은 지수 표기법 없이 전체 정밀도를 유지합니다. LocalDate, LocalDateTime, ZonedDateTime은 ISO-8601 문자열로 나옵니다. Instant는 Z 접미사가 붙습니다. UUID는 표준 8-4-4-4-12 소문자 16진 문자열입니다. Optional.empty()와 null을 가진 박싱된 기본형은 사라지지 않고 빈 요소가 되어, 인스턴스마다 XML 형태가 일관되게 유지됩니다.
제 코드가 저장되나요?
코드는 변환을 위해 백엔드로 전송되고 보관되지 않습니다 — 페이로드를 로그에도 남기지 않습니다. 여느 온라인 도구와 같은 주의사항이 있긴 합니다: 정말로 민감한 코드라면 붙여넣기 전에 한 번 훑어보세요.
Stream, CompletableFuture, transient 필드처럼 특이한 게 들어 있으면요?
transient로 표시되거나 @XmlTransient / @JsonIgnore가 달린 필드는 건너뜁니다. XML 쪽에 직접 매핑이 없는 타입(Stream, CompletableFuture, 커스텀 함수형 인터페이스)은 변환 전체를 실패시키는 대신 빈 요소로 나옵니다. Java 자체에 컴파일 에러가 있다면 명백한 것부터 먼저 고쳐주세요 — 파서가 관대하긴 해도 완전한 javac는 아닙니다.
관련 도구
Java에서 XML은 퍼즐의 한 조각입니다. 함께 쓰면 좋은 도구들: