BTP
CDS & Data Modeling
#SAP#CDS#Data Modeling
2025년 3월 25일
CDS에서 데이터를 처리하는 방식과 어떤 다양한 기능을 제공하는지 다루어 보겠습니다.
What's Inside
1. CDS
1.1. CDS란?
1.1.1. CDS 정의
Core Data Services 의 약자로
S/4HANA 환경에서 데이터 모델링을 효율적으로 수행할 수 있도록 지원하는 강력한 기술입니다.

Eclipse용 ABAP 개발 도구 (ADT)는 최신 ABAP 개발을 위한 Eclipse 기반 개발 환경입니다.
1.1.2. CDS 특징
-
Annotations
CDS 데이터 모델에 도메인별 메타데이터와 텍스트 레이블을 추가하여
다른 구성 요소(UI, 분석, OData 서비스 등)에서 쉽게 활용할 수 있도록 강화됩니다. -
접근 제어
CDS 역할을 통해 데이터 모델의 접근 제어를 선언적으로 정의할 수 있습니다.
이는 한번 선언하면 어디에서나 재사용 가능합니다. -
내장 함수 및 표현식 세트
계산된 필드를 정의하기 위해 많은 표현식과 내장 함수를 제공합니다.
이 계산들은 Code-to-Data 원칙에 따라 데이터베이스에서 처리됩니다. -
고급 관계 모델링
CDS는 관계 모델링을 위한 고급 기능을 제공하며,
쉽게 재사용할 수 있는 관계를 모델링할 수 있습니다. -
재사용 기능
CDS 유형(Types)과 CDS 측면(Aspects)을 통해 강력한 재사용 기능을 제공합니다.
-
내장된 확장 기능
CDS 엔터티 확장을 통해 CDS 엔터티에 새로운 필드를 추가할 수 있습니다.
메타데이터 확장을 통해 추가 주석을 추가할 수 있습니다. -
OLTP와 OLAP 융합
실시간 트랜잭션 처리 (OLTP: Online Transaction Processing)와
복잡한 데이터 분석 (OLAP: Online Analytical Processing)을
융합하여 통합된 데이터 모델을 지원합니다.
1.2. Data-to-Code vs. Code-to-Data
Data-to-Code와 Code-to-Data를 비교해보겠습니다.

