AMDP 입문 - HANA DB 프로시저를 ABAP에서 다루기

AMDP 입문 배너

AMDP란?

AMDP(ABAP Managed Database Procedure)는 ABAP에서 직접 작성하고 관리하는 HANA DB 프로시저입니다. 메서드 본문에 ABAP Open SQL 대신 SQLScript를 작성하면, 그 로직이 ABAP 애플리케이션 서버가 아니라 HANA DB 엔진 위에서 실행됩니다.

전통적인 ABAP은 DB에서 데이터를 애플리케이션 서버로 끌어올린 뒤 가공합니다. 반면 AMDP는 연산을 DB 안에서 처리(Code Pushdown)하기 때문에, 대량 데이터를 가공해야 할 때 애플리케이션 서버와 DB 사이의 데이터 전송량을 크게 줄일 수 있습니다.

Code-to-Data 패러다임

S/4HANA가 지향하는 "데이터를 코드로 끌어오지 말고, 코드를 데이터가 있는 곳(DB)으로 밀어넣어라"라는 원칙을 구현하는 대표적인 도구가 CDS View와 AMDP입니다.

CDS View와 AMDP, 언제 무엇을 쓰나

둘 다 DB 레벨에서 동작하지만 용도가 다릅니다.

CDS View

단순히 DB JOIN이나 SELECT로 데이터를 조회·정의할 때. 뷰 형태로 재사용하기 좋습니다.

AMDP

수불부처럼 데이터 선언부터 시작해 절차적으로 가공해야 하는, 여러 단계의 로직이 필요한 결과를 만들 때.

한 줄로 요약하면 — "조회/정의는 CDS View, 절차적 가공은 AMDP" 입니다.

AMDP 클래스 만들기

AMDP는 일반 리포트가 아니라 글로벌 클래스의 메서드 형태로 작성합니다. ADT(Eclipse 또는 VSCode) 환경이 필요합니다.

1. 클래스 생성과 마커 인터페이스

클래스를 만든 뒤, PUBLIC SECTION에 아래 마커 인터페이스를 반드시 추가해야 합니다.

1INTERFACES if_amdp_marker_hdb.

이 인터페이스는 "이 클래스 안에는 HANA DB용 AMDP 메서드가 있다" 고 ABAP 시스템에 알려주는 표식입니다. 이게 없으면 AMDP 문법 자체가 활성화되지 않습니다.

2. 메서드 선언과 구현

DEFINITIONCLASS-METHODS로 선언하고, IMPLEMENTATION에 실제 SQLScript 로직을 작성합니다.

1CLASS zcl_amdp_demo DEFINITION
2  PUBLIC
3  FINAL
4  CREATE PUBLIC.
5
6  PUBLIC SECTION.
7    " HANA DB용 AMDP 메서드가 있음을 알리는 마커
8    INTERFACES if_amdp_marker_hdb.
9
10    " 결과 테이블 타입 선언
11    TYPES: BEGIN OF ty_mat,
12             matnr TYPE mara-matnr,
13             mtart TYPE mara-mtart,
14             matkl TYPE mara-matkl,
15           END OF ty_mat,
16           tt_mat TYPE STANDARD TABLE OF ty_mat WITH EMPTY KEY.
17
18    " 정적 메서드로 선언 (인스턴스 생성 없이 호출)
19    CLASS-METHODS get_materials
20      IMPORTING VALUE(iv_mtart) TYPE mara-mtart
21      EXPORTING VALUE(et_mat)   TYPE tt_mat.
22
23ENDCLASS.
24
25CLASS zcl_amdp_demo IMPLEMENTATION.
26
27  METHOD get_materials
28        BY DATABASE PROCEDURE      " HANA DB용 프로시저
29        FOR HDB                    " 대상 DB: HANA
30        LANGUAGE SQLSCRIPT         " 작성 언어: SQLScript
31        OPTIONS READ-ONLY          " 조회 전용 (성능 최적화)
32        USING mara.                " 사용할 DB 테이블 명시
33
34    et_mat = SELECT matnr, mtart, matkl
35               FROM mara
36              WHERE mtart = :iv_mtart           -- 변수 앞에 콜론(:)
37                AND mandt = SESSION_CONTEXT('CLIENT');  -- 클라이언트 제어
38
39  ENDMETHOD.
40
41ENDCLASS.

선언부 키워드를 정리하면 다음과 같습니다.

키워드의미
CLASS-METHODS인스턴스 생성 없이 클래스명=>메서드명으로 호출하는 정적 메서드 (AMDP는 대부분 이렇게 작성)
IMPORTING입력 파라미터
EXPORTING출력 파라미터
RAISING실행 중 오류 발생 시 예외
BY DATABASE PROCEDURE FOR HDB이 메서드는 HANA DB용 프로시저라는 뜻
LANGUAGE SQLSCRIPT프로시저를 SQLScript로 작성
OPTIONS READ-ONLY데이터를 변경하지 않고 조회만 함 (성능에 유리)
USING메서드 안에서 사용할 DB 테이블/뷰를 명시
WARNING

CLASS-METHODSDEFINITION에 선언하고, IMPLEMENTATIONMETHOD ... ENDMETHOD까지 로직을 채워야 활성화(Activate)됩니다. 타입 선언만 해두면 활성화는 되지만 호출할 로직이 없습니다.

Open SQL과 SQLScript의 차이점

AMDP 본문은 ABAP Open SQL이 아니라 SQLScript입니다. ABAP에 익숙한 채로 작성하면 자주 틀리는 지점이 있습니다.

변수 참조콜론(:) 접두WHERE mtart = :iv_mtart
클라이언트SESSION_CONTEXTSESSION_CONTEXT('CLIENT')
문장 종료세미콜론(;)... matkl;
  • 변수 사용 시 이름 앞에 콜론(:)을 붙입니다. 예) :iv_mtart
  • 결과 할당이 다릅니다. Open SQL의 SELECT ... INTO TABLE 대신, et_mat = SELECT ... 형태로 결과 테이블에 직접 할당합니다.
  • 클라이언트 제어mandt = sy-mandt가 아니라 mandt = SESSION_CONTEXT('CLIENT')로 현재 접속 클라이언트를 체크합니다.
  • 문장의 끝은 마침표(.)가 아닌 세미콜론(;) 으로 끝냅니다.
INFO

AMDP 메서드 본문은 ABAP 구문 검사가 아니라 HANA DB가 해석하므로, ABAP 문법 하이라이팅/검사가 평소와 다르게 동작합니다. 활성화 시점에 비로소 DB에 프로시저가 생성되는 점을 기억해 두면 디버깅이 편합니다. (SAP 버전·HANA 리비전에 따라 지원 구문이 다를 수 있으니 실제 시스템에서 확인하세요.)

정리

  • AMDP는 ABAP에서 작성·관리하는 HANA DB 프로시저로, 연산을 DB로 밀어넣어(Code Pushdown) 대량 데이터 가공에 유리합니다.
  • 단순 조회/정의는 CDS View, 절차적 가공은 AMDP가 적합합니다.
  • if_amdp_marker_hdb 마커, BY DATABASE PROCEDURE FOR HDB, LANGUAGE SQLSCRIPT가 핵심 구성 요소입니다.
  • 본문은 SQLScript이므로 콜론 변수, SESSION_CONTEXT, 세미콜론 종료 같은 차이를 의식해야 합니다.

Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.