1. Defining Domain Models
CDS Models의 기본 원칙
모델 기반 접근법 이해
이번에는 모델 기반 접근법에 대해 설명하겠습니다. 대부분의 프로젝트는 도메인의 필수 객체를 해당 도메인 모델로 캡처하는 것으로 시작합니다.
도메인 모델
도메인 모델은 비즈니스 엔티티의 기본 구조, 속성, 그리고 그들 간의 관계를 정의합니다. 이 모델은 특정 서비스 구현에 묶이지 않고 핵심 데이터 구조를 캡처합니다. 따라서, 도메인 모델은 데이터베이스에 배포되는 지속성 모델의 기초가 되며, 데이터 접근을 위한 API facades(정면) 역할을 하는 서비스의 기본 모델로도 사용됩니다.
서비스/API 모델
서비스 또는 API 모델은 외부 소비자나 프론트엔드 애플리케이션이 상호작용하는 인터페이스, 작업, 엔드포인트를 정의합니다. 실제 비즈니스 로직의 구현은 서비스에 의해 나타나며, 서비스는 데이터를 서비스/API 모델에 정의된 대로 처리하고 변환합니다. 서비스는 도메인 모델에 기반하여 데이터베이스에서 데이터에 접근하고 이를 표현하며, 외부 시스템이나 애플리케이션이 기본 데이터와 상호작용할 수 있도록 합니다.
모델 기반 접근법의 장점
이러한 모델 기반 접근법은 다음과 같은 장점을 제공합니다:
- 유연성: 도메인 모델과 서비스 모델이 분리되어 있기 때문에, 각 모델을 독립적으로 수정하거나 확장할 수 있습니다.
- 재사용성: 도메인 모델은 여러 서비스에서 공유될 수 있으며, 이는 코드의 중복을 줄이고 유지보수를 용이하게 합니다.
- 가독성 및 유지보수성: 모델을 통해 시스템의 구조와 논리를 명확히 이해할 수 있으며, 이는 유지보수와 확장을 쉽게 만듭니다.
이러한 모델 기반 접근법은 CAP 프레임워크에서 중요한 역할을 하며, 개발자들이 효율적으로 비즈니스 애플리케이션을 설계하고 구현할 수 있도록 돕습니다.
CDS 모델의 소스 및 타겟 형식