Code-to-Data = Code Pushdown
그림을 보면 Data-to-Code를 나타내는 왼쪽 삼각형은 위쪽이 넓죠.
어플리케이션 서버에서 데이터를 처리한다는 뜻입니다.
반대로 오른쪽 삼각형은 아래쪽이 넓죠.
데이터베이스에서 데이터를 처리하는 Code-to-Data입니다.
이게 Data-to-Code와 Code-to-Data의 차이점인데요.
Data-to-Code 방식에서는 데이터를 데이터베이스에서 가져와 애플리케이션 서버에서 처리합니다.
이로 인해 서버 부하가 증가하고 성능이 저하될 수 있습니다.
반면, Code-to-Data (Code Pushdown) 방식에서는 데이터를 데이터베이스에서 직접 처리하여
데이터 전송을 줄이고 SAP HANA의 병렬 처리 기능을 활용해 성능을 최적화합니다.
Code-to-Data 방식의 주요 장점:
- 빠른 데이터 처리: 데이터베이스의 연산 능력을 활용하여 속도 개선
- 데이터 전송량 감소: 불필요한 데이터 이동을 최소화하여 병목 현상 방지
- 대용량 데이터 처리 최적화
예를 들어, 애플리케이션 서버에서 루프와 SUM 연산을 수행하는 대신,
CDS 뷰에서 직접 집계 함수(SUM)를 활용할 수 있습니다.
이러한 Code Pushdown 기법을 적용하면 시스템 성능과 확장성을 크게 향상시킬 수 있습니다.
1.3. ABAP CDS vs. ABAP SQL
ABAP CDS와 ABAP SQL은 기능적으로 유사하지만 다양한 차이점을 가지고 있는데요.
ABAP CDS와 ABAP SQL은 서로 보완적인 관계입니다.
주요 차이점은 ABAP CDS가 영속적인 데이터 모델을 구축하는 데 사용되어
중앙 저장소에 저장되고 글로벌하게 재사용될 수 있다는 점입니다.
반면, ABAP SQL은 단일 쿼리용으로 사용되며 재사용 성격이 없습니다.
| 기능 | ABAP SQL | ABAP CDS |
|---|---|---|
| 애드혹 / 단일 쿼리 | ✅ 지원 (즉석에서 생성되는 단일 쿼리) | ❌ (영속적 데이터 모델을 기반으로 함) |
| 고급 관계 모델링 | 제한적 | ✅ 지원 (ASSOCIATION, JOIN 등) |
| 도메인 특화 메타데이터 | ❌ | ✅ 지원 (Annotations을 통한 메타데이터 추가) |
| 풍부한 내장 함수 집합 | 제한적 (기본적인 SQL 함수들) | ✅ 지원 (SAP HANA 함수 및 사용자 정의 함수 포함) |
| 재사용성 | ❌ | ✅ 지원 (영속적 데이터 모델을 생성하여 재사용 가능) |
| 수정 없는 확장성 | ❌ | ✅ 지원 (추가적인 모델 정의 가능) |
| 선언적 접근 제어 | ❌ | ✅ 지원 (CDS의 ACCESS CONTROL 기능) |
| OData로의 원활한 매핑 | ❌ | ✅ 지원 (OData 서비스로의 매핑 용이) |
| 고급 SAP HANA 기능 접근 | ❌ | ✅ 지원 (SAP HANA 기능에 대한 원활한 접근) |
2. CDS Objects for Data Modeling
2.1. CDS 유형
2.1.1. CDS Object 유형
CDS 객체는 ABAP CDS의 저장소(repository) 객체로,
ABAP에서 데이터 모델을 정의하고 다양한 방식으로 확장할 수 있도록 해줍니다.
CDS 객체에는 여러 가지 종류가 있지만,
이번 포스팅에서는 CDS 엔터티(CDS Entity)와 CDS 엔터티 버퍼(CDS Entity Buffer)를 중점적으로 살펴보겠습니다.
먼저, CDS 엔터티는 데이터 모델링을 위한 객체입니다.
다음으로, CDS 엔터티 버퍼는 자주 조회되는 데이터를 매번 데이터베이스에서 가져오는 것이 아니라,
미리 저장해둔 데이터를 재사용하여 시스템 성능을 높이는 기능을 제공합니다.
표를 보면, 각 CDS 객체가 고유한 Technical Object Type을 가지고 있다는 점을 확인할 수 있습니다.
| CDS 객체 이름 | 목적 | 기술적 객체 유형: Technical Object Type |
|---|---|---|
| CDS 엔터티 (CDS Entity) | 데이터를 정의하고 관리하는 기본 구조 (데이터 모델) | DDLS |
| CDS 사용자 정의 타입 (CDS User-Defined Type) | 새로운 데이터 타입을 직접 정의 | DRTY |
| CDS 사용자 정의 함수 (CDS User-Defined Function) | 직접 만든 함수를 정의하여 특정 계산 수행 | DSFD |
| CDS 어노테이션 정의 (CDS Annotation Definition) | 데이터에 추가 설명을 붙이는 역할 | DDLA |
| CDS 역할 (CDS Role) | 접근 권한을 설정하는 역할 | DCLS |
| CDS 엔터티 버퍼 (CDS Entity Buffer) | 자주 사용되는 데이터를 빠르게 조회할 수 있도록 메모리에 저장 | DTEB |
| CDS 메타데이터 확장 (CDS Metadata Extension) | 기존 데이터 정의에 추가 정보를 덧붙이는 기능 | DDLX |
2.1.2. CDS Entity 유형
CDS에서는 다양한 엔터티 타입(Entity Type)을 제공하여 여러 방식으로 데이터를 모델링할 수 있습니다.
오늘은 먼저 테이블 엔터티, 뷰 엔터티, 프로젝션 뷰에 대해 좀 더 자세히 알아보겠습니다.
Table Entity는 데이터베이스 테이블을 정의하는 엔터티입니다.
ABAP에서 관리되는 객체로, 데이터를 저장하는 역할을 합니다.
View Entity는 데이터를 조회하는 뷰를 정의하는 엔터티로 SQL 쿼리를 단순화할 수 있습니다.
Projection View는 기존 데이터 소스에서 특정 데이터를 선택하여 새로운 뷰로 투영하는 방법입니다.
이 접근 방식은 복잡한 데이터 소스에서 필요한 부분만 추출하여 사용할 때 유용합니다.
| CDS 엔터티 유형 | 정의 | 사용 사례 |
|---|---|---|
| 테이블 엔터티 (Table Entity) | define table entity... | ABAP CDS에서 데이터베이스 테이블 정의 (ABAP 관리 객체) |
| 뷰 엔터티 (View Entity) | define view entity... as select from... | 데이터 선택을 위한 뷰 정의 |
| 프로젝션 뷰 (Projection View) | define view entity... as projection on... | 특정 서비스의 데이터 모델 조정 |
| 테이블 함수 (Table Function) | define table function... | AMDP(ABAP Managed Database Procedure) 테이블 함수를 활용한 데이터 선택 (SQLScript 사용) |
| 외부 엔터티 (External Entity) | define external entity... | 외부 데이터베이스 시스템의 데이터 검색 |
| 계층 구조 (Hierarchy) | define hierarchy... | SAP HANA의 네이티브 계층 기능 활용 |
| 커스텀 엔터티 (Custom Entity) | define custom entity... | SADL 기반 OData 서비스에서 ABAP 기반 데이터 선택 수행 |
| 추상 엔터티 (Abstract Entity) | define abstract entity... | 구조 모델링 (ABAP SQL에서 직접 사용되지 않음) |
2.2. Annotation
CDS 주석은 ABAP SQL의 구문 기능을 넘어서서, CDS 객체에 메타데이터를 추가하는 중요한 역할을 합니다.
주석은 @ 기호를 사용하여 CDS 객체의 특정 위치에 지정할 수 있습니다.
2.2.1. Annotation 구조
CDS 주석은 주요 주석과 하위 주석, 주석값으로 나눠집니다.

