RAP

SE80 vs ADT — RAP 첫날 막히는 것 3가지 #shorts #SAP #RAP

▶ YouTube에서 보기

📖 개요 — SE80 경험자가 ADT 첫날 마주치는 3가지 벽

아직도 SE80에서 더블클릭으로 모든 개발을 하고 있다면, RAP(RESTful ABAP Programming Model)을 시작하는 순간 벽에 부딪히게 됩니다. CDS View Entity, Behavior Definition 같은 RAP 핵심 오브젝트는 SE80에서 아예 편집이 불가능하고, Eclipse 기반의 ADT(ABAP Development Tools)에서만 만들 수 있기 때문입니다. 이 글은 SE80에 익숙한 ABAP 개발자가 ADT 전환 첫날 실제로 막히는 지점 3가지를 실무 시나리오(SalesOrder, PurchaseRequest)로 풀어냅니다.

  • Eclipse 설치와 ABAP 플러그인 연결에서 나는 에러 해결
  • SE80 Repository Browser 사고방식을 ADT Project Explorer로 전환
  • RAP 오브젝트 생성 순서(CDS → Behavior → Service) 이해

📚 시작 전에 알아두면 좋은 것

ABAP 기본 문법과 SE80/SE11에서 테이블·프로그램을 만들어 본 경험이 있으면 충분합니다. OData나 Fiori 지식은 없어도 따라올 수 있으며, CDS는 이 글에서 처음 접해도 괜찮습니다. Eclipse 사용 경험은 필요하지 않습니다.

🔧 환경 · 버전 · 준비물

  • 백엔드: SAP S/4HANA 2022 이상 또는 SAP BTP ABAP Environment. RAP의 managed 시나리오는 일반적으로 S/4HANA 1909 이후부터 지원됩니다.
  • Eclipse: Eclipse IDE for Java Developers 2024-12 이후 버전 권장, JRE 17 이상 포함 버전.
  • ADT 플러그인: Update Site https://tools.hana.ondemand.com/latest에서 설치.
  • 온프레미스 연결 시: SAP GUI가 설치되어 있어야 시스템 접속 정보 재사용이 가능합니다(BTP 환경은 서비스 키만으로 연결).
  • 개발 권한: S_DEVELOP 및 ADT 접근용 S_ADT_RES 권한 오브젝트.

💡 핵심 개념 — 왜 SE80으로는 RAP이 안 되는가

SE80은 "화면 기반 에디터의 모음"입니다. 프로그램은 SE38 에디터, 테이블은 SE11 화면처럼 오브젝트마다 전용 GUI 화면이 존재합니다. 반면 ADT는 "텍스트(소스코드) 기반 에디터"입니다. CDS View, Behavior Definition, Service Definition은 태생부터 소스 파일 형태로 설계되었기 때문에 GUI 화면 자체가 만들어지지 않았고, 그래서 SE80에서는 열어도 읽기 전용이거나 아예 표시되지 않습니다.

비유하자면 SE80은 서랍이 많은 캐비닛입니다. 서랍(트리 노드)을 열어야 내용물이 보입니다. ADT는 검색창이 달린 도서관입니다. 트리를 뒤지는 대신 이름으로 검색해서 바로 점프하는 것이 기본 동작입니다. 이 사고방식 전환이 첫날 가장 큰 진입 장벽입니다.

RAP의 오브젝트 계층은 다음과 같은 스택 구조로 이해하면 쉽습니다.

테이블(저장) → CDS View Entity(데이터 모델) → Behavior Definition(트랜잭션 로직) → Service Definition(노출 범위) → Service Binding(프로토콜 결정, OData V2/V4)

SE80 시절의 "테이블 + 모듈풀 + 화면" 3종 세트가 RAP에서는 위 5계층으로 재편된 것이며, 각 계층은 전부 ADT에서 소스코드로 작성합니다.

💻 실전 코드 3단계 — 장벽을 하나씩 넘기

1단계 (장벽 1·2): 프로젝트 연결과 첫 CDS View

Eclipse 설치 후 Help > Install New Software에서 위 Update Site를 등록할 때 Unable to read repository 에러가 나면 사내 프록시 설정(Window > Preferences > Network Connections)을 먼저 확인하세요. 설치 후 ABAP 퍼스펙티브를 열고 File > New > ABAP Project로 시스템에 연결합니다. 이때 Project Explorer가 텅 비어 보여서 당황하는 경우가 많은데, ADT는 SE80처럼 전체 트리를 로딩하지 않습니다. Favorite Packages에 자기 패키지를 추가하거나, Ctrl+Shift+A(Open ABAP Development Object)로 이름 검색해 여는 것이 기본입니다. SE80의 더블클릭 탐색은 ADT에서 F3(정의로 이동)에 해당합니다.

이제 판매오더 조회용 CDS View Entity를 만듭니다. New > Other > Core Data Services > Data Definition을 선택합니다.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '판매오더 기본 뷰'
define root view entity ZI_SalesOrder
  as select from zso_header
{
  key so_id          as SalesOrderId,
      customer_id    as CustomerId,
      order_date     as OrderDate,
      @Semantics.amount.currencyCode: 'CurrencyCode'
      total_amount   as TotalAmount,
      currency_code  as CurrencyCode,
      overall_status as OverallStatus
}

저장(Ctrl+S)과 활성화(Ctrl+F3)가 분리되어 있다는 점도 SE80과 다릅니다. 저장만 하면 비활성 상태로 남습니다.

2단계 (장벽 3): Behavior Definition — 에러 메시지와 검증

