-
SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDPSAP 2026. 5. 12. 18:50
SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDP
1. 기본 호출 구조 — Entity → Query Provider → AMDP Procedure
Entity에서 AMDP까지 호출되는 전체 구조가 어떻게 되나요?
S/4HANA OData/RAP 기반 개발에서 데이터를 조회할 때의 기본 호출 경로는 다음과 같습니다
① Entity → ② Query Provider → ③ AMDP Procedure전체 흐름은 ABAP 영역과 DB 영역(SAP HANA)으로 구분됩니다.
① Entity ABAP
OData Service 또는 RAP Business Object로 외부 Fiori/API 요청이 진입하는 지점입니다. 클라이언트의 SELECT 요청을 받아 Query Provider로 위임합니다.
② Query Provider ABAP
Entity에
@ObjectModel.query.implementedBy어노테이션으로 연결된 ABAP 클래스입니다.IF_SADL_GW_QUERY_REQUEST~SELECT메서드를 구현하며, 실제 데이터 조회 로직을 담당합니다." Query Provider 클래스 예시 CLASS zcl_my_query_provider DEFINITION PUBLIC. INTERFACES if_sadl_gw_query_request. ENDCLASS. CLASS zcl_my_query_provider IMPLEMENTATION. METHOD if_sadl_gw_query_request~select. " AMDP 호출 또는 Open SQL 처리 ENDMETHOD. ENDCLASS.③ AMDP Procedure DB
Query Provider에서 AMDP 메서드를 호출하면 로직이 SAP HANA로 push-down됩니다. SQLScript가 HANA 엔진 위에서 네이티브로 실행되므로 대용량 데이터 처리 성능이 뛰어납니다.
" AMDP Procedure 정의 예시 CLASS zcl_my_amdp DEFINITION PUBLIC. INTERFACES if_amdp_marker_hdb. CLASS-METHODS get_data IMPORTING VALUE(iv_bukrs) TYPE bukrs EXPORTING VALUE(et_result) TYPE ltt_result. ENDCLASS. CLASS zcl_my_amdp IMPLEMENTATION. METHOD get_data BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT. et_result = SELECT bukrs, belnr, dmbtr FROM bkpf WHERE bukrs = :iv_bukrs; ENDMETHOD. ENDCLASS.💡 AMDP Procedure는 OUT 파라미터(테이블)로 결과를 반환합니다. ABAP 코드에서 메서드 호출 후 반환된 테이블을 직접 사용할 수 있습니다.
2. Query Provider에서의 두 가지 호출 경로 — Open SQL vs AMDP
Query Provider 안에서 Open SQL로 호출하면 AMDP 호출과 어떻게 다른가요?
Query Provider 내에서 데이터를 가져오는 방식은 크게 두 가지입니다. 두 경로는 DB 영역 경계를 넘는 방식이 다릅니다.
Query Provider → Open SQL (DBI 변환) → HANA SQL 실행Query Provider → AMDP Interface → AMDP Procedure (SQLScript)경로 비교
구분 Open SQL 경로 AMDP 직접 호출 경로 실행 방식 ABAP DBI가 Native SQL로 변환 후 실행 SQLScript가 HANA에서 직접 실행 (push-down) 오버헤드 DBI 변환 오버헤드 존재 변환 없음, 최소 오버헤드 적합한 쿼리 단순 필터링, CDS View 조회 복잡한 집계, Window Function, 대용량 JOIN CDS View 활용 가능 (FROM절에 CDS View 지정) 가능 (TABLE FUNCTION 방식으로) 코드 복잡도 낮음 (ABAP SELECT 문법) 높음 (SQLScript 작성 필요) 성능 (대용량) 보통 우수 Open SQL 방식 예시
METHOD if_sadl_gw_query_request~select. " CDS View 또는 테이블을 Open SQL로 직접 조회 SELECT bukrs, belnr, dmbtr FROM zi_my_cds_view " CDS Interface View WHERE bukrs = @lv_bukrs INTO TABLE @DATA(lt_result). ENDMETHOD.AMDP 직접 호출 방식 예시
METHOD if_sadl_gw_query_request~select. " AMDP 메서드 직접 호출 → HANA push-down zcl_my_amdp=>get_data( EXPORTING iv_bukrs = lv_bukrs IMPORTING et_result = DATA(lt_result) ). ENDMETHOD.💡 선택 기준: 단순 파라미터 필터 + CDS View 조회라면 Open SQL, 복잡한 집계·Window Function·대용량 JOIN이라면 AMDP가 적합합니다.⚠️ Open SQL은 ABAP DBI를 거치므로 복잡한 SQLScript 문법(SERIES_GENERATE, HIERARCHY 등)을 직접 사용할 수 없습니다. 이런 기능이 필요한 경우 AMDP를 사용해야 합니다.
3. TABLE FUNCTION 호출 구조 — CDS View를 통한 위임
TABLE FUNCTION은 AMDP Procedure와 어떻게 다르게 호출되나요?
AMDP TABLE FUNCTION의 핵심은 CDS View의 FROM절에 직접 사용할 수 있다는 점입니다. Query Provider 입장에서는 Open SQL로 CDS View를 조회하는 것처럼 보이지만, 내부적으로는 HANA SQLScript가 실행됩니다.
① Entity → ② Query Provider → ③ CDS View (AMDP-backed) → ④ TABLE FUNCTION③ CDS View (AMDP-backed) ABAP
CDS View의
FROM절에 AMDP 클래스의 TABLE FUNCTION을 지정합니다. 이를 통해 HANA 네이티브 로직이 Open SQL처럼 추상화됩니다.-- CDS View 정의 (AMDP TABLE FUNCTION 참조) @AbapCatalog.sqlViewName: 'ZV_MY_VIEW' @ObjectModel.query.implementedBy: 'ABAP:ZCL_MY_AMDP' define view ZI_MY_AMDP_VIEW with parameters p_bukrs : bukrs as select from ZCL_MY_AMDP( p_bukrs = :p_bukrs ) as tf { tf.bukrs, tf.belnr, tf.dmbtr }④ TABLE FUNCTION DB
AMDP 클래스 내에
BY DATABASE FUNCTION FOR HDB로 선언합니다. TABULAR RESULT를 반환하므로 FROM절 데이터 소스로 활용할 수 있습니다." AMDP TABLE FUNCTION 정의 CLASS zcl_my_amdp DEFINITION PUBLIC. INTERFACES if_amdp_marker_hdb. CLASS-METHODS get_data IMPORTING VALUE(p_bukrs) TYPE bukrs RETURNING VALUE(result) TYPE ltt_result. ENDCLASS. CLASS zcl_my_amdp IMPLEMENTATION. METHOD get_data BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY. RETURN SELECT bukrs, belnr, dmbtr, SUM(dmbtr) OVER (PARTITION BY bukrs) AS total FROM bkpf WHERE bukrs = :p_bukrs; ENDMETHOD. ENDCLASS.AMDP Procedure vs TABLE FUNCTION 비교
구분 AMDP Procedure AMDP TABLE FUNCTION 선언 키워드 BY DATABASE PROCEDUREBY DATABASE FUNCTION결과 반환 방식 EXPORTINGOUT 파라미터 (테이블)RETURNINGTABULAR RESULTCDS View FROM절 사용 불가 가능 ✓ Open SQL FROM절 사용 불가 SELECT * FROM tf(...)가능 ✓DML 처리 (INSERT/UPDATE) 가능 불가 (READ-ONLY) 주요 활용 복잡한 데이터 가공, 다중 결과셋 CDS View 데이터 소스, Query Provider 통합 💡 TABLE FUNCTION의 핵심 장점: CDS View로 감싸면 Query Provider에서 Open SQL처럼 단순하게 호출할 수 있으면서, 실제로는 HANA SQLScript (Window Function, SERIES_GENERATE 등)의 강력한 기능을 모두 활용할 수 있습니다.⚠️ TABLE FUNCTION은OPTIONS READ-ONLY가 필수입니다. 데이터 변경(INSERT/UPDATE/DELETE)이 필요한 경우에는 반드시 PROCEDURE를 사용해야 합니다.Query Provider에서 TABLE FUNCTION 활용 시 체크리스트
- AMDP 클래스에
IF_AMDP_MARKER_HDB인터페이스 선언 - TABLE FUNCTION 메서드에
OPTIONS READ-ONLY지정 - CDS View FROM절에
AMDP_CLASS( param = :param )형식으로 참조 - CDS View에
@ObjectModel.query.implementedBy또는 파라미터 바인딩 확인 - Query Provider에서 CDS View를 Open SQL로 SELECT 구현
- RETURNING 타입(
ltt_result)과 CDS View 필드 구조 일치 여부 확인
4. 호출 방식 선택 가이드
상황 권장 방식 이유 단순 파라미터 필터 + 기존 CDS View 조회 Open SQL 구현 단순, 유지보수 용이 복잡한 집계 / Window Function AMDP Procedure HANA push-down으로 성능 최적 Query Provider + CDS View 통합 구조 TABLE FUNCTION + CDS View Open SQL로 추상화, 레이어 분리 데이터 변경 포함 (INSERT/UPDATE) AMDP Procedure TABLE FUNCTION은 READ-ONLY HANA 전용 함수 (SERIES, HIERARCHY) AMDP (Procedure 또는 TABLE FUNCTION) Open SQL에서 미지원 'SAP' 카테고리의 다른 글
AMDP에서 WITH 구문(CTE) 활용하기 (0) 2026.05.13 AMDP SQLScript — Consumption Entity & Table Function 정리 (0) 2026.05.13 CDS Consumption Entity 어노테이션 정리 (0) 2026.05.12 [claude] AMDP Scalar Function 이용 가이드 (0) 2026.05.11 [claude] Oracle → SAP Consumption Entity 전환 (0) 2026.05.11 - AMDP 클래스에