예를 들어, 위 코드에서
EndUserText는 주요 주석이고,
label은 하위 주석,
Course Entity은 그 값에 해당합니다.
2.2.2. Annotation 유형
주석의 유형으로는 크게 두가지로 나눌 수 있습니다.
-
ABAP 주석(ABAP Annotations)
ABAP 주석은 CDS 객체의 기술적 및 의미적 속성을 정의합니다.
-
프레임워크 특정 주석(Framework-Specific Annotations)
프레임워크별 주석은 OData, UI, Analytics와 같은 다양한 소프트웨어 구성 요소에서
CDS 객체에 대한 특정 메타데이터를 제공합니다.
스코프 범위에 따라 구분한 주석의 종류는 다음과 같습니다.
| 주석 유형 | 범위 | 설명 |
|---|---|---|
| View 주석 | #VIEW | CDS 뷰 엔터티 및 CDS 프로젝션 뷰에 대한 주석입니다.DEFINE VIEW ENTITY 문 앞에 배치됩니다. |
| Element 주석 | #ELEMENT | CDS 요소에 대한 주석입니다. 해당 요소 앞에 배치됩니다. |
| Parameter 주석 | #PARAMETER | CDS 객체의 파라미터에 대한 주석입니다. 해당 파라미터 앞에 배치됩니다. |
| Entity 주석 | #ENTITY | CDS 엔터티의 헤더 주석입니다.DEFINE ... 문 앞에 배치됩니다. |
2.2.3. Annotation 전파 및 억제
전파 (Propagation)
ABAP 데이터 모델에서 요소(Element) 및 매개변수(Parameter) 주석(Annotation)은
자동으로 상위 엔터티로 전파됩니다.
상위 엔터티에서는 하위 엔터티에서 정의된 주석 값을 새로운 값으로 재정의할 수 있습니다.
또한, 메타데이터 확장(Metadata Extensions)을 활용하면
CDS 엔터티 소스 코드에서 정의된 주석보다 우선적으로 적용됩니다.
억제 (Suppressing)
특정 기법을 사용하면 주석의 자동 전파를 차단하거나 억제할 수 있으며,
이를 통해 하위 수준에서 정의된 주석이 상위 엔터티에 자동으로 적용되지 않도록 설정할 수 있습니다.
2.3. Database Table
2.3.1. Database Table 생성 절차
물리적 데이터베이스인 S/4 HANA에 데이터를 저장할 수 있도록 합니다.
-
ABAP 프로젝트의 패키지를 선택
프로젝트 탐색기에서 관련 패키지 노드를 선택합니다.
-
CDS 데이터 정의 생성 마법사 실행
컨텍스트 메뉴에서 새로 만들기 → Dictionary → Database Table 선택

