본문 바로가기

ABAP 프로그래밍 개념/ABAP 기초 개념

ABAP Program Type 2 : ABAP 프로그램 실행

프로그램은 유저에 의해 직접 실행되거나 다른 프로그램에 의해 호출됩니다. 사용 가능한 프로그램 유형 중에서는 Executable Program과 모듈 풀 프로그램만 사용자에 의해 직접 실행됩니다. 다른 프로그램 유형들(Ex : Function Group, Include Program 등..)은 이미 실행 중인 다른 프로그램에서 호출될 때 로드됩니다.

예를 들어, 사용자는 Executable Program을 실행하고, 해당 Executable Program 내에서 Function Module이 호출되면 함수 그룹(Function Group)이 메모리에 로드됩니다. 사용자는 함수 그룹(Function Group)을 직접 실행하지 않습니다.

ABAP 프로그램은 다양한 Processing Block으로 구성되며, ABAP 프로그램을 실행하는 것은 이러한 Processing Block을 특정한 순서로 호출하는 것입니다. 프로그램의 실행 흐름(execution flow)은 전적으로 런타임 시스템에 의해 제어됩니다. 프로그램이 실행될 때 첫 번째 Processing Block은 항상 런타임 환경에 의해 프로그램 외부에서 호출되며, 나머지 순서는 사용자의 조작에 따라 달라집니다.

예를 들어, 리포트 프로그램을 실행한다면 런타임 환경은 먼저 INITIALIZATION 이벤트를 호출하고, 선택 화면(Selection Screen)이 정의되어 있다면 선택 화면을 준비합니다. 사용자의 선택 화면에서의 동작에 따라 다른 처리 블록(Processing Block)이 호출됩니다. 프로그램 유형에 따라 어떤 처리 블록(Processing Block)이 먼저 호출되는지가 결정됩니다.


Executable Program Flow


Executable Program은 Transaction Code : SA38에 프로그램 이름을 입력함으로써 실행됩니다. 사용자 관점에서 Executable Program은 프로그램 이름으로 실행할 수 있는 유일한 프로그램입니다. 그러나 사용자는 실행할 프로그램 이름을 알 필요는 없으며, 프로그램에는 기억하기 쉬운 트랜잭션 코드(예: Transaction MRKO)가 할당되어 실행되거나 화면의 메뉴 항목에 연결되어 실행시킬 수 있습니다.

기술적인 관점에서 Executable Program은 SUBMIT 문을 사용하여 실행할 수 있는 유일한 프로그램입니다. 예를 들어, SUBMIT ZEXAMPLE_PROGRAM과 같이 Executable Program을 실행할 수 있습니다. Executable Program이 실행되면 ABAP 런타임 환경은 미리 정의된 이벤트 시퀀스를 트리거합니다.

1. LOAD-OF-PROGRAM
2. INITIALIZATION
3. AT SELECTION-SCREEN
4. START-OF-SELECTION
5. GET
6. END-OF-SELECTION

Selection Screen 이벤트는 프로그램이 PARAMETERS 또는 SELECT-OPTIONS 구문을 사용하여 선택 화면(Selection Screen)을 정의한 경우에만 트리거됩니다. 마찬가지로, List Event는 프로그램이 List Screen을 생성하는 경우에 트리거됩니다. List는 프로그램 실행이 끝날 때 자동으로 생성됩니다. 사용자가 List에서의 동작은 List Event를 트리거합니다.

Executable Program의 이벤트 시퀀스는 Reprort 개발에 적합합니다. Report는 데이터베이스에 대한 읽기 전용 액세스를 제공하며, 사용자가 입력한 선택 기준에 따라 데이터베이스에서 데이터를 읽어 List Screen에 보고서 출력으로 표시할 수 있습니다.

예를 들어, 사용자가 보고서를 실행할 때, INITIALIZATION 이벤트에서 프로그램의 모든 변수를 초기화할 수 있고, AT SELECTION-SCREEN 이벤트에서 Selection Screen에서의 입력값을 유효성 검사할 수 있으며, START-OF-SELECTION 이벤트에서 데이터를 선택하고 처리할 수 있고, 마지막으로 END-OF-SELECTION 이벤트에서 보고서 출력을 생성할 수 있습니다.

데이터베이스에서 데이터를 효율적으로 ABAP 프로그램으로 전송하기 위해, GET 이벤트를 사용하여 논리 데이터베이스(Logical Database)로 부터 데이터를 처리할 수 있습니다. 논리 데이터베이스(Logical Database)는 여러 논리적으로 관련된 데이터베이스 테이블에서 데이터를 ABAP 프로그램으로 전송하는 ABAP 프로그램입니다. 과거에는 논리 데이터베이스(Logical Database)는 GET 이벤트를 사용하여 실행 가능한 프로그램에서만 사용할 수 있었지만, 이제는 GET 이벤트를 사용하지 않고도 다른 프로그램에서도 사용할 수 있습니다.


Module Pool Program Flow


Module pool 프로그램은 Executable Program과는 다른 방식으로 실행됩니다. Module pool 프로그램을 실행하려면 적어도 하나의 화면을 정의하고 트랜잭션 코드를 생성해야 합니다. 트랜잭션 코드는 프로그램을 화면 중 하나와 연결하며, 해당 화면이 초기 화면이 됩니다. 이 초기 화면을 기반으로 대화형 모듈(Dialog Module)과 다른 화면이 호출됩니다.

