ABAP JSON/XML 처리 방법 비교: sXML, CALL TRANSFORMATION, XCO, /ui2/cl_json
3줄 요약
XML 은 iXML(DOM 방식)과 sXML(스트림 방식) 라이브러리, 그리고
CALL TRANSFORMATION(XSLT, Simple Transformation, 항등 변환ID)으로 다뤄요.JSON 은 sXML 의 JSON 읽기/쓰기,
CALL TRANSFORMATION(SOURCE JSON/RESULT JSON), XCO 라이브러리의xco_cp_json,/ui2/cl_json클래스 네 가지 길이 있어요.ABAP 데이터를 XML/JSON 으로 직렬화할 때 중간 형식은 asXML, asJSON 이에요.
어떤 상황에서 쓰나요
외부 시스템과 REST 로 통신하거나 파일 인터페이스를 만들 때 ABAP 구조체와 내부 테이블을 JSON 이나 XML 로 바꾸고 되돌리는 일이 필수예요. 도구가 여럿이라 무엇을 써야 하는지 헷갈리는데, 치트시트의 *Working with XML and JSON in ABAP* 편은 각 방법을 간단한 코드와 함께 정리해 둬요. 이 글은 그 지도예요.
핵심 내용
XML — 클래스 라이브러리
iXML(Integrated XML Library): XML 1.0 을 검증하고 파싱해 DOM(트리 구조)으로 만들고, DOM 을 고치고 다시 렌더링해요. 장점은 문서의 각 부분에 쉽게 접근할 수 있고 DTD 가 가능하다는 점이고, 단점은 DOM 전체를 만들면 메모리를 많이 쓴다는 점이에요.
sXML: 스트림(토큰) 방식의 읽기·쓰기 라이브러리예요. 토큰 기반과 객체지향 방식이 있어요(치트시트의 JSON 예제는 토큰 방식).
XML — 변환 (`CALL TRANSFORMATION`)
XSLT: XSL 변환 저장소 오브젝트예요. ABAP 데이터는 먼저 asXML 로 암묵 변환돼서 변환의 소스가 돼요.
항등 변환
ID: 미리 정의된 변환으로 asXML(그리고 asJSON) 형식을 읽고 써요. ABAP 구조를 XML 로 바꿔도 구조 자체는 바뀌지 않아요.Simple Transformation(ST): SAP 전용 언어로 XML 과 ABAP 데이터 사이를 변환해요.
가능한 조합: XML↔XML(XSLT), ABAP↔XML(XSLT, ST), ABAP↔ABAP(XSLT).
asXML 은 "ABAP Serialization XML" 이고 직렬화/역직렬화의 중간 형식이에요. XML 을 ABAP 로 역직렬화하려면 asXML 형식이어야 해요. 클래스 인스턴스를 직렬화하려면
IF_SERIALIZABLE_OBJECT를 구현해야 해요.변환의 오류에는 알맞은 예외 클래스를 써야 해요. 동적 지정(
CALL TRANSFORMATION ('ID'))은 변환이 없으면cx_invalid_transformation을 던져요.
DATA str_a TYPE string VALUE `Hello`.
DATA(writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id SOURCE hi = str_a
RESULT XML writer.
DATA(json) = cl_abap_conv_codepage=>create_in( )->convert( writer->get_output( ) ).
" json: {"HI":"Hello"}JSON 을 다루는 네 가지
sXML 의 JSON 쓰기/읽기: SAP 고유의 JSON-XML 형식을 중간에 거쳐요.
cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json )으로 JSON 쓰기를 만들어요.CALL TRANSFORMATION의SOURCE JSON/RESULT JSON또는 JSON 리더/라이터: 항등 변환ID로 ABAP↔JSON 을 직접 바꿔요(asJSON 이 중간 형식). 내부 테이블을 JSON 배열로 바꾸는 예제가 나와요.XCO 라이브러리:
xco_cp_json=>data->from_abap( 구조 )->to_string( )로 JSON 문자열을,xco_cp_json=>data->from_string( json )->write_to( REF #( 대상 ) )로 ABAP 데이터를 만들어요. 빌더로 직접 JSON 을 만들고,apply( ... pascal_case_to_underscore )처럼 이름 규칙 변환도 해요. 예제 출력에서n타입 필드가"0017"로 앞자리 0을 유지하는 점을 확인해 보세요./ui2/cl_json:/ui2/cl_json=>serialize( data = ... )와deserialize로 직렬화/역직렬화하고, 선택 매개변수가 많아요.
부록 — 객체 직렬화/역직렬화, string↔xstring 변환, 이진 데이터 압축/해제, 데이터 클러스터 내보내기/가져오기도 같은 시트에 정리돼 있어요.
주의할 점
치트시트의 예제는 간단한 경우만 다뤄요. 필드 이름 대소문자(
CARRIER_IDvscarrierId), 날짜 형식, 숫자 앞자리 0 처리 등 상대 시스템과 맞춰야 하는 세부는 직접 시험해야 해요.iXML 클래스(
cl_ixml_core)가 클라우드용 ABAP 에서 쓸 수 있다고 치트시트가 안내하지만, 클래식 클래스(cl_ixml)는 클라우드용에서는 릴리스되지 않았어요(ABAP Cloud 글 참고). 환경에 맞는 클래스를 고르세요.어떤 방법이 더 빠르거나 안전한지는 비교하지 않았어요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2023년 11월이고, 제가 읽은 판은 2026년 10월 기준이에요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/21_XML_JSON.md
출처와 이용 안내
원문: ABAP Cheat Sheets - Working with XML and JSON in ABAP · 작성자 SAP SE and contributors SAP-samples · 작성일 2023-11-30 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기