-
테이블 정의 정보 입력
프로젝트, 패키지, 테이블 이름, 설명을 입력합니다.

-
전송 요청 할당
테이블 정의가 전송 요청(Transport Request)과 연결됩니다.
필요 시 전송 요청을 새로 생성하거나 기존 요청을 선택합니다.
-
생성 완료
데이터베이스 테이블이 선택한 패키지 내에 생성됩니다.
ABAP 저장소(Repository)에 비활성 테이블 정의가 저장됩니다.
2.3.2. Database Table 속성
데이터베이스 테이블의 주요 속성에 대해 알아보겠습니다.

-
키 필드
KEY를 사용하여 기본 키를 정의합니다.
기본 키는 테이블의 맨 처음에 배치해야 합니다.
기본 키가 없는 테이블은 성능에 문제가 있을 수 있습니다. -
NULL 값
NULL을 사용하여 필드에 NULL 값을 저장할 수 있습니다.
이 값은 조건, 집계 함수, 정렬에 영향을 미칠 수 있습니다. -
테이블 확장성
@AbapCatalog.enhancement.category테이블이 확장될 수 있는지 여부와 방법을 정의합니다.
옵션 값 설명 #NOT_EXTENSIBLE확장 불가능 #EXTENSIBLE_CHARACTER문자형(Character-like) 필드로 확장 가능 #EXTENSIBLE_CHARACTER_NUMERIC문자형 또는 숫자형(Numeric) 필드로 확장 가능 #EXTENSIBLE_ANY모든 유형으로 확장 가능 -
테이블 카테고리
@AbapCatalog.tableCategory테이블의 유형을 정의합니다.
예를 들면, 표준 테이블 또는 임시 테이블이 있습니다.옵션 값 설명 #TRANSPARENT투명 테이블 (Transparent Database Table)
일반적인 데이터베이스 테이블이며,
SAP HANA에 물리적으로 존재합니다.
- ABAP 개발자가 직접 데이터를 저장, 수정, 조회할 수 있습니다.
- ABAP 개발자가 직접 데이터를 저장, 수정, 조회할 수 있습니다.
- 예: 직원 정보, 거래 내역을 저장하는 테이블#GLOBAL_TEMPORARY글로벌 임시 테이블 (Global Temporary Table)
실행 중에만 데이터를 유지하며,
세션(Session) 종료 시 데이터가 자동 삭제됩니다.
- 테이블 구조는 유지되지만, 데이터는 영구적으로 저장되지 않음.
- 일반적으로 일시적인 계산 결과를 저장할 때 사용합니다.
- 예: 보고서 생성 중 임시 데이터를 저장하는 테이블 -
데이터 유지 관리
@AbapCatalog.dataMaintenanceCRUD 작업이 허용되는지, 아니면 테이블이 읽기 전용이거나 제한된 수정만 가능한지 지정합니다.
옵션 값 설명 #RESTRICTED특정 조건에서만 데이터 수정 가능
- 데이터 변경이 일부 제한될 수 있으며,
특정 트랜잭션 또는 설정을 통해서만 유지 관리 가능함.#NOT_ALLOWED테이블 직접 수정 불가 (프로그램에서만 가능) #ALLOWED데이터 유지 관리 CRUD(생성, 읽기, 수정, 삭제) 가능 #DISPLAY조회만 가능, 데이터 변경 불가
- 데이터 조회는 가능하지만, 수정이나 삭제는 불가능함.
- 일반적으로 로그 테이블이나 감사(Audit) 데이터 테이블에 사용됨. -
배달 클래스
@AbapCatalog.deliveryClass데이터가 어떻게 저장되고 전송되는지를 정의합니다.
옵션 값 설명 #A애플리케이션 테이블 (마스터 데이터 및 트랜잭션 데이터 저장) #C고객 테이블 (고객이 입력한 데이터 저장) #L로컬 테이블 (임시 데이터 저장) #GSAP 업데이트로부터 보호되는 커스터마이징 테이블 #ESAP와 고객이 별도의 키 영역을 가지는 제어 테이블 #SSAP에서만 관리하며, 변경 시 수정이 발생하는 시스템 테이블 #W별도의 TR(전송 객체)에 의해 운반될 수 있는 시스템 테이블
2.4. Data Definition
2.4.1. Data Definition 생성 절차
아까 설명드린 데이터베이스 테이블 만드는 절차와 유사한데 조금의 차이가 있습니다.
-
ABAP 프로젝트의 패키지를 선택
프로젝트 탐색기에서 관련 패키지 노드를 선택합니다.
-
CDS 데이터 정의 생성 마법사 실행
컨텍스트 메뉴에서 새로 만들기 → 기타 → Core Data Services → 데이터 정의 선택

