[ABAP] CDS View 입문 — Association과 Annotation으로 데이터 모델 설계하기
Moderator
· 2026. 4. 23.
· 조회 10
[ABAP] CDS View 입문 — Association과 Annotation으로 데이터 모델 설계하기
Moderator
· 2026. 4. 23.
· 조회 10
![[ABAP] CDS View 입문 — Association과 Annotation으로 데이터 모델 설계하기](https://btpstacks.com/uploads/89621e65-7c50-4110-ba24-942fbf942707.png)
개요
CDS(Core Data Services) View는 SAP ABAP에서 데이터 모델을 정의하는 핵심 기술입니다. 기존 SE11 Dictionary View와 달리, SQL 기반 문법으로 Association(관계), Annotation(메타데이터), 계산 필드를 선언적으로 정의할 수 있습니다. S/4HANA와 RAP(RESTful ABAP Programming)의 기반이 되므로, Clean Core 개발의 필수 역량입니다.

핵심 개념
- CDS View 유형 3가지 — Basic View(단일 테이블 매핑), Composite View(여러 View 조합), Consumption View(분석/리포팅용 최종 뷰). VDM(Virtual Data Model) 아키텍처에서 계층적으로 설계합니다.
- Association — 테이블 간 관계를
association [1..*] to구문으로 정의합니다. 기존 JOIN과 달리 "필요할 때만" 데이터를 가져오는 Lazy Loading 방식이며, 네이밍 규칙은 언더스코어 접두사(예:_PurchaseOrder)를 따릅니다. - Annotation —
@AbapCatalog,@AccessControl,@UI,@Semantics등의 어노테이션으로 뷰의 동작, 권한, UI 렌더링을 제어합니다. 코드 변경 없이 메타데이터만으로 Fiori 화면을 생성할 수 있습니다.
코드 예제
판매 오더(VBAK)와 아이템(VBAP)을 Association으로 연결하는 Basic CDS View 예제입니다.
@AbapCatalog.sqlViewName: 'ZV_SO_HDR'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order Header View'
@VDM.viewType: #BASIC
define view Z_I_SalesOrderHeader
as select from vbak
association [1..*] to Z_I_SalesOrderItem as _Item
on $projection.SalesOrder = _Item.SalesOrder
{
key vbeln as SalesOrder,
erdat as CreationDate,
erzet as CreationTime,
ernam as CreatedBy,
auart as SalesOrderType,
vkorg as SalesOrganization,
netwr as NetAmount,
waerk as Currency,
// Association - 필요시에만 로딩
_Item
}
아이템 뷰에 UI Annotation을 추가한 Consumption View 예제입니다.
@AbapCatalog.sqlViewName: 'ZV_SO_ITEM'
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order Item View'
@VDM.viewType: #BASIC
@UI.headerInfo: {
typeName: 'Sales Order Item',
typeNamePlural: 'Sales Order Items'
}
define view Z_I_SalesOrderItem
as select from vbap
{
@UI.lineItem: [{ position: 10 }]
key vbeln as SalesOrder,
@UI.lineItem: [{ position: 20 }]
key posnr as SalesOrderItem,
@UI.lineItem: [{ position: 30 }]
matnr as Material,
@Semantics.quantity.unitOfMeasure: 'OrderUnit'
kwmeng as OrderQuantity,
vrkme as OrderUnit,
@Semantics.amount.currencyCode: 'Currency'
netwr as NetAmount,
waerk as Currency
}
실무 팁
- 성능 — Association은 path expression으로 사용될 때만 JOIN이 발생합니다. 불필요한 필드까지
_Item.*로 가져오면 성능이 저하되니, 필요한 필드만 명시하세요. - 권한 제어 —
@AccessControl.authorizationCheck: #CHECK를 설정하면 DCL(Data Control Language)로 행 단위 권한을 제어할 수 있습니다. 프로덕션에서는 반드시 활성화하세요. - 네이밍 — SAP VDM 규칙: Interface View는
Z_I_, Consumption View는Z_C_접두사를 사용합니다. - ADT 활용 — Eclipse ADT에서
Ctrl+1로 Quick Fix,F2로 Element Info를 확인하면 개발 속도가 크게 향상됩니다.

더 읽어볼 자료
⚠️ 비공식 콘텐츠 안내
본 게시글은 btpstacks.com의 독립 학습 콘텐츠이며 SAP SE와 무관합니다. 공식 문서는 help.sap.com을 참고하세요.
SAP, ABAP, SAP BTP, SAPUI5, SAP Fiori는 독일 및 기타 국가에서 SAP SE의 상표 또는 등록상표입니다.
댓글 0
아직 댓글이 없습니다.