SAP

ABAP RESTful Application Programming Model (RAP) 고급: 이벤트, 비동기 처리, 쿼리 최적화

디지털 현자 2025. 8. 4. 05:49
반응형

 
🚀 RAP 애플리케이션의 성능과 유연성을 극한으로 끌어올리세요! 고급 테크닉 공개.
 
안녕하세요! 지난 포스팅에서 ABAP RAP (RESTful Application Programming Model)의 기본 개념과 개발 워크플로우를 다뤘다면, 오늘은 고급 ABAP RAP 개발 기법에 대해 심층적으로 알아보겠습니다. 특히 복잡한 비즈니스 시나리오에서 RAP 애플리케이션의 성능을 최적화하고, 유연한 데이터 처리를 가능하게 하는 이벤트 처리, 비동기 처리, 그리고 쿼리 최적화 전략에 초점을 맞춰 살펴볼까요?
 

1. RAP 이벤트 처리: 비즈니스 로직의 유연성 확보 🔄

 
RAP 비즈니스 객체(Business Object, BO)는 CRUD(Create, Read, Update, Delete) 작업 외에도 다양한 비즈니스 이벤트를 발생시키고 처리할 수 있습니다. 이를 통해 비즈니스 로직을 더욱 유연하고 확장 가능하게 만듭니다.
 

1.1 비즈니스 이벤트 유형

 
RAP 비즈니스 객체는 두 가지 주요 이벤트를 지원합니다.
 

  • Standard Events: BO의 라이프사이클에 따라 자동으로 발생하는 이벤트입니다. (예: CREATED, UPDATED, DELETED)
  • Custom Events: 개발자가 특정 비즈니스 상황에 맞춰 정의하고 트리거하는 이벤트입니다. (예: ORDER_APPROVED, ITEM_SHIPPED)

1.2 이벤트 정의 및 발행

  • Behavior Definition (BDEF)에서의 이벤트 정의:
  • ABAP
    define behavior for ZI_MY_BUSINESS_OBJECT alias MyObject
    persistent table ZTB_MY_OBJECT
    lock master
    authorization master ( instance )
    {
      // Standard Operations
      create;
      update;
      delete;
    
      // Custom Actions
      action approve result [1] $self;
    
      // Custom Event Definition
      event order_approved importing parameters ZI_MY_ORDER_KEY_PARAMS; // Optional importing parameters
    }
    
  • Behavior Implementation (BIMP)에서의 이벤트 발행: ABAP 코드 내에서 RAISE EVENT 구문을 사용하여 이벤트를 발행합니다.
    • keys FOR approve: 액션의 입력으로 받은 키를 기반으로 이벤트를 발생시킬 인스턴스를 지정합니다.
    • FROM INSTANCE order_approved: 특정 인스턴스에 대한 이벤트를 발생시킴을 명시합니다.
    • PARAMETER VALUE: 이벤트 리스너에게 전달할 추가 데이터를 정의합니다.
  • ABAP
    CLASS lcl_my_handler DEFINITION FOR BEHAVIOR OF ZI_MY_BUSINESS_OBJECT.
      METHODS approve FOR BEHAVIOR IMPORTING keys FOR approve.
    ENDCLASS.
    
    CLASS lcl_my_handler IMPLEMENTATION.
      METHOD approve.
        " ... Business logic for approval ...
    
        " Raise custom event 'order_approved'
        RAISE EVENT (lt_keys) FROM INSTANCE order_approved
          PARAMETER VALUE ( VALUE #( FOR key_struct IN keys (
                                        key_for_event = key_struct-%key
                                        order_id = key_struct-OrderId ) ) ).
      ENDMETHOD.
    ENDCLASS.
    

     

1.3 이벤트 컨슈밍 (Event Consuming)

 
발행된 이벤트를 다른 RAP BO, ABAP 클래스, 또는 외부 시스템에서 소비하여 후속 비즈니스 로직을 트리거할 수 있습니다.
 

  • ABAP Event Handler (클래스): 클래스에 FOR EVENT 구문을 사용하여 특정 이벤트를 구독하고 처리할 수 있습니다.
  • SAP Cloud Events: SAP Event Mesh와 같은 메시지 브로커를 통해 이벤트를 외부 시스템으로 발행하거나, 외부 시스템의 이벤트를 수신하여 RAP BO를 트리거할 수 있습니다. 이는 비동기 처리에 매우 유용합니다.

 

2. 비동기 처리: 사용자 경험과 시스템 효율성 향상 ⏰

 
장시간이 소요되거나 독립적으로 실행될 수 있는 비즈니스 로직은 동기식 처리 시 사용자 응답 시간을 지연시키거나 시스템 자원을 비효율적으로 사용할 수 있습니다. RAP에서는 비동기 처리를 통해 이러한 문제를 해결합니다.
 

2.1 Background Task를 이용한 비동기 처리

 
RAP은 Background Task 개념을 지원하여 특정 로직을 백그라운드에서 비동기적으로 실행할 수 있도록 합니다.
 

  • FOR BACKGROUND TASK 어노테이션: Behavior Definition에서 액션이나 함수를 정의할 때 FOR BACKGROUND TASK를 추가합니다.
  • ABAP
    define behavior for ZI_MY_BUSINESS_OBJECT alias MyObject
    {
      action process_long_running_task result [1] $self for background task;
    }
    
  • 비동기 실행: 이렇게 정의된 액션은 클라이언트에서 호출될 때 즉시 응답을 반환하고, 실제 로직은 백그라운드에서 실행됩니다.
  • 비동기 호출: 클라이언트(예: Fiori UI)는 액션 호출 후 즉시 응답을 받고, 백그라운드 작업의 상태를 폴링(Polling)하거나, 작업 완료 시 알림을 받을 수 있도록 설계해야 합니다.
  • 데이터 일관성: 비동기 작업 중 데이터 일관성 유지를 위해 트랜잭션 처리(COMMIT WORK) 및 에러 핸들링 전략이 중요합니다.

 

