AMDP(ABAP Managed Database Procedure)는 ABAP에서 직접 작성하고 관리하는 HANA DB 프로시저입니다. 메서드 본문에 ABAP Open SQL 대신 SQLScript를 작성하면, 그 로직이 ABAP 애플리케이션 서버가 아니라 HANA DB 엔진 위에서 실행됩니다.
전통적인 ABAP은 DB에서 데이터를 애플리케이션 서버로 끌어올린 뒤 가공합니다. 반면 AMDP는 연산을 DB 안에서 처리(Code Pushdown)하기 때문에, 대량 데이터를 가공해야 할 때 애플리케이션 서버와 DB 사이의 데이터 전송량을 크게 줄일 수 있습니다.
S/4HANA가 지향하는 "데이터를 코드로 끌어오지 말고, 코드를 데이터가 있는 곳(DB)으로 밀어넣어라"라는 원칙을 구현하는 대표적인 도구가 CDS View와 AMDP입니다.
둘 다 DB 레벨에서 동작하지만 용도가 다릅니다.
단순히 DB JOIN이나 SELECT로 데이터를 조회·정의할 때. 뷰 형태로 재사용하기 좋습니다.
수불부처럼 데이터 선언부터 시작해 절차적으로 가공해야 하는, 여러 단계의 로직이 필요한 결과를 만들 때.
한 줄로 요약하면 — "조회/정의는 CDS View, 절차적 가공은 AMDP" 입니다.
AMDP는 일반 리포트가 아니라 글로벌 클래스의 메서드 형태로 작성합니다. ADT(Eclipse 또는 VSCode) 환경이 필요합니다.
클래스를 만든 뒤, PUBLIC SECTION에 아래 마커 인터페이스를 반드시 추가해야 합니다.
이 인터페이스는 "이 클래스 안에는 HANA DB용 AMDP 메서드가 있다" 고 ABAP 시스템에 알려주는 표식입니다. 이게 없으면 AMDP 문법 자체가 활성화되지 않습니다.
DEFINITION에 CLASS-METHODS로 선언하고, IMPLEMENTATION에 실제 SQLScript 로직을 작성합니다.
선언부 키워드를 정리하면 다음과 같습니다.
| 키워드 | 의미 |
|---|---|
CLASS-METHODS | 인스턴스 생성 없이 클래스명=>메서드명으로 호출하는 정적 메서드 (AMDP는 대부분 이렇게 작성) |
IMPORTING | 입력 파라미터 |
EXPORTING | 출력 파라미터 |
RAISING | 실행 중 오류 발생 시 예외 |
BY DATABASE PROCEDURE FOR HDB | 이 메서드는 HANA DB용 프로시저라는 뜻 |
LANGUAGE SQLSCRIPT | 프로시저를 SQLScript로 작성 |
OPTIONS READ-ONLY | 데이터를 변경하지 않고 조회만 함 (성능에 유리) |
USING | 메서드 안에서 사용할 DB 테이블/뷰를 명시 |
CLASS-METHODS는 DEFINITION에 선언하고, IMPLEMENTATION에 METHOD ... ENDMETHOD까지 로직을 채워야 활성화(Activate)됩니다. 타입 선언만 해두면 활성화는 되지만 호출할 로직이 없습니다.
AMDP 본문은 ABAP Open SQL이 아니라 SQLScript입니다. ABAP에 익숙한 채로 작성하면 자주 틀리는 지점이 있습니다.
:)을 붙입니다. 예) :iv_mtartSELECT ... INTO TABLE 대신, et_mat = SELECT ... 형태로 결과 테이블에 직접 할당합니다.mandt = sy-mandt가 아니라 mandt = SESSION_CONTEXT('CLIENT')로 현재 접속 클라이언트를 체크합니다..)가 아닌 세미콜론(;) 으로 끝냅니다.AMDP 메서드 본문은 ABAP 구문 검사가 아니라 HANA DB가 해석하므로, ABAP 문법 하이라이팅/검사가 평소와 다르게 동작합니다. 활성화 시점에 비로소 DB에 프로시저가 생성되는 점을 기억해 두면 디버깅이 편합니다. (SAP 버전·HANA 리비전에 따라 지원 구문이 다를 수 있으니 실제 시스템에서 확인하세요.)
if_amdp_marker_hdb 마커, BY DATABASE PROCEDURE FOR HDB, LANGUAGE SQLSCRIPT가 핵심 구성 요소입니다.Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.