CAP 초기 데이터 로딩이란
CAP for Node.js 프로젝트에서 개발, 테스트 환경의 초기 데이터(seed data)를 데이터베이스에 자동으로 로드하는 가장 간단한 방법은 CSV 파일을 특정 위치에 놓는 것입니다. 코드 한 줄 없이, 파일 이름 규칙만 지키면 CAP 서버 시작 시 자동으로 데이터가 INSERT됩니다.
CSV 파일 위치 규칙
my-cap-project/
├── db/
│ ├── schema.cds # 엔티티 정의
│ └── data/ # 초기 데이터 폴더
│ ├── my.namespace-Products.csv
│ ├── my.namespace-Categories.csv
│ └── my.namespace-Orders.csv
├── srv/
│ └── service.cds
└── package.json
파일 이름 규칙: {네임스페이스}-{엔티티명}.csv입니다. 네임스페이스와 엔티티명은 CDS 정의에서 사용한 것과 정확히 일치해야 합니다.
CDS 스키마 정의
// db/schema.cds
namespace retail.inventory;
entity Products {
key product_id : String(18);
name : String(100);
category_id : String(10);
unit_price : Decimal(15,2);
currency : String(3) default 'KRW';
in_stock : Boolean default true;
}
entity Categories {
key category_id : String(10);
name : String(50);
description : String(200);
}
CSV 파일 작성
# db/data/retail.inventory-Categories.csv
category_id,name,description
ELEC,전자제품,노트북/스마트폰/태블릿 등 전자기기
FURN,가구,책상/의자/수납장 등 사무용 가구
STAT,문구,펜/노트/파일 등 사무용품
# db/data/retail.inventory-Products.csv
product_id,name,category_id,unit_price,currency,in_stock
P-001,UltraBook 15,ELEC,1500000,KRW,true
P-002,비즈니스 의자,FURN,350000,KRW,true
P-003,볼펜 세트 10개입,STAT,12000,KRW,true
P-004,무선 마우스,ELEC,45000,KRW,true
P-005,스탠딩 데스크,FURN,890000,KRW,false
CSV 첫 줄이 컬럼 헤더입니다. 헤더는 CDS 엔티티의 필드 이름과 정확히 일치해야 합니다. 대소문자를 구분합니다.
서버 시작 및 데이터 로드 확인
# package.json 개발 스크립트
{
"scripts": {
"start": "cds-serve",
"watch": "cds watch"
}
}
# 서버 시작
npm run watch
# 출력 로그 (데이터 로드 성공 시)
[cds] - connect using bindings from: { registry: '~/.cds-services.json' }
[cds] - connect to db > sqlite { url: ':memory:' }
> filling retail.inventory.Categories from db/data/retail.inventory-Categories.csv
> filling retail.inventory.Products from db/data/retail.inventory-Products.csv
[cds] - serving retail.inventory { at: '/api' }
[cds] - server listening on { url: 'http://localhost:4004' }
연관 관계 데이터 CSV로 표현
// schema.cds에 Orders 추가
entity Orders {
key order_id : String(20);
customer : String(50);
order_date : Date;
items : Composition of many OrderItems on items.order = $self;
}
entity OrderItems {
key item_no : Integer;
key order : Association to Orders;
product : Association to Products;
quantity : Integer;
amount : Decimal(15,2);
}
# retail.inventory-Orders.csv
order_id,customer,order_date
ORD-2026-001,홍길동,2026-05-01
ORD-2026-002,김철수,2026-05-10
# retail.inventory-OrderItems.csv
# Association 필드는 외래키로 표현
item_no,order_order_id,product_product_id,quantity,amount
10,ORD-2026-001,P-001,1,1500000
20,ORD-2026-001,P-003,2,24000
10,ORD-2026-002,P-004,3,135000
Association 필드는 {필드명}_{참조필드명} 형식으로 표현합니다. order_order_id는 Orders 엔티티의 order_id 키를 참조합니다.
프로덕션 환경에서 CSV 데이터 로드 제어
// package.json CDS 설정
{
"cds": {
"requires": {
"db": {
"[development]": {
"kind": "sqlite",
"credentials": { "url": ":memory:" }
},
"[production]": {
"kind": "hana",
"deploy-format": "hdbtable"
}
}
},
"hana": {
"deploy-format": "hdbtable"
}
}
}
프로덕션(HANA) 환경에서는 CSV 데이터가 HANA의 HDI Container 배포 시에만 로드됩니다. 앱 재시작마다 로드되지 않습니다.
공식 문서
CAP 초기 데이터 로딩 전체 가이드는 cap.cloud.sap/docs/guides/databases#providing-initial-data에서 확인하세요.
댓글 0
아직 댓글이 없습니다.