-
SAP CDS VDM 관련 어노테이션 정리SAP 2026. 5. 20. 18:41
SAP CDS VDM 관련 어노테이션 정리 SAP CDS VDM 관련 어노테이션 정리
1. VDM(Virtual Data Model) 어노테이션 개요
VDM 어노테이션은 CDS View의 계층적 역할과 의미론적 분류를 정의한다. SAP S/4HANA에서 CDS View는 역할에 따라
Basic → Composite → Consumption3계층 구조로 설계되며, VDM 어노테이션이 이 구조를 명시적으로 선언한다.DB Table / AMDP↓BASIC I_ (Interface View) — 단일 테이블 기반, 재사용 기초↓COMPOSITE 중간 조합 View — 여러 Basic View 조합, 비즈니스 로직↓CONSUMPTION C_ (Consumption View) — Fiori / OData 소비 목적💡 SAP 표준 네이밍 컨벤션:I_= Basic,C_= Consumption,P_= Private/Projection
2.
@VDM.viewType— View 계층 분류값 설명 대응 계층 #BASIC단일 DB 테이블 기반, 재사용 기초 View Interface View (I_) #COMPOSITE여러 Basic View 조합, 비즈니스 로직 포함 Composite View #CONSUMPTIONFiori / OData 등 소비 목적 View Consumption View (C_) #EXTENSION고객 네임스페이스 확장 View Extension View @VDM.viewType: #BASIC define view entity I_Material ... @VDM.viewType: #CONSUMPTION define view entity C_MaterialList ...
3.
@VDM.usageType— 사용 목적 및 품질 분류 ✔ 표준세 개의 하위 프로퍼티를 가지는 구조체형 어노테이션이다. View의 데이터 성격, API 품질 등급, 예상 데이터 크기를 함께 선언한다.
@VDM.usageType: { dataClass: #MASTER, serviceQuality: #A, sizeCategory: #S }3-1. dataClass — 데이터 성격 분류
값 설명 예시 #MASTER마스터 데이터 자재, 벤더, 고객 #TRANSACTIONAL트랜잭션 데이터 구매오더, 전표 #ORGANIZATIONAL조직 구조 데이터 플랜트, 구매조직 #CUSTOMIZING커스터마이징 데이터 코드값, 설정 테이블 #MIXED복합 성격 여러 성격이 혼합된 경우 3-2. serviceQuality — API 품질 등급
값 설명 #A최고 품질 — SAP가 성능·안정성을 보장하는 View #B일반 품질 #C낮은 품질 / 내부 전용 #PPrivate (외부 사용 불가) 3-3. sizeCategory — 예상 데이터 크기
값 설명 #XXS매우 소량 (수십 건 이하) #XS소량 #S소~중량 #M중량 #L대량 #XL초대량 (수억 건 이상, 트랜잭션 테이블 등) 💡sizeCategory는 HANA 쿼리 실행 계획 최적화 힌트로 활용된다. 트랜잭션 데이터(전표 등)는#XL로 선언하는 것이 일반적이다.❌@VDM.usage.type은 존재하지 않는 표기이다. 반드시@VDM.usageType(카멜케이스, 구조체형)으로 사용해야 한다.
4.
@VDM.lifecycle— View 생명주기@VDM.lifecycle.contract.type: #PUBLIC_LOCAL_API값 설명 #PUBLIC_LOCAL_API외부 공개 API — SAP 안정성 보장 #CUSTOMER_FACING고객 개발 허용 #DEPRECATED사용 중단 예정 #DEVELOPMENT_CONTRACT내부 개발 계약 ⚠️#PUBLIC_LOCAL_API로 선언된 SAP 표준 View는 직접 수정 불가 — Extension View 방식으로 확장해야 한다.
5.
@VDM.private— 내부 전용 표시@VDM.private: true값 설명 trueSAP 내부 전용 — 외부 소비 불가, 고객 CDS에서 직접 참조 금지 false기본값 — 외부 참조 허용
6.
@VDM.query.optional— 선택적 Associationassociation [0..1] to I_Vendor as _Vendor @VDM.query.optional: true on $projection.VendorId = _Vendor.Vendortrue로 설정하면 해당 Association을 소비 View에서 선택적으로 사용한다. 불필요한 JOIN을 줄여 성능 최적화에 활용된다.
7. 실전 조합 예시
@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #CHECK @EndUserText.label: '구매오더 소비 뷰' @VDM.viewType: #CONSUMPTION @VDM.lifecycle.contract.type: #PUBLIC_LOCAL_API @VDM.usageType: { dataClass: #TRANSACTIONAL, serviceQuality: #A, sizeCategory: #XL } @UI.headerInfo: { typeName: 'Purchase Order', typeNamePlural: 'Purchase Orders' } define view entity C_PurchaseOrder as select from I_PurchaseOrder { key PurchaseOrder, Vendor, PurchaseOrderDate }
8. VDM 어노테이션 요약 비교
어노테이션 형식 주요 역할 @VDM.viewType단일 값 View 계층 역할 분류 (BASIC / COMPOSITE / CONSUMPTION) @VDM.usageType구조체 (3개 하위 프로퍼티) 데이터 성격 + API 품질 + 크기 선언 @VDM.lifecycle.contract.type단일 값 공개 API 여부 및 안정성 계약 @VDM.privateBoolean 내부 전용 여부 @VDM.query.optionalBoolean Association의 선택적 사용 여부 'SAP' 카테고리의 다른 글
ABAP RAP + AMDP 정리 (0) 2026.05.25 SAP HANA SQL Functions 완전 정리 (Platform 2.0 SPS07) (0) 2026.05.20 CDS Table Function — implementedBy 메서드명 추출 (0) 2026.05.19 New ABAP 유용한 구문 정리 (0) 2026.05.15 AMDP SQLScript 날짜·시간 함수 (0) 2026.05.14