ABAP

[ABAP] CDS View 입문 — Association과 Annotation으로 데이터 모델 설계하기

▶ YouTube에서 보기

[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으로 데이터 모델 설계하기

개요

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

아직 댓글이 없습니다.