왼쪽에 Python 코드를 붙여넣고 "Convert" 버튼을 누르면 XML로 바꿔드립니다Python 코드를 붙여넣으세요

이 도구가 하는 일

SOAP 엔드포인트용이든 설정 파일이든 레거시 연동이든 테스트 픽스처든, Python 클래스를 그대로 반영하는 XML 페이로드를 손으로 짜본 적이 있다면 그 루틴을 아시겠죠 — xml.etree.ElementTree와 한 시간을 씨름하다가 중첩 필드 하나를 빼먹은 걸 깨닫는 식입니다. 여기에 Python을 붙여넣으면 한 번에 잘 구성된 XML이 돌아옵니다. 일반 dict든, dataclass든, Pydantic 모델이든, 깊게 중첩된 구조든 결과는 같습니다.

단순한 문자열 치환이 아닙니다. 이 변환기는 Python 값이 실제로 XML에 어떻게 매핑되는지 이해합니다. Decimal("49.99")은 숫자 텍스트로, datetimedate는 ISO-8601 문자열로, UUID는 표준 8-4-4-4-12 16진수 문자열로, NoneOptional[...] 필드는 누락되지 않고 빈 요소로, list[T]List[T]는 항목 타입 이름을 가진 자식 하나씩을 담는 컨테이너 요소로 나옵니다 — xmltodictlxml 같은 라이브러리가 만들어내는 것과 같은 모양이죠.

타입 힌트도 그대로 반영됩니다. @dataclass 필드 이름은 그대로 요소 이름이 됩니다. Pydantic 모델의 Field(alias="x")는 요소 이름을 바꿔줍니다. dataclass의 field(metadata={"xml": "attribute"})는 값을 자식 요소 대신 속성으로 내보냅니다. _로 시작하는 private 필드는 누락됩니다. 여러 클래스를 붙여넣으면 각각이 중첩 타입을 펼치고 상속받은 속성까지 포함한 채로 출력됩니다. 조용히 빠지는 건 없습니다 — 필드가 있으면 XML에 나옵니다.

사용 방법

세 단계입니다. 다섯 줄짜리 dict든 models.py 전체든 방식은 똑같습니다.

1

Python 코드를 붙여넣거나 샘플을 불러오세요

왼쪽 에디터에 Python을 그대로 떨어뜨리세요. dict 리터럴, dataclass, Pydantic BaseModel, 중첩 클래스, 인스턴스 할당 모두 괜찮습니다. 현실적인 Order / OrderItem / Address 예시를 먼저 보고 싶다면 Load Sample을 눌러보세요.

import, 데코레이터, 타입 힌트를 굳이 지우지 마세요. 파서가 typing 애너테이션을 읽어서 출력 타입을 결정합니다.

2

Convert 누르기

초록색 Convert 버튼을 누르세요. 도구가 Python을 읽고 모든 클래스와 속성을 보존하면서 한 번에 XML을 내보냅니다. 실행 중에는 짧은 로딩 표시가 뜹니다.

3

XML 복사하기

오른쪽 패널이 표준을 따르는 어떤 XML 파서든 받아들일 수 있는, 들여쓰기된 잘 구성된 XML로 채워집니다. SOAP 요청, 설정 파일, 테스트 픽스처, 문서 등 필요한 곳에 그대로 붙여넣으세요.

실제로 유용한 순간

SOAP / 레거시 연동 픽스처

Pydantic 요청 모델은 있는데 레거시 SOAP 서비스에 보낼 XML body가 필요할 때. 모델 붙여넣고, XML 받아서, 테스트 러너에 붙여넣으면 끝입니다.

dataclass를 설정 파일로

30개 필드짜리 Settings dataclass가 XML 기반 설정 저장소용으로 바로 편집 가능한 XML 템플릿이 됩니다. 손으로 짠 스캐폴드도, 오타도 없습니다.

XSD 문서와 코드 맞추기

README, API 레퍼런스, XSD 기반 스키마 문서용 XML 예시를 코드의 실제 모델에서 바로 생성하세요. 예시가 현실과 따로 놀 일이 없어집니다.

통합 테스트 시드 만들기

pytest 픽스처의 인스턴스 리터럴을 아직 XML을 쓰는 시스템 — 레거시 API, 목 서버, XSLT 파이프라인 — 용 XML 시드 파일로 변환하세요.

자주 묻는 질문

dataclass, Pydantic, 일반 dict 모두 되나요?

셋 다 됩니다. @dataclassPydantic BaseModel의 필드 이름이 요소 이름으로 쓰입니다. 일반 dict 리터럴도 동작합니다 — 키가 요소 이름이 되고 값은 타입에 따라 출력됩니다. 중첩된 모델이나 dict는 중첩 요소로 펼쳐집니다.

Decimal, datetime, UUID는 어떻게 처리되나요?

Decimal("49.99")은 요소 텍스트로 49.99가 됩니다. datetime, date, timeISO-8601 문자열로 나옵니다. UUID는 표준 8-4-4-4-12 16진수 문자열이 됩니다. Enum 서브클래스는 .value를 내보냅니다. set은 리스트처럼 컨테이너 요소가 됩니다.

Optional[...]과 None은 어떻게 되나요?

None인 필드는 누락되지 않고 빈 요소(<field/>)로 기록됩니다 — 출력 형태가 일관되게 유지되므로, 다운스트림 XSD가 해당 요소의 존재를 요구할 때 특히 의미가 있습니다.

요소 이름을 바꾸거나 필드를 속성으로 내보낼 수 있나요?

네. Pydantic 모델에서는 Field(alias="x")가 요소 이름을 바꿔줍니다. dataclass에서는 field(metadata={"xml": "attribute"})가 필드를 부모의 속성으로 내보내고, metadata={"xml": "name", ...}는 이름을 변경합니다. 언더스코어로 시작하는 private 필드(_cache, _tmp)는 기본적으로 누락됩니다.

여러 클래스를 한 번에 붙여넣어도 되나요?

네 — models.py 전체를 붙여넣어도 됩니다. 각 최상위 클래스가 중첩 타입 전개와 부모 클래스에서 상속된 필드까지 포함해서 나옵니다. 인스턴스 할당까지 같이 있으면 그 인스턴스가 직렬화되고, 없으면 기본값이 풀리는 첫 번째 클래스가 사용됩니다.

제 코드가 어딘가에 저장되나요?

코드는 변환 목적으로만 백엔드에 전송되고 저장되지 않습니다 — 페이로드를 로깅하지도 않습니다. 여느 온라인 도구와 마찬가지로, 진짜 민감한 코드라면 붙여넣기 전에 한번 훑어보세요.

함께 쓰면 좋은 도구들

Python → XML은 퍼즐의 한 조각일 뿐입니다. 같이 쓰기 좋은 도구들을 모아뒀습니다: