SAP Memory 와 ABAP Memory 차이/사용법 정리

SAP ABAP 프로그램에서는 두가지 메모리 형태, SAP Memory 와 ABAP Memory 두 방식을 사용할 수 있습니다.

세션 종류에 따른 Memory 공간과 공유 방식의 차이 및 활용 방법에 대해서 정리해 보았습니다.

참고로, SAP Memory 와 ABAP Memory 가 SAP에서 사용되는 방식은 SAP Session 종류와 밀접한 연관이 있습니다. SAP 에서 사용되는 Session의 종류 3가지는 아래의 포스팅에서 확인할 수 있습니다.

SAP Session 종류 3가지(User, External, Internal)

ABAP Memory 와 SAP Memory 의 사용 상 차이점

ABAP Memory의 경우는 동일한 세션 내에서 여러 프로그램이 공유하며 사용하게 되며, SAP Memory의 경우에는 여러 세션에서 제한된 형태의 데이터를 공유할 수 있습니다.

SAP Memory와 ABAP Memory 의 차이점

ABAP Memory

ABAP Memory 의미

ABAP Memory는 Internal Session 간의 메모리를 ‘공유’하는 방식입니다.

대표적인 예가 되는 것이, 프로그램이 내부에서 ‘CALL TRANSACTION’을 통해 다른 프로그램을 호출하는 경우입니다.

Internal Session 이란 CALL TRANSACTION, SUBMUT REPORT 등으로 특정 Main 프로그램 내부에서 다른 프로그램을 호출한 경우를 말합니다.

ABAP Memory 방식의 드릴다운 CALL TRANSACTION

즉, 호출된 순서에 따른 Call Stack 상의 프로그램은 서로 메모리 공간에 대한 공유가 가능하며, 그리고 최초 실행된 Main 프로그램이 종료되면 메모리에 공유한 사항은 사라지게 됩니다.

EXPORT TO MEMORY 명령어를 통해 메모리 공간에 올리고, 이 내용을 IMPORT FROM MEMORY을 통해 가져다 쓰는 형태가 됩니다

공유할 수 있는 형태는 Structure, Internal Table, Variable 모두 가능합니다..

ABAP Memory 활용 – Call Transaction, Submit 등

테이블에서 엘리먼트를 더블클릭하는 예제의 소스를 보도록 하겠습니다.

앞서 이야기 했듯이, ABAP Memory 란, Call Transaction이나 Submit을 통해 수행되는 프로그램들 간의 공유할 수 있는 메모리를 이야기 합니다.

<< A Program >>

REPORT  ZTEST_A.
DATA : LT_T001 LIKE T001 OCCURS 0 WITH HEADER LINE.
SELECT * FROM T001
  INTO TABLE LT_T001.
EXPORT MEMORY_C FROM LT_T001 TO MEMORY ID 'MEM_T001'.
SUBMIT ZTEST_CALLED.  

EXPORT MEMORY_C FROM LT_T001 TO MEMORY ID 'MEM_T001'.

LT_T001의 내용을 MEMORY_C에 동기화(복사) 한 후 이 내용은 MEM_T001의 ID로 공유한다는 의미입니다.

이 구문은 다음과 코드와 동일합니다.

EXPORT MEMORY_C = LT_T001 TO MEMORY ID 'MEM_T001'.

<< B Program – A 프로그램을 호출>>

REPORT  ZTEST_B.
DATA : LT_T001 LIKE T001 OCCURS 0 WITH HEADER LINE.
CLEAR : LT_T001, LT_T001[].

IMPORT MEMORY_C TO LT_T001 FROM MEMORY ID 'MEM_T001'.

LOOP AT LT_T001.
  WRITE:/ LT_T001-BUKRS, LT_T001-BUTXT.
ENDLOOP.  

MEM_T001 메모리 ID로 부터 MEMORY_C의 내용을 가져와 LT_001로 동기화(복사).
역시 동일한 구문입니다.

IMPORT MEMORY_C TO LT_T001 FROM MEMORY ID 'MEM_T001'.

IMPORT MEMORY_C = LT_T001 FROM MEMORY ID 'MEM_T001'.

SAP Memory

SAP Memory 의미

SAP Memory 방식은, 흔히 SPA/GPA Parameter 방식이라고 칭합니다.

User가 로그인을 하게 되면, 즉 하나의 User Session이 열리게 되면, 총 6개의 세션(External Session)을 열 수 가 있습니다.

이 때 각각의 External Session은 SAP Memory를 통해 데이터를 공유할 수 있으며, User Session이 유지되는 기간이기 때문에 로그인을 한 상태에서는 계속 메모리 안에서 공유가 가능합니다.

다만 SAP Memory는 ABAP Memory 와는 달리, Structure나 Internal Table 은 공유할 수 없고, 오로지 Variable 만 공유가 가능하다.

대표적으로 우리가 FB01, FB50 등으로 전표를 생성한 후에, FB03 전표 조회 화면으로 이동을 하면 방금 생성된 전표 번호가 Display되어 있고 우리는 Enter만 치면 해당 전표를 볼 수 있는 것을 확인 할 수 있습니다.

FB01 SAP 메모리 사용 예시

그러나 User Session 중에만 유지되므로 로그아웃 및 재 로그인 후에는 이전 전표 번호는 남아있지 않습니다.

SAP Memory – Parameter

SAP Memory는 로그인한 User Session에서 공유 가능한 메모리입니다.

ABAP 개발시에서는 SET PARAMETER, GET PARAMETER 구문을 사용합니다.

REPORT  ZTEST1.
SET PARAMETER ID 'BUK' FIELD '1000'.

REPORT  ZTEST2.
DATA : LV_BUKRS LIKE T001-BUKRS.
GET PARAMETER ID 'BUK' FIELD LV_BUKRS.  

1번 프로그램에서 BUK 라는 PARAMETER ID에 1000을 저장한 후, 2번 프로그램을 실행하면 LV_BUKRS의 변수에 1000의 값이 저장이 된다.

그리고 앞서 설명한 바와 같이 SAP Memory는 External Session이 모두 공유할 수 있는 반면, Structure나 Table 등의 구조체의 값은 공유되지 못하고 오로지 단일 Variable(변수)만이 공유가 가능합니다.

REPORT  ZTEST1.
SET PARAMETER ID 'ZSAP_T' FIELD '1040'.

REPORT  ZTEST2.
DATA : LV_BUKRS LIKE T001-BUKRS.
GET PARAMETER ID 'ZSAP_T' FIELD '1040'.  

스탠다드의 경우, 앞선 예시처럼 FB01, FB50 등에서 전표를 생성한 후(SET PARAMETER ID) FB03 티코드를 실행시키면(GET PARAMETER ID) 자동으로 전표 번호가 Display 되는 것이 바로 이 SAP Memory 사례입니다.

따라서, 이러한 SAP MEMORY를 이용하여 CBO 등의 프로그램에서는 전표 조회 FB03은 다음과 같이 호출하여 사용됩니다.

  SET PARAMETER ID 'BUK' FIELD LV_BUKRS.
  SET PARAMETER ID 'BLN' FIELD LV_BELNR.
  SET PARAMETER ID 'GJR' FIELD LV_GJAHR.
    
  CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.

CBO에서 미리 SAP MEMORY에 저장을 해두고 CALL TRANSACTION을 하게 되면 해당 티코드는 GET PARAMETER 가 이미 구현되어 있기 때문에 저 값을 그대로 읽어가게 됩니다.

SAP 스탠다드에는 BUK, BLN, GJR, CAC 등의 PARAMTER ID가 이미 지정되어 있는데, 각 화면 필드의 해당 PARAMTER ID는 다음에서 확인할 수 있습니다.

각 스크린 엘리먼트에 정의되어 있는 SAP PARAMETER ID


 

이상으로 SAP에서 관리되는 메모리 타입인 ABAP Memory와 SAP Memory 에 대해서 정리해 보았습니다.

ABAP Memory와 SAP Memory 활용에 대한 좀 더 자세한 내용은 아래의 SAP 공식 문서를 참고해 보시기 바랍니다.

SET PARAMETER
GET PARAMETER
IMPORT
EXPORT

함께 보면 좋은 글

SAP 실행 중인 ABAP 프로그램 디버깅 (SM50, SM66_OLD)

ABAP 디버깅 인터널 테이블 데이터 변경 방법

SAP ABAP 단축키 모음