CDS View에서 Service Binding까지 만들고 미리보기를 했는데 "Create 버튼이 없다"며 막히는 것이 전형적인 첫날 시나리오입니다. 원인은 Behavior Definition 부재입니다. CDS 소스에서 우클릭 > New Behavior Definition을 선택하면 같은 이름의 정의가 생성됩니다.

managed implementation in class zbp_i_salesorder unique;
strict ( 2 );

define behavior for ZI_SalesOrder alias SalesOrder
persistent table zso_header
lock master
authorization master ( instance )
{
  create;
  update;
  delete;
  field ( readonly ) SalesOrderId;
  validation validateAmount on save { create; update; }
}

검증 로직은 동반 클래스에 구현하며, 실패 시 reported에 메시지를 채워 사용자에게 에러를 전달합니다.

METHOD validateAmount.
  READ ENTITIES OF ZI_SalesOrder IN LOCAL MODE
    ENTITY SalesOrder
    FIELDS ( TotalAmount ) WITH CORRESPONDING #( keys )
    RESULT DATA(lt_orders).

  LOOP AT lt_orders INTO DATA(ls_order).
    IF ls_order-TotalAmount <= 0.
      APPEND VALUE #( %tky = ls_order-%tky ) TO failed-salesorder.
      APPEND VALUE #(
        %tky = ls_order-%tky
        %msg = new_message_with_text(
                 severity = if_abap_behv_message=>severity-error
                 text     = '주문 금액은 0보다 커야 합니다' )
      ) TO reported-salesorder.
    ENDIF.
  ENDLOOP.
ENDMETHOD.

3단계: 서비스 노출과 테스트 — 프로덕션 관점

Service Definition으로 노출 범위를 명시하고, Service Binding(OData V4 UI 권장)을 만든 뒤 Publish 버튼을 눌러야 엔드포인트가 활성화됩니다. Publish를 빼먹는 것도 첫날 단골 실수입니다.

@EndUserText.label: '판매오더 서비스'
define service ZUI_SalesOrder_O4 {
  expose ZI_SalesOrder as SalesOrder;
}

프로덕션 품질을 위해 EML 기반 단위 테스트를 작성합니다. 실제 DB를 건드리지 않도록 트랜잭션 버퍼만 검증합니다.

CLASS ltc_salesorder DEFINITION FINAL FOR TESTING
  DURATION SHORT RISK LEVEL HARMLESS.
  PRIVATE SECTION.
    METHODS create_rejects_zero_amount FOR TESTING.
ENDCLASS.

CLASS ltc_salesorder IMPLEMENTATION.
  METHOD create_rejects_zero_amount.
    MODIFY ENTITIES OF ZI_SalesOrder
      ENTITY SalesOrder
      CREATE FIELDS ( CustomerId TotalAmount CurrencyCode )
      WITH VALUE #( ( %cid = 'C1'
                      CustomerId = 'CUST01'
                      TotalAmount = 0
                      CurrencyCode = 'KRW' ) )
      FAILED DATA(ls_failed)
      REPORTED DATA(ls_reported).

    cl_abap_unit_assert=>assert_not_initial(
      act = ls_failed-salesorder
      msg = '금액 0은 실패해야 함' ).
    ROLLBACK ENTITIES.
  ENDMETHOD.
ENDCLASS.

보안 측면에서는 1단계에서 임시로 사용한 #NOT_REQUIRED를 운영 전환 전에 반드시 #CHECK로 바꾸고 Access Control(DCL)을 작성하는 것이 권장됩니다.

⚠️ 흔한 실수와 트러블슈팅 FAQ

Q1. Project Explorer에 System Library만 보이고 내 패키지가 없어요.
정상 동작입니다. ADT는 트리를 미리 로딩하지 않으므로 Favorite Packages에 패키지를 추가하거나 Ctrl+Shift+A로 검색해 여세요. SE80의 "전체 트리" 습관을 버리는 것이 핵심입니다.

Q2. CDS 저장은 됐는데 미리보기(F8)에 반영이 안 됩니다.
저장(Ctrl+S)과 활성화(Ctrl+F3)는 별개입니다. 에디터 탭 이름 앞에 비활성 표시가 있는지 확인하고 활성화하세요. 여러 오브젝트를 한 번에 활성화하려면 Ctrl+Shift+F3를 사용합니다.

Q3. Service Binding에서 Publish 버튼이 비활성입니다.
Binding 자체가 비활성 상태이거나, 온프레미스 OData V2의 경우 게이트웨이 등록(/IWFND/MAINT_SERVICE)이 별도로 필요한 구성일 수 있습니다. 먼저 Binding을 활성화한 뒤 다시 확인하세요.

Q4. Fiori Preview에서 Create 버튼이 안 보입니다.
Behavior Definition이 없거나 create;가 선언되지 않은 경우입니다. 2단계처럼 정의를 추가하고 활성화하면 나타납니다.

Q5. 플러그인 설치 중 Unable to read repository 에러가 납니다.
대부분 프록시 문제입니다. Eclipse Network Connections를 Manual로 설정하거나, 보안망이라면 오프라인 설치 파일 사용을 검토하세요.

🚀 이어서 알아두면 좋은 주제

이 글에서 다룬 managed 시나리오 다음으로는 unmanaged/기존 BAPI 래핑 시나리오, draft 활성화(Draft Handling), determination과 action 구현, 그리고 PurchaseRequest 승인 워크플로 같은 다단계 상태 전이 모델링을 권장합니다. ADT 단축키(Alt+F8 실행, Ctrl+1 Quick Fix)를 익히면 SE80 대비 생산성이 눈에 띄게 올라갑니다.

📚 함께 보면 좋은 자료

댓글 0

아직 댓글이 없습니다.