2.2 SAP Event Mesh와의 통합

 
SAP Event Mesh는 클라우드 기반의 메시지 브로커 서비스로, RAP 애플리케이션의 비동기 처리를 더욱 강력하게 만듭니다.
 

  • 이벤트 기반 아키텍처 (EDA): RAP BO에서 발행된 이벤트를 Event Mesh로 보내고, Event Mesh를 통해 다른 마이크로서비스나 외부 시스템이 해당 이벤트를 구독하여 비동기적으로 작업을 처리하도록 할 수 있습니다.
  • 느슨한 결합: 시스템 간의 의존성을 줄여 모듈성을 높이고, 시스템 장애 전파를 방지합니다.

 

3. 쿼리 최적화: CDS View와 RAP 런타임 성능 향상 ⚡

 
RAP 애플리케이션의 성능은 대부분 기저에 있는 CDS View의 쿼리 성능에 좌우됩니다. 대용량 데이터를 다룰 때 쿼리 최적화는 필수적입니다.
 

3.1 CDS View 설계 최적화 (이전 포스팅 참조 및 심화)

  • Push-down Maximization: 가능한 모든 필터링, 조인, 집계 및 계산을 HANA 데이터베이스 레벨(CDS View)에서 수행하여 ABAP 애플리케이션 서버로 전송되는 데이터 양을 최소화합니다.
  • Association 활용: 불필요한 JOIN 대신 ASSOCIATION을 사용하여 필요한 경우에만 데이터를 로드하도록 합니다. 특히 _AssociationName.Field 형태로 액세스할 때, JOIN으로 자동 변환될 수 있으므로, 어떤 쿼리 계획이 생성되는지 확인하는 것이 중요합니다.
  • @ClientHandling 어노테이션: 클라이언트 종속 데이터를 다룰 때 ClientHandling.type: #CLIENT_SPECIFIC 어노테이션을 사용하여 클라이언트 필터링이 DB 레벨에서 자동으로 적용되도록 합니다.
  • @Analytics 어노테이션: 분석 리포트를 위한 CDS View는 dataCategory: #CUBE 또는 query: true 어노테이션을 사용하여 올바른 집계 및 쿼리 최적화를 유도합니다.

 

3.2 ABAP RAP 런타임 최적화

  • Query Capabilities 활용: RAP 런타임은 OData 쿼리 파라미터(예: $filter, $orderby, $top, $skip, $expand)를 CDS View 쿼리로 변환합니다. 클라이언트(Fiori UI)에서 이러한 OData 쿼리 파라미터를 효율적으로 사용하도록 설계해야 합니다.
  • @Search 어노테이션: CDS View에 @Search.searchable: true와 같은 어노테이션을 사용하여 퍼지 검색(Fuzzy Search) 기능을 활성화하고, 검색 성능을 향상시킵니다.
  • 버퍼링 전략: 마스터 데이터와 같이 변경이 적은 데이터는 버퍼링 메커니즘을 고려하여 DB 접근을 줄일 수 있습니다. (VDM View Type 어노테이션 참조)
  • SQL Trace (ST05) / ABAP Runtime Analysis (SAT) / SQL Analyzer (ADT):
    • ST05: RAP 서비스 호출 시 실제 HANA DB에서 어떤 SQL이 실행되는지 추적하여 비효율적인 쿼리를 찾아냅니다.
    • SAT: RAP 서비스의 ABAP 런타임 성능을 분석하여 병목 지점을 식별합니다.
    • SQL Analyzer (ADT): CDS View의 예상 실행 계획을 시각적으로 분석하여 성능 저하의 원인을 파악하고, 최적화 방안을 모색합니다. 특히 Explain Plan을 통해 인덱스 사용 여부 등을 확인할 수 있습니다.
  • WITH HINT 옵션: 극히 예외적인 경우, CDS View 내에서 WITH HINT 구문을 사용하여 HANA DB의 힌트를 명시적으로 제공함으로써 쿼리 실행 계획에 영향을 줄 수 있습니다. (SAP 전문가와 상의 후 신중하게 사용)

 

맺음말 👋

 
ABAP RESTful Application Programming Model (RAP)은 클라우드 시대의 강력한 ABAP 개발 모델입니다. 이벤트를 통한 유연한 비즈니스 로직 처리, 비동기 처리를 통한 사용자 경험 향상 및 시스템 효율성 증대, 그리고 쿼리 최적화를 통한 성능 극대화는 RAP 애플리케이션의 성공을 위한 핵심 요소입니다. 오늘 다룬 고급 기법들을 통해 여러분의 RAP 애플리케이션을 한 단계 더 발전시켜 보세요!
 
다음 포스팅에서는 ABAP Cloud 개발의 다른 심화 주제나 SAP Fiori Elements 개발의 고급 패턴에 대해 다루어보겠습니다. 많은 기대 부탁드립니다!
 

디지털 현자 드림.

반응형