관리 메뉴

0v0__DEV

[00] RAP_CDS VIEW 의 의미와 진화 과정 본문

RAP

[00] RAP_CDS VIEW 의 의미와 진화 과정

0v0_삐약 2026. 5. 21. 14:41
728x90

RAP 에 대해 본격적으로 공부를 시작하기에 앞서

VIEW와 CDS VIEW 의 진화과정과 역할에 대해 알아보겠습니다 

 

VIEW 는 간단하게 말하자면, 가상 테이블입니다 

데이터가 물리적으로, 실제로 저장되는 진짜 테이블과는 다르죠 (ex. BKPF, BSEG) 

VIEW는 데이터를 직접 가지고 있지는 않지만, 쓰는 사람 입장에서는 테이블과 동일합니다 

 

이유는, 뷰는 '어떤 테이블을 어떻게 엮어서 보여줄지' 에 대한 규칙만 저장되어 있을 뿐 데이터를 저장하고 있지는 않죠 

SELECT FROM VIEW를 실행하면, 정해진 규칙에 따라 데이터가 출력됩니다 

 

이처럼 

자주 쓰는 복잡한 SELECT 쿼리(조인, 필터링 등)를 쉽게 재사용하기 위해 규칙을 저장해 둔 것을 'VIEW' 라고 하고 

기본 뷰'의 개념에다가, 복잡한 계산식도 넣고 화면에 그릴 UI 설정까지 넣을 수 있도록 업그레이드한 것을 'CDS View' 입니다.

 

[ CDS VIEW도 진화 과정 ] 이 있습니다 

구분 DDIC-based CDS View (SQL 뷰) CDS View Entity (엔티티 뷰)  CDS Custom Entity (커스텀 엔티티 뷰)
구문 DEFINE VIEW
(@AbapCatalog.sqlViewName)
DEFINE VIEW ENTITY  DEFINE CUSTOM EITNTY 
특징  ABAP 7.40에서 처음 도입된 구형 방식 최신 ABAP 및 RAP 개발의 Standard  DB 테이블이나 다른 CDS 뷰에서
SELECT 를 통해 데이터를 읽어오지 못하는 특수한 상황에 사용 
내용  뷰 생성 시 DB 레벨의 DDIC SQL View 와 ABAP 레벨의 CDS Entity 동시 생성 
-> 관리 포인트가 두 개로 나뉨 
-> 사용 지양 
활성화 시 Background 에서
DDIC SQL View 미생성 
-> Dictionary 에CDS 엔티티로만 존재
-> 활성화 속도 빠름 , 런타임 성능 우수 
-> RAP 프로젝트에서는
기본적으로 Entity View 사용 
데이터 구조만 정의, 실제 데이터는 연결된 ABAP 클래스를 통해 가져옴 
->RAP 환경에서 외부 API 결과를 화면에 뿌려주거나, 단순 쿼리로 해결할 수 없는 복잡한 가공 로직이 들어갈 때 필수 사용 
    SAP DB 읽을 때 사용 
-> 프레임워크가 페이징/필터/정렬 자동 처리
외부 API 연동 등 DB 쿼리로 해결 불가 
-> 페이징/필터 등 모든 데이터 제어 과정을 ABAP 클래스에서 직접 구현 필요 

 

 

[ Projection View ]

현재 RAP 프레임워크에서는 역할을 세분화하여 Basd View(CDS View) 와 Projection View 두 가지를 사용합니다 

 

CDS Projection View는 원본 데이터(CDS View)를 특정 UI 나 서비스의 목적에 맞게 포장한 것으로, 

구문은 아래와 같이 사용합니다. 

DEFINE VIEW ENTITY ZC_Invoice AS PROJECTION ON ZI_Invoice

( ZI_Invoice 가 원본 데이터, ZC_Invoice 가 프로젝션 뷰 : 필요한 필드만 Select 하여 정의 )

 

 


 

* CDS Custom Entity (커스텀 엔티티) 보충 설명 

- Custom Entity는 DB 테이블을 읽지 않는 껍데기(가짜 뷰) 입니다 

- 언제 사용되나요? 

  1. 외부 API 데이터를 Fiori 화면에 보여줄 때
    예시 : 한국은행 사이트에서 환율 정보를 가져온다 -> 해당 데이터는 SAP 테이블에 없어서 CDS 뷰로 만들 수 없다 
  2. 타 시스템 데이터를 RFC로 가져올 때
  3. 복잡하게 데이터를 가공해야할 때 

 

- 어떻게 생성하나요? 

  • 1) Custom Entity정의 : 구조 선언
@EndUserText.label: '실시간 환율 커스텀 엔티티'
@ObjectModel.query.implementedBy: 'ABAP:ZCL_EXCHANGE_RATE_API' /* 핵심: 이 클래스가 데이터를 채움 */
define custom entity ZCE_EXCHANGE_RATE
{
  key CurrencyCode : waers;
      ExchangeRate : ukurs_curr;
      FetchDate    : datum;
}

 

  • 2. ABAP 클래스 구현 (데이터를 공급) 

 : ZCL_EXCHANGE_RATE_API 클래스 내부에 IF_RAP_QUERY_PROVIDER 를 구현 

-> Fiori 화면에서 Custom Entity 를 호출하면 백그라운드에서 아래 로직이 실행됨 

" (개념적인 로직 흐름)
METHOD if_rap_query_provider~select.
  DATA: lt_result TYPE TABLE OF zce_exchange_rate.

  " 1. 외부 은행 API 호출 (HTTP Request)
  " 2. JSON 결과 파싱
  " 3. lt_result 인터널 테이블에 데이터 Append 및 정리
  
  " 4. 최종 데이터를 RAP 프레임워크에 전달
  io_response->set_data( lt_result ).
ENDMETHOD.

 

=> 결과적으로, Custom Entity View는
RAP 환경에서 외부 데이터나 복잡한 ABAP 로직 결과를 OData 서비스처럼 내보내기 위한 '출구' 역할을 합니다 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90