-
데이터 정의 정보 입력
프로젝트, 패키지, 데이터 정의 이름, 설명을 입력합니다.

-
참조 객체 선택 (선택 사항)
기존 CDS 엔터티나 데이터베이스 테이블을 참조할 수 있습니다.
-
전송 요청 할당
데이터 정의가 전송 요청(Transport Request)과 연결됩니다.
(**DDLS)**를 볼 수 있듯이, 이는 아까 설명한 기술 객체 유형을 의미합니다.
-
코드 템플릿 선택 (선택 사항)
기본 제공 템플릿을 선택하거나, 직접 생성한 템플릿을 사용할 수 있습니다.
마지막으로 사용한 템플릿이 기본값으로 설정됩니다.
-
생성 완료
선택한 패키지에 비활성 데이터 정의가 생성됩니다.
2.4.2. Data Definition 템플릿
데이터 정의를 생성하는 과정과 생성 후 둘 다 템플릿을 선택할 수 있습니다.


3. CDS Relationship Modeling
3.1. Association
3.1.1.Association이란?
ABAP CDS에서 Association은 엔터티 간의 구조적 관계를 정의하는 기능입니다.
이는 JOIN과 비슷하지만, 엔터티 정의 내에서 미리 선언된 형태로 추가됩니다.
Association은 필요할 때만 내부적으로 JOIN으로 변환되는 개념을 사용합니다.
이를 join-on-demand라고 합니다.
Association의 장점
- 재사용성: 동일한 Association을 여러 엔터티에서 재사용할 수 있습니다.
- 가독성: 코드가 직관적이고 유지보수가 용이합니다.
- 성능 최적화: 필요할 때만 JOIN이 실행되므로 불필요한 연산을 방지합니다.
3.1.2. Join vs. Association
이제 JOIN과 어소시에이션을 비교해보겠습니다.
-
즉시 실행
JOIN은 실행 시 항상 JOIN이 발생하지만, 어소시에이션은 필요할 때만 실행됩니다.
즉, 어소시에이션은 성능을 최적화하는 방식입니다. -
코드 가독성
JOIN은 SQL 문이 복잡할 수 있는데 반해,
어소시에이션은 경로 표현식(Path Expression)을 사용하여 직관적이고 코드 가독성이 좋습니다. -
성능 최적화
JOIN은 모든 데이터를 로드하는 반면,
어소시에이션은 데이터를 먼저 필터링하고 필요한 경우에만 JOIN을 실행하여 성능을 최적화합니다.
3.1.3. Association 사용

-
카디널리티 설정
카디널리티는 두 엔티티 간의 행 관계를 정의합니다.
선택 사항이지만 관계를 문서화하는 데 유용합니다.
예를 들어,[0..*]는 "0개 이상"을 의미합니다. -
닉네임(별칭) 설정
AS키워드를 사용하여 연결된 엔티티에 별칭을 설정하여 코드 가독성을 높일 수 있습니다. -
Association 노출
다른 엔티티가 사용할 수 있도록 Association을 노출하려면 뷰의 요소 목록에서 이를 선언하면 됩니다.
3.1.4. Association 노출
어소시에이션이 노출되었을 때 발생하는 일은?
어소시에이션이 노출되면 소비자는 연결된 대상 엔티티의 모든 구성 요소에 접근할 수 있습니다.
그러나 즉시 조인은 실행되지 않습니다.
조인은 소비자가 연결된 엔티티의 필드를 실제로 접근할 때만 발생합니다.
이 방식은 불필요한 SQL 조인을 방지하여 성능을 최적화합니다.
exposed association을 사용한 코드를 보면 노란색 박스와 같이 JOIN이 포함되지 않은 SQL 뷰가 생성됩니다.