이번에는 CDS 모델의 소스와 타겟 형식에 대해 설명하겠습니다. CDS 모델은 Core Schema Notation (CSN)으로 표현되며, 모든 모델 처리 및 컴파일 단계는 CSN 객체를 기반으로 작동합니다.
CSN 모델의 소스
CSN 표기법으로 작성된 모델은 다양한 소스에서 생성될 수 있습니다. 이는 .json 또는 .yaml 파일에서 읽을 수 있으며, 런타임에 코드에서 동적으로 생성될 수도 있습니다.
CSN 모델의 타겟 형식
CSN 표기법으로 작성된 모델은 다양한 타겟 형식으로 컴파일될 수 있습니다. 예를 들어:
- OData/EDM 인터페이스: CDS 모델은 OData 서비스로 컴파일되어 외부 시스템과 상호작용할 수 있는 인터페이스를 제공할 수 있습니다.
- SQL 데이터베이스의 지속성 모델: CDS 모델은 SQL DDL 문으로 컴파일되어 SQL 데이터베이스에 배포될 수 있습니다.
.cds 파일에서 모델 정의
CDS 모델은 주로 .cds 파일에 정의되며, 이 파일에서는 CDS Definition Language (CDL)와 CDS Query Language (CQL)가 사용됩니다.
- CDL (CDS Definition Language): 이는 인간이 읽기 쉬운 구문으로 모델을 정의하는 데 사용됩니다. CDL은 도메인 모델, 서비스 모델 등을 선언적으로 정의하는 데 사용됩니다.
- CQL (CDS Query Language): 이는 SQL의 확장으로, CDS 모델에 대한 쿼리를 작성하는 데 사용됩니다.
.cds 파일의 내용은 CAP에 의해 CSN으로 파싱됩니다. 이 과정에서 모델은 CSN 객체로 변환되어 다양한 타겟 형식으로 컴파일될 수 있습니다.
도메인 엔티티
도메인 엔티티는 구조화된 타입으로, 이름이 있는 요소로 구성되어 있으며, CRUD 작업을 통해 읽고 조작할 수 있는 데이터 세트를 나타냅니다. 엔티티는 지속성 모델로 변환될 때 테이블이 됩니다.
- 엔티티 이름 규칙: 엔티티 이름은 대문자로 시작하고 복수형을 사용하는 것이 좋습니다(예: Authors). 요소는 소문자로 시작해야 합니다(예: name).
- 기본 데이터 타입: CDS는 몇 가지 기본 데이터 타입을 제공하며, 이를 통해 요소를 유형화할 수 있습니다.
기본 키 지정
엔티티의 기본 키는 key 키워드를 사용하여 지정할 수 있습니다. 기본 키는 단일 필드로 구성된 간단한 기술 키를 사용하는 것이 좋습니다. ID라는 이름과 UUID 타입을 사용하면, INSERT 시 자동으로 UUID 값이 할당됩니다.
네임스페이스
네임스페이스는 파일 내의 모든 관련 이름에 자동으로 적용됩니다. 네임스페이스는 모델이 다른 프로젝트에서 재사용될 수 있을 때 유용하며, 선택 사항입니다.
사용자 정의 타입
사용자 정의 타입은 엔티티 정의에서 요소에 사용할 수 있습니다. 이는 기본 타입에서 파생된 단순 타입, 구조화된 타입, 연관 관계가 될 수 있습니다.
단순 타입: 예를 들어, NoOfBooks라는 타입을 정의하여 Integer 타입을 기반으로 할 수 있습니다. 이 타입은 Books 엔티티의 stock 요소에 사용될 수 있습니다.
구조화된 타입: 여러 관련 요소를 하나의 타입으로 결합하여 복잡한 데이터 구조를 만들 수 있습니다. 예를 들어, Price라는 구조화된 타입을 정의하여 amount와 currency 요소를 포함할 수 있습니다
열거형: 열거형은 코드를 더 읽기 쉽고 설명하기 쉽게 만들어주는 데 사용됩니다. 이는 기호와 해당 값을 지정하여 암호적인 값을 대체할 수 있게 합니다.
모델 컴파일 및 DDL 생성
CDS 모델은 cds watch 명령을 실행하여 자동으로 지속성 모델로 변환되고 데이터베이스에 배포됩니다. SQL DDL 문을 수동으로 생성하려면 다음 명령을 사용할 수 있습니다:
cds compile <models> [<options>]
이 명령은 schema.cds 파일을 기반으로 SQL DDL 스크립트를 생성합니다.
CDS 모델 컴파일 후 생성된 SQL DDL 출력 규칙
이번에는 CDS 모델을 컴파일하여 생성된 SQL DDL 출력에 적용되는 규칙에 대해 설명하겠습니다. CDS 모델에서 선언된 도메인 엔티티는 SQL 테이블로 변환됩니다.
엔티티와 테이블 매핑
- 도메인 엔티티: CDS 모델에서 정의된 도메인 엔티티(예: Authors, Books)는 SQL의 CREATE TABLE 문으로 변환되어 테이블이 됩니다.
데이터 타입 매핑
- CDS 데이터 타입: CDS의 데이터 타입(예: String)은 SQL의 데이터 타입(예: NVARCHAR)으로 매핑됩니다.
이름 변환 규칙
- 점(.) 대체: CDS의 완전한 이름(예: com.sap.learning.Books)에서 점(.)은 SQL 이름에서 밑줄(_)으로 대체됩니다. 따라서, com.sap.learning.Books는 com_sap_learning_Books라는 테이블 이름이 됩니다.
구조화된 요소의 평면화
- 구조화된 요소: 구조화된 요소(예: Books 엔티티의 price 요소)는 SQL 테이블에서 평면화되어 밑줄(_)을 사용하여 이름이 조합됩니다. 예를 들어, price 요소는 amount와 currency라는 구성 요소를 가지며, 생성된 Books 테이블에는 price_amount와 price_currency라는 두 개의 필드가 평면화되어 있습니다.
이러한 규칙들은 CDS 모델을 SQL 데이터베이스로 변환할 때 중요한 역할을 하며, 개발자들이 CDS 모델을 통해 데이터베이스 스키마를 효율적으로 관리할 수 있도록 도와줍니다.
schema.cds
namespace com.sap.learning;
entity Books {
key ID : UUID;
title : String(255);
genre : Genre;
publCountry : String(3);
stock : NoOfBooks;
price : Price;
isHardcover : Boolean;
}
type Genre : Integer enum {
fiction = 1;
non_fiction = 2;
}
type NoOfBooks : Integer;
type Price {
amount : Decimal;
currency : String(3);
}
entity Authors {
key ID : UUID;
name : String(100);
dateOfBirth : Date;
dateOfDeath : Date;
}
cds compile db/schema.cds --to sql
2. Providing Services
CDS Watch 명령어와 서비스 정의

