ABAP

On-stack vs BTP ABAP — 진짜 차이 3가지 #shorts #SAP #ABAP

▶ YouTube에서 보기

On-Stack ABAP vs ABAP for Cloud — 무엇이 다른가

SAP 개발 환경은 크게 두 가지 ABAP 실행 환경으로 나뉩니다. 기존 SAP S/4HANA나 ECC 같은 온프레미스/사이드-바이-사이드 시스템에서 실행되는 Classic ABAP(On-Stack)과, SAP BTP ABAP Environment에서 실행되는 ABAP for Cloud입니다. 겉으로는 같은 ABAP 언어처럼 보이지만, 허용되는 API, 아키텍처, 배포 방식에서 근본적인 차이가 있습니다.

차이 1: 허용 API 범위 (ABAP Language Version)

On-Stack ABAP에서는 수십 년간 축적된 거의 모든 SAP API와 Function Module을 사용할 수 있습니다. 반면 ABAP for Cloud는 ABAP Cloud Language Version만 허용합니다.

" On-Stack에서는 허용
CALL FUNCTION 'RFC_READ_TABLE'
  EXPORTING
    QUERY_TABLE = 'SFLIGHT'
  TABLES
    DATA = lt_data.

" ABAP Cloud에서는 금지 — 대신 CDS View + EML 사용
SELECT FROM ZI_FlightDetails
  FIELDS carrier_id, flight_num, departure_date
  INTO TABLE @DATA(lt_flights).

ABAP Cloud에서는 CALL FUNCTION으로 기존 Function Module을 직접 호출하거나, TABLES 파라미터 방식의 오래된 문법을 사용할 수 없습니다. Released API만 사용 가능하며, 이는 ADT(ABAP Development Tools)의 ATC(ABAP Test Cockpit)가 자동으로 검사합니다.

차이 2: 데이터 접근 방식

On-Stack에서는 DB 테이블을 직접 Open SQL로 접근합니다. ABAP Cloud에서는 CDS View를 통해서만 데이터에 접근하는 것이 기본 원칙입니다.

" On-Stack: 직접 테이블 접근
SELECT matnr werks labst
  FROM mard
  INTO TABLE @DATA(lt_stock)
  WHERE werks = @lv_plant.

" ABAP Cloud: CDS View 경유
SELECT FROM ZI_ProductStock
  FIELDS product_id, plant, qty_available
  WHERE plant = @lv_plant
  INTO TABLE @DATA(lt_stock).

ABAP Cloud에서 SAP 표준 딕셔너리 테이블(MARD, MARA 등)에 직접 접근하면 ATC에서 오류가 발생합니다. Released CDS View를 경유해야 합니다. I_ 또는 C_ 접두어가 붙은 SAP-released CDS View가 이에 해당합니다.

차이 3: 배포와 테넌시 모델

On-Stack ABAP은 Transport Request로 개발→QA→운영 이관이 이루어집니다. ABAP Cloud(BTP ABAP Environment)는 abapGit과 gCTS(git-enabled Change and Transport System)를 기반으로 버전 관리와 CI/CD 파이프라인을 구성합니다.

" ABAP Cloud에서 단위 테스트 필수 구조
CLASS zcl_invoice_calculator DEFINITION PUBLIC FINAL.
  PUBLIC SECTION.
    METHODS calculate_vat
      IMPORTING iv_net_amount TYPE decfloat34
      RETURNING VALUE(rv_vat)  TYPE decfloat34.
ENDCLASS.

CLASS zcl_invoice_calculator IMPLEMENTATION.
  METHOD calculate_vat.
    rv_vat = iv_net_amount * '0.1'.
  ENDMETHOD.
ENDCLASS.

" 로컬 테스트 클래스 (ABAP Unit)
CLASS ltc_calculator DEFINITION FOR TESTING RISK LEVEL HARMLESS.
  PRIVATE SECTION.
    METHODS test_vat_calculation FOR TESTING.
ENDCLASS.

CLASS ltc_calculator IMPLEMENTATION.
  METHOD test_vat_calculation.
    DATA(lo_calc) = NEW zcl_invoice_calculator( ).
    DATA(lv_result) = lo_calc->calculate_vat( '1000' ).
    cl_abap_unit_assert=>assert_equals(
      act = lv_result
      exp = '100' ).
  ENDMETHOD.
ENDCLASS.

ABAP Cloud에서는 테스트 가능한 클린 코어 아키텍처를 강제합니다. Global Class, Interface, CDS View, Behavior Definition이 핵심 개발 아티팩트입니다.

ADT에서 언어 버전 확인하는 방법

ABAP 오브젝트 속성에서 ABAP Language Version을 확인할 수 있습니다. ABAP for Cloud Development로 설정된 패키지에서 작성된 오브젝트는 자동으로 Cloud 제약이 적용됩니다.

" ATC 체크로 Cloud 호환성 확인
" ADT → Project Explorer → 오른쪽 클릭 → Run As → ABAP Test Cockpit
" Cloud Readiness 체크 항목이 별도로 표시됨

어떤 환경을 선택해야 하는가

  • 기존 S/4HANA 확장 개발: On-Stack ABAP (Tier 1 Extension)
  • SAP 표준 코드에 손대지 않는 Side-by-Side 확장: ABAP Cloud (BTP ABAP Environment)
  • Clean Core 전략을 따르는 신규 개발: ABAP Cloud
  • RFC, BAPI, 구형 API를 반드시 써야 하는 경우: On-Stack

공식 문서

ABAP Cloud와 On-Stack의 차이는 SAP ABAP Cloud 공식 가이드에서 상세히 다룹니다. Released API 목록은 SAP API Business Hub에서 확인할 수 있습니다.

댓글 0

아직 댓글이 없습니다.