Module pool 프로그램에 대해 트리거되는 이벤트 시퀀스는 다음과 같습니다

1. LOAD-OF-PROGRAM
2. PROCESS BEFORE OUTPUT (PBO)
3. PROCESS AFTER INPUT (PAI)

ABAP 런타임 환경은 먼저 초기 화면의 PBO 이벤트를 호출하고 화면을 사용자에게 표시합니다. 사용자가 화면에서 동작을 수행하면 PAI 이벤트가 트리거됩니다. PAI 이후, ABAP 런타임 환경은 동일한 화면의 PBO 또는 다른 화면의 PBO를 호출하여 화면을 다시 표시합니다. 이는 동일한 화면인지 아니면 다른 화면인지에 따라 결정됩니다. 화면 필드에 대해 사용자가 (F1) 도움말 또는 (F4) 값 도움말을 선택하는 경우 POH (PROCESS ON HELP-REQUEST) 및 POV (PROCESS ON VALUE-REQUEST)와 같은 추가적인 이벤트가 호출됩니다.

이러한 이벤트 시퀀스를 통해 ABAP 런타임 환경은 사용자와의 상호작용을 처리하고 화면을 효과적으로 제어합니다. 사용자의 입력에 따라 적절한 처리 로직(Process Logic)을 수행하고, 필요한 경우 도움말(F1)이나 값 도움말(F4)을 제공합니다.

ABAP 프로그램의 역할은 화면에서 호출되는 대화형 모듈(Dialog Module)을 유지하는 것입니다. 이로 인해 모듈 풀 프로그램이라는 이름이 붙었습니다. 모듈 풀 프로그램(또는 대화형 프로그램 : Dialog Program)은 사용자가 시스템의 데이터를 수정할 수 있는 트랜잭션을 생성하는 데 사용됩니다. 사용자가 일상적인 작업을 수행하기 위해 사용하는 대부분의 표준 SAP 트랜잭션, 예를 들어 판매 주문 생성(트랜잭션 VA01) 및 구매 주문 생성(트랜잭션 ME21n)은 대화형 프로그램입니다.

이러한 모듈 풀 프로그램은 사용자와의 상호작용을 통해 시스템의 데이터를 수정하고 처리하는 데 사용됩니다. 사용자가 입력한 데이터를 검증하고 처리하는 로직을 모듈로 구성하여 화면과 상호작용합니다. 이를 통해 사용자는 트랜잭션을 통해 시스템 데이터를 효율적으로 관리하고 조작할 수 있습니다.


Calling Programs Internally


이전에 언급한 바와 같이, 사용자는 Executable Program과 모듈 풀 프로그램을 통해서만 화면을 통해 호출할 수 있습니다. (화면을 만들 수 있는 것은 Executable Program, Module Pool Program, Function Pool 이지만 직접적으로 호출할 수 있는 것은 Executable Program과 Module Pool 입니다). 그 외의 다른 프로그램 유형은 특정한 문장을 사용하여 내부적으로 호출됩니다. 예를 들어, 함수 그룹을 로드하는 함수 모듈을 호출하기 위해 CALL FUNCTION 문을 사용할 수 있습니다.

Executable Program과 모듈 풀 프로그램은 이미 실행 중인 다른 프로그램에서 내부적으로 호출될 수도 있습니다. Executable Program은 SUBMIT 문을 사용하여 내부적으로 호출되며 프로그램 이름을 지정합니다(예: SUBMIT ZDEMO_PROGRAM.). 반면에 모듈 풀 프로그램은 CALL TRANSACTION 문을 사용하여 호출할 수 있습니다(예: CALL TRANSACTION MM01.) 또는 LEAVE TO TRANSACTION 문을 사용하여 호출할 수도 있습니다(예: LEAVE TO TRANSACTION MM01.).

프로그램 호출은 호출하는 프로그램이 새로운 프로그램이 호출될 때 종료되는지, 호출된 프로그램이 호출하는 프로그램에 포함되는지에 따라 구분할 수 있습니다. SUBMIT 문과 LEAVE TO TRANSACTION 문은 호출하는 프로그램을 종료하고 새로운 프로그램을 메모리에 로드합니다. 반면에 SUBMIT AND RETURN 문과 CALL TRANSACTION 문은 현재 프로그램과 해당 프로그램의 모든 데이터를 스택에 쌓은 후 호출된 프로그램을 메모리에 로드합니다.

호출된 프로그램의 실행이 종료되면, 호출한 프로그램은 모든 데이터와 함께 다시 메모리에 로드되고 호출 위치 다음의 문장을 실행합니다. 이를 통해 호출 시퀀스에서 이전 프로그램으로 돌아갈 수 있습니다. 호출한 프로그램의 실행이 완료된 후에는 호출한 프로그램이 중단된 지점에서 다시 시작되어 이전에 실행되던 위치로 돌아갑니다. 이로써 호출한 프로그램이 실행을 완료한 후에 호출한 프로그램이 중단되었던 지점에서 다시 실행되므로, 이전 프로그램으로의 복귀가 가능합니다.

반응형

'ABAP 프로그래밍 개념 > ABAP 기초 개념' 카테고리의 다른 글

Memory Organization  (0) 2023.06.24
ABAP Program Type 1 : ABAP 프로그램 종류  (0) 2023.06.21
ABAP Language Overview  (0) 2022.12.31