데이터베이스에서 발생하는 일은?
많은 어소시에이션이 있더라도 성능에 영향이 없으며, 조인은 실제로 필요할 때만 발생합니다.
3.2. Composition
Composition은 부모-자식 관계를 모델링하는 데 사용되는 CDS Association의 특별한 형태입니다.
Composition에서 부모 엔터티가 삭제되면 자식 엔터티도 삭제됩니다.
Composition에는 두 가지 종류의 연관 관계가 있습니다.

-
To-Child Association
COMPOSITION [카디널리티] 자식_엔터티 AS _자식연관부모 엔터티에서 자식 엔터티로의 연결입니다.
부모는 여러 자식을 가질 수 있지만, 각 자식은 정확히 하나의 부모만 가질 수 있습니다.
자식 연관에서 카디널리티를 설정합니다. -
To-Parent Association
ASSOCIATION TO PARENT 부모_엔터티 AS _부모연관 ON 조건자식 엔터티에서 부모 엔터티로의 연결입니다.
자식이 존재하려면 부모가 존재해야 하므로, 부모 연관이 먼저 정의되어야 합니다.
4. Virtual Data Model
4.1. VDM이란?
VDM (가상 데이터 모델, Virtual Data Model)
VDM은 S/4HANA 시스템에서 데이터를 모델링하는 표준화된 접근 방식입니다.
VDM의 주요 특징
- 구조화된 데이터 표현
SAP HANA 데이터베이스 뷰를 기반으로 하며, 명확하고 일관된 모델링 가이드라인을 따릅니다. - CDS 뷰 기반
VDM은 Core Data Services(CDS) 뷰로 구현되며,
표준화된 구조와 명명 규칙을 제공하여 관리 및 재사용이 용이합니다.
4.2. VDM 계층 구조
VDM은 세 가지 주요 계층으로 구성되며, 각각 고유한 역할을 수행합니다.
데이터베이스 테이블 ↔ 기본 뷰 ↔ 복합 뷰 ↔ 소비 뷰 ↔ UI
-
기본 뷰 (Basic View, Interface View)
단일 데이터베이스 테이블이나 소스를 기반으로 한 가장 기초적인 레이어
-
복합 뷰 (Composite View)
여러 개의 기본 뷰를 결합하여 더 의미 있는 데이터를 생성
-
소비 뷰 (Consumption View)
Fiori 앱, 리포트, OData 서비스 등에서 직접 사용되는 최종 레이어로, 비즈니스 활용이 가능하도록 데이터를 제공
4.2.1. Basic View

기본 뷰는 VDM 계층 구조에서 가장 아래에 위치하며 데이터베이스 테이블을 직접 조회하여 가공되지 않은 원본 데이터를 제공합니다.
데이터베이스 테이블에서 가공되지 않은 원본 데이터를 직접 가져옵니다.
복합 뷰(Composite View) 및 소비 뷰(Consumption View)의 기반이 됩니다.
4.2.2. Composite View

복합 뷰는 여러 개의 기본 뷰(Basic Views)를 결합하여 보다 상세한 정보를 제공하는 계층입니다.
비즈니스 로직을 적용하여 데이터를 가공하며,
중복 데이터를 제거하고 관계형 데이터 모델을 구성합니다.
4.2.3. Consumption View

소비 뷰는 VDM 계층 구조에서 최상위 레이어로, 최종 사용자나 애플리케이션에서 직접 활용할 수 있도록 가공된 데이터를 제공합니다.
애플리케이션 또는 최종 사용자가 바로 활용할 수 있도록 정제된 데이터를 제공합니다.
값 도움(Value Help) 정의 및 메타데이터 주석과 같은 고급 기능을 포함합니다.
📌 마무리
CDS, Data Modeling 하는 방법과 다양한 기능들, 그리고 VDM 3계층 까지 알아보았습니다.
CDS Data Modeling에 이어 다음 포스팅은 RAP에 관해 더 알아보는 시간을 가지겠습니다.
참고 및 이미지 출처: SAP Help
최근 게시글