CDS Watch 명령어
cds watch 명령어는 터미널에서 실행하여 CAP 프로젝트의 도메인 모델을 로드하고, 이를 구성된 데이터베이스에 배포합니다. 이 명령을 실행하면, 터미널에 "no service definitions found in loaded models, waiting for some to arrive"라는 메시지가 표시됩니다. 이는 도메인 모델에 접근하기 위해 하나 이상의 서비스가 필요함을 의미합니다.
서비스 정의
서비스는 CDS를 사용하여 정의되며, 도메인 모델과 유사하게 서비스 모델을 캡처합니다. 서비스는 기본적으로 도메인 모델 엔티티에 대한 뷰 또는 프로젝션을 노출하여, 데이터를 캡슐화하고 API를 제공하는 Facade 역할을 합니다.
- 서비스 정의: 서비스 정의는 제공하는 데이터 엔티티와 작업을 선언하며, 이를 통해 소비자가 데이터에 접근할 수 있는 API를 정의합니다.
- CAP 런타임: CAP 런타임은 Node.js와 Java에서 CRUD (Create, Read, Update, Delete) 요청을 자동으로 처리하는 제네릭 핸들러를 제공합니다. 이는 서비스 정의만으로도 완전한 서버를 실행할 수 있게 하며, 구현 코드가 필요하지 않습니다. 특히, 생성 작업 시 UUID 타입의 키 요소가 자동으로 채워집니다.
서비스의 장점
- 코드 작성 감소: 서비스 정의를 통해 기본적인 CRUD 작업은 자동으로 처리되므로, 개발자는 실제로 필요한 사용자 정의 비즈니스 로직에만 집중할 수 있습니다.
- 유연성: 서비스는 도메인 모델의 일부를 노출하거나 숨길 수 있어, 데이터를 안전하게 관리하고 제어할 수 있습니다.
이러한 서비스 정의와 CAP 런타임은 개발자들이 효율적으로 데이터 모델을 관리하고, 비즈니스 로직을 구현할 수 있도록 도와줍니다.
CDS를 사용한 서비스 정의
이번에는 CDS를 사용하여 서비스 정의를 작성하는 방법에 대해 설명하겠습니다. 이를 위해 CAP 프로젝트의 srv 폴더에 .cds 파일을 생성합니다. 예를 들어, admin-service.cds라는 이름을 사용할 수 있습니다.
서비스 정의 파일
서비스 정의 파일의 첫 번째 줄에서는 using 지시문을 사용하여 도메인 모델의 정의를 가져옵니다. ../로 시작하는 경로는 서비스 정의가 위치한 srv 폴더를 기준으로 상대 경로로 해석됩니다. 이로 인해 com.sap.learning 네임스페이스 접두사를 가진 모든 정의가 db/schema.cds 파일에서 가져와집니다. 가져온 정의에 대한 로컬 별칭으로 db를 설정합니다.
서비스 블록
4행에서 9행까지는 AdminService라는 서비스 인터페이스를 정의하는 서비스 블록이 있습니다. 이 서비스는 관리자가 애플리케이션 내에서 저자와 책을 관리하는 데 사용됩니다.
기본적으로 노출된 서비스의 엔드포인트는 서비스 이름에 따라 생성되며, 특정 규칙을 따릅니다(예: 'Service' 문자열이 생략되고, 케밥 케이스를 강제합니다). 기본 경로를 덮어쓰거나 명시적으로 설정하려면 @path 주석을 추가할 수 있습니다. 예를 들어, @path 주석을 사용하여 이 서비스가 접근 가능한 URL 경로를 /admin으로 지정할 수 있습니다.
노출된 엔티티
서비스에서 노출되는 엔티티는 일반적으로 기본 데이터 모델의 엔티티에 대한 뷰 또는 프로젝션입니다. 표준 뷰 정의를 사용하여 엔티티를 노출할 수 있습니다.
AdminService 내에서 두 개의 엔티티가 프로젝션으로 정의됩니다:
- 6행에서는 Books라는 엔티티가 선언되며, 이는 도메인 모델에 정의된 Books 엔티티에 대한 프로젝션입니다.
- 7행에서는 Authors라는 엔티티가 도메인 모델의 Authors 엔티티에 대한 프로젝션으로 선언됩니다.
프로젝션은 서비스 소비자의 요구에 맞게 데이터를 특정한 방식으로 형성하는 데 사용됩니다. 이는 데이터의 필드를 제한하거나 구조를 변경하는 데 사용될 수 있습니다.
제네릭 서비스 제공자
cds watch 명령을 실행하면 서비스 모델이 srv/admin-service.cds 파일에서 로드되며, 터미널에는 AdminService가 /admin 경로로 제공됨을 표시합니다.
데이터베이스 뷰
cds watch를 실행하면 서비스 모델을 기반으로 SQL DDL 문이 생성되어 구성된 데이터베이스에 실행됩니다. 이 SQL DDL 문은 cds compile 명령을 사용하여 수동으로 생성할 수도 있습니다.
예를 들어, 다음 명령을 사용하여 서비스 모델에 대한 SQL DDL 문을 생성할 수 있습니다:
cds compile srv/admin-service.cds --to sql
생성된 SQL DDL 스크립트에는 도메인 모델의 엔티티에 대한 CREATE TABLE 문 외에도, 서비스 모델의 프로젝션된 엔티티에 대한 CREATE VIEW 문이 포함됩니다. 이는 데이터베이스에서 뷰로 생성되어 모델 테이블에서 데이터를 읽습니다.
OData 서비스
AdminService는 완전한 OData V4 서비스로 제공되며, CAP의 제네릭 런타임에 의해 구현 코드 없이도 제공됩니다. 서비스의 루트 URL에 GET 요청을 보내면 서비스가 제공하는 리소스를 나열하는 서비스 문서를 받을 수 있습니다.
이 서비스에는 서비스 모델에 기반한 두 개의 엔티티 집합인 Authors와 Books가 포함되어 있으며, 각각 /admin/Authors와 /admin/Books라는 서비스 엔드포인트와 연결됩니다. 이 엔드포인트를 통해 OData의 CRUD 작업을 기본적으로 지원합니다. 새 저자나 책 엔티티를 생성할 때, UUID 타입의 ID 키 필드는 자동으로 채워집니다.
이렇게 블로그 형식으로 정리된 내용을 통해 독자들이 CDS를 사용한 서비스 정의와 CAP의 제네릭 서비스 제공자에 대한 이해를 높일 수 있도록 도와줄 수 있습니다.
도메인 모델 기반의 간단한 서비스 생성
서비스 정의 파일 생성
- srv 폴더에서 새로운 파일 생성:
- Explorer 뷰에서 srv 폴더를 마우스 오른쪽 버튼으로 클릭하고 New File을 선택합니다.
- 파일 이름을 입력하고 Enter 키를 누릅니다.
- 서비스 정의 작성:
- 열린 편집기에서 서비스 정의를 작성합니다. 이는 CDS와 CQL 언어를 사용하여 작성됩니다.
서비스 정의 코드 살펴보기
- 도메인 모델 정의 가져오기:
- 첫 번째 줄에서 using 지시문을 사용하여 도메인 모델의 정의를 가져옵니다. com.sap.learning 네임스페이스 접두사를 가진 모든 정의가 db/schema.cds 파일에서 가져와집니다.
- 서비스 블록:
- 7행에서 12행까지는 AdminService라는 서비스 인터페이스를 정의하는 서비스 블록이 있습니다. 이 서비스는 관리자가 애플리케이션 내에서 저자와 책을 관리하는 데 사용됩니다.
- 기본적으로 노출된 서비스의 엔드포인트는 서비스 이름에 따라 생성되며, @path 주석을 사용하여 이를 덮어쓸 수 있습니다. 예를 들어, @path 주석을 사용하여 서비스가 접근 가능한 URL 경로를 /admin으로 지정할 수 있습니다.
- 노출된 엔티티:
- 두 개의 엔티티가 프로젝션으로 정의됩니다:
- Books 엔티티는 도메인 모델의 Books 엔티티에 대한 프로젝션입니다.
- Authors 엔티티는 도메인 모델의 Authors 엔티티에 대한 프로젝션입니다.
- 두 개의 엔티티가 프로젝션으로 정의됩니다:
의존성 설치 및 테스트
- 의존성 설치:
- 메뉴에서 Terminal > New Terminal을 선택합니다.
- 터미널에서 npm install 명령을 실행하여 프로젝트의 의존성을 설치합니다. 이는 package.json 파일에 정의된 의존성을 설치합니다.
- HTTP 서버 시작:
- 터미널에서 cds watch 명령을 실행하여 HTTP 서버를 시작합니다.
- 서비스 테스트:
- test 폴더로 이동하여 3_service_definition 하위 폴더를 엽니다.
- admin-service-requests.http 파일을 선택합니다. 이 파일에는 새로 생성된 OData 서비스를 테스트하기 위한 준비된 HTTP 요청이 포함되어 있습니다.
- Get Service Document와 Get Service Metadata Document 아래의 Send Request를 선택하여 서비스 문서와 메타데이터 문서를 얻습니다.
- 프로세스 종료:
- 터미널에서 Ctrl + C를 눌러 프로세스를 중지합니다.
- SQL DDL 생성:
- CAP 프로젝트의 루트 디렉토리에서 터미널에 다음 명령을 실행하여 서비스 모델에 대한 SQL DDL 문을 생성합니다:
cds compile srv/admin-service.cds --to sql
이렇게 도메인 모델을 기반으로 간단한 서비스를 생성하고 테스트하는 과정을 완료했습니다.
3. Using Databases
지원되는 데이터베이스
- SAP HANA Cloud:
- SAP HANA Cloud는 SAP HANA의 인메모리 기술을 기반으로 하며, 대량의 데이터에 대한 고속 데이터 처리와 고급 분석을 가능하게 합니다. 이는 생산 환경에 적합하며, 추천됩니다.
- SAP HANA Cloud는 데이터베이스 패키지 @sap/cds-hana를 사용하여 설치할 수 있습니다.
- SQLite:
- SQLite는 가벼운 데이터베이스로, 데이터베이스 서버 설정의 부담 없이 로컬에서 데이터를 저장하고 관리하는 데 적합합니다. 이는 모바일 애플리케이션, 데스크톱 애플리케이션, 다양한 장치에서 널리 사용됩니다.
- SQLite는 개발 환경에 추천되며, 패키지 @cap-js/sqlite를 사용하여 설치할 수 있습니다.
- PostgreSQL:
- PostgreSQL은 강력하고 확장 가능한 오픈 소스 관계형 데이터베이스 관리 시스템으로, 고급 데이터 타입과 SQL 쿼리 지원이 뛰어납니다.
- PostgreSQL은 활발한 커뮤니티와 지속적인 개발로 인해 가장 발전된 오픈 소스 데이터베이스 중 하나로 평가받고 있습니다. CAP의 PostgreSQL 지원은 커뮤니티와 SAP CAP 팀 모두에 의해 유지됩니다.
데이터베이스 자동 구성
CAP는 cds-plugin 기법을 사용하여 데이터베이스를 자동으로 구성합니다. 각 지원되는 데이터베이스에는 해당하는 cds-plugin 패키지가 있으며, 이를 통해 CAP가 특정 데이터베이스와 상호작용할 수 있게 됩니다. 개발자는 단순히 npm add 명령으로 데이터베이스 기능을 추가할 수 있으며, 이는 개발 및 생산 환경에서 데이터베이스를 쉽게 전환할 수 있게 합니다.
초기 데이터 로드
CAP 모델에 정의된 각 테이블에 대해 초기 데이터를 로드하려면, 해당 엔티티 이름과 일치하는 .csv 파일을 생성해야 합니다. 예를 들어, com.sap.learning.Authors 엔티티에 대한 초기 데이터는 com.sap.learning-Authors.csv 파일에 저장할 수 있습니다.
.csv 파일은 두 가지 위치에 저장할 수 있습니다:
- test/data: 이 폴더는 테스트 및 데모용 샘플 데이터를 저장하는 데 사용됩니다. 이 폴더의 데이터는 프로덕션 환경에서는 배포되지 않습니다.
- db/data: 이 폴더는 초기 구성 데이터나 코드 목록 데이터와 같은 실제 초기 데이터를 저장하는 데 사용됩니다. 이 폴더의 데이터는 모든 환경에서 배포됩니다.
.csv 파일을 생성하려면 다음 명령을 사용할 수 있습니다:
cds add data
이 명령은 db/data 폴더에 .csv 파일을 생성하며, 파일에는 아직 데이터가 포함되어 있지 않지만, CDS 모델에 기반한 열 제목이 포함됩니다.
SQLite 사용
SQLite는 개발 및 테스트에 적합한 데이터베이스로, CAP에서 광범위한 지원을 제공합니다. SQLite를 사용하려면 다음 명령을 실행합니다:
npm add @cap-js/sqlite -D
이 명령은 개발 환경에서만 사용할 SQLite 패키지를 설치합니다.
SQLite 데이터베이스를 개발에 사용하는 방법
SQLite 설치 및 구성
새 터미널 열기:
메뉴에서 Terminal > New Terminal을 선택합니다.
SQLite 패키지 설치:
터미널에서 다음 명령을 실행하여 SQLite 패키지를 설치합니다:
npm add @cap-js/sqlite -D
이 명령은 개발 환경에서만 사용할 SQLite 패키지를 설치합니다.
package.json 확인:
package.json 파일을 열어 개발 의존성으로 추가된 SQLite 패키지를 확인합니다.
데이터베이스 구성 확인:
터미널에서 다음 명령을 실행하여 데이터베이스 구성 설정을 확인합니다:
cds env cds.requires.db
데이터 파일 생성
- 데이터 파일 생성:
- 터미널에서 다음 명령을 실행하여 CDS 모델에 정의된 테이블에 대한 .csv 파일을 생성합니다:
cds add data
- 이 명령은 db/data 폴더에 .csv 파일을 생성하며, 파일에는 아직 데이터가 포함되어 있지 않지만, CDS 모델에 기반한 열 제목이 포함됩니다.
- 터미널에서 다음 명령을 실행하여 CDS 모델에 정의된 테이블에 대한 .csv 파일을 생성합니다:
- 데이터 파일 준비:
- test/4_sqlite_database/data 폴더에서 준비된 템플릿을 사용하여 .csv 파일에 데이터를 복사할 수 있습니다.
애플리케이션 실행 및 테스트
애플리케이션 실행:
터미널에서 다음 명령을 실행하여 애플리케이션을 시작합니다:
cds watch
OData 서비스 테스트:
- test 폴더로 이동하여 4_sqlite_database 하위 폴더를 엽니다.
- admin-service-requests.http 파일을 선택합니다. 이 파일에는 OData 서비스를 테스트하기 위한 준비된 HTTP 요청이 포함되어 있습니다.
- Get All Books와 Get All Authors 요청을 보내어 각각의 엔티티 집합을 얻습니다.
서버 중지:
터미널에서 Ctrl + C를 눌러 서버를 중지합니다.
지속성 데이터베이스 구성
package.json 수정:
package.json 파일을 열어 SQLite 데이터베이스를 지속성 데이터베이스로 구성합니다. 이는 프로젝트 루트에 db.sqlite 파일을 사용하도록 설정합니다.
데이터베이스 배포:
터미널에서 다음 명령을 실행하여 지속성 데이터베이스를 배포합니다:
cds deploy
이렇게 SQLite 데이터베이스를 개발에 사용하는 방법을 완료했습니다.
CAP 관련 문제 풀이
1. 지속성 SQLite 데이터베이스에 대한 진술 중 올바른 것은 무엇인가요?
문제:
Which of the following statements about persistent SQLite databases are true?
There are two correct answers.
- A file name for the database must be specified in package.json.
- Changes to the CDS models or the initial data are automatically deployed to the database when the server is started with cds watch.
- All data changes are lost as soon as the server started with cds watch is stopped.
- By executing the cds deploy command in the terminal, the database tables are filled with the initial data from the provided .csv files, among other things.
정답:
- A file name for the database must be specified in package.json.
- By executing the cds deploy command in the terminal, the database tables are filled with the initial data from the provided .csv files, among other things.
설명:
지속성 SQLite 데이터베이스를 사용하려면 package.json에 데이터베이스 파일 이름을 지정해야 하며, cds deploy 명령을 통해 초기 데이터가 데이터베이스에 채워집니다. 데이터베이스 파일 이름을 지정하면 데이터가 파일에 저장되어 서버가 중지되더라도 데이터가 유지됩니다.
2. CAP Node.js 런타임에서 기본적으로 지원하는 데이터베이스는 무엇인가요?
문제:
For which databases does the CAP Node.js runtime provide out-of-the-box support?
There are three correct answers.
- IBM DB2
- SQLite
- Microsoft SQL Server
- SAP HANA Cloud
- PostgreSQL
- Oracle
정답:
- SQLite
- SAP HANA Cloud
- PostgreSQL
설명:
CAP Node.js 런타임은 SQLite, SAP HANA Cloud, PostgreSQL을 기본적으로 지원합니다. 이는 각 데이터베이스에 대한 cds-plugin 패키지를 통해 통합됩니다.
3. CDS에서 정의할 수 있는 사용자 정의 타입은 무엇인가요?
문제:
What kinds of custom types can you define?
There are three correct answers.
- Simple Types
- Structured Types
- Table Types
- Associations
정답:
- Simple Types
- Structured Types
- Associations
설명:
CDS에서 단순 타입, 구조화된 타입, 연관 관계를 정의할 수 있습니다. 단순 타입은 기본 타입에서 파생된 타입이며, 구조화된 타입은 여러 관련 요소를 하나의 타입으로 결합합니다.
4. 도메인 모델 생성 시 권장되는 명명 규칙은 무엇인가요?
문제:
What naming conventions are recommended when creating domain models?
There are three correct answers.
- Entity names should start with a capital letter.
- The singular form should be used for entity names.
- Element names should start with a capital letter.
- Names for custom-defined types should start with a capital letter.
- The singular form should be used for names of custom-defined types.
정답:
- Entity names should start with a capital letter.
- Names for custom-defined types should start with a capital letter.
- Element names should start with a lower case letter (이 질문에는 포함되지 않았지만, 일반적인 규칙입니다).
설명:
엔티티 이름과 사용자 정의 타입 이름은 대문자로 시작해야 하며, 요소 이름은 소문자로 시작하는 것이 좋습니다. 엔티티 이름은 복수형을 사용하고, 사용자 정의 타입 이름은 단수형을 사용하는 것이 좋습니다.
5. 서비스의 엔드포인트를 명시적으로 '/admin'으로 지정하려면 어떻게 해야 하나요?
문제:
Suppose you want to explicitly specify /admin as the endpoint of an exposed service. How do you need to annotate the corresponding service definition to achieve this?
Choose the correct answer.
- @(root: '/admin')
- @(url: '/admin')
- @(path: '/admin')
- @(endpoint: '/admin')
정답:
- @(path: '/admin')
설명:
서비스 정의에 @(path: '/admin') 주석을 추가하여 엔드포인트를 명시적으로 지정할 수 있습니다.
6. CAP 프로젝트의 db/model.cds 파일에 포함된 도메인 모델에 대한 SQL DDL 스크립트를 수동으로 생성하려면 어떤 명령어를 사용해야 하나요?
문제:
For a domain model created in a CAP project, an SQL DDL script can be generated manually. Assuming that the domain model is contained in the db/model.cds file of the CAP project, which terminal command do you need to execute in the root directory of the project to generate the SQL DDL statements for the model?
Choose the correct answer.
- cds parse db/model.cds --to sql
- cds translate db/model.cds --to sql
- cds generate db/model.cds --to sql
- cds compile db/model.cds --to sql
정답:
- cds compile db/model.cds --to sql
설명:
SQL DDL 스크립트를 생성하려면 cds compile db/model.cds --to sql 명령을 사용합니다.
7. 서비스 모델에서 도메인 모델의 엔티티 B에 대한 프로젝션으로 엔티티 A를 노출할 때 데이터베이스에 생성되는 객체는 무엇인가요?
문제:
You have created a service definition that exposes an entity A, which is a projection on an entity B from the domain model. Which objects are generated in the database on the basis of this service model?
Choose the correct answer.
- A table is created for entity A and a view for entity B.
- A view is created for entity A and a table for entity B.
- A table is created for entity A and a table is created for entity B.
- A view is created for entity A and a view is created for entity B.
- A table is created for entity B, no object is created for entity A.
정답:
- A view is created for entity A and a table for entity B.
설명:
엔티티 A는 뷰로, 엔티티 B는 테이블로 생성됩니다. 이는 서비스 모델에서 엔티티 A가 엔티티 B에 대한 프로젝션으로 정의되었기 때문입니다.
8. 사용자 정의 타입 Status에 대한 열거형 값을 정의하려면 어떻게 해야 하나요?
문제:
You want to define enumeration values for a custom-defined type called Status, which is based on the built-in type Integer. Available should symbolize the value 1 and Discontinued the value 2. Which of the following implementations is correct?
Choose the correct answer.
- type Status : Integer enum {1: Available; 2: Discontinued;}
- type Status : Integer enum {Available = 1, Discontinued = 2}
- type Status : Integer enum {Available = 1; Discontinued = 2;}
- type Status : Integer enum {1: Available, 2: Discontinued}
정답:
- type Status : Integer enum {Available = 1; Discontinued = 2;}
설명:
열거형 값을 정의하려면 type Status : Integer enum {Available = 1; Discontinued = 2;}와 같은 구문을 사용합니다.
9. CDS 모델에서 테이블에 대한 적절한 이름의 .csv 파일을 생성하는 명령어는 무엇인가요?
문제:
What command do you need to enter in the terminal to generate a properly named .csv file for each table from the CDS model in the db/data folder? (The generated files do not yet contain any data, but they do contain column titles that correspond to the declared element names in the CDS model).
Choose the correct answer.
- cds data
- cds add
- cds add data
- cds data add
정답:
- cds add data
설명:
.csv 파일을 생성하려면 cds add data 명령을 사용합니다.
10. 도메인 모델의 엔티티 db.Books에 대한 1:1 프로젝션으로 Books 엔티티를 노출하려면 어떻게 해야 하나요?
문제:
In a service, an entity called Books is to be exposed, which is to be defined as a projection on the entity db.Books from the domain model. The exposed entity should allow access to the underlying data in a 1:1 manner. What syntax can you use for this?
There are two correct answers.
- entity Books as view on db.Books;
- entity Books as projection on db.Books;
- entity Books as select from db.Books;
- entity Books as choice of db.Books;
정답:
- entity Books as projection on db.Books;
- entity Books as select from db.Books;
설명:
entity Books as projection on db.Books; 또는 entity Books as select from db.Books; 구문을 사용하여 1:1 프로젝션을 정의할 수 있습니다.