CAP CSV 초기 데이터 로딩에서 발생하는 실수
CAP for Node.js의 CSV 자동 로딩 기능은 매우 편리하지만, 파일 이름, 헤더 형식, 데이터 타입을 조금만 잘못 써도 로딩이 조용히 실패합니다. 오류 메시지도 없고 데이터만 비어있습니다. 3가지 자주 발생하는 실수를 정리합니다.
실수 1: 파일 이름이 네임스페이스.엔티티명과 불일치
// CDS 스키마
namespace com.mycompany.crm;
entity Customers {
key customerId : String(10);
name : String(100);
segment : String(20);
}
# 잘못된 파일 이름들 (로딩 안 됨)
db/data/Customers.csv # 네임스페이스 없음
db/data/crm-Customers.csv # 전체 네임스페이스 아님
db/data/com-mycompany-Customers.csv # 하이픈으로 구분
# 올바른 파일 이름 (정확히 {네임스페이스}-{엔티티명}.csv)
db/data/com.mycompany.crm-Customers.csv
# ^-- 네임스페이스 점(.)은 그대로 ^-- 하이픈으로 구분
# 서버 로그에서 로딩 여부 확인 # 성공 시: # > filling com.mycompany.crm.Customers from db/data/com.mycompany.crm-Customers.csv # 실패 시 (파일 무시됨): # 아무 메시지 없음 — 데이터만 없음
실수 2: CSV 헤더가 CDS 필드명과 다름
# CDS 필드: customerId, name, segment, createdAt # 잘못된 CSV 헤더 customer_id,Name,Segment,created_at # 대소문자/언더스코어 오류 CUSTOMERID,name,segment,createdAt # 모두 대문자 # 올바른 CSV 헤더 (CDS 필드명과 정확히 일치) customerId,name,segment,createdAt # 올바른 데이터 customerId,name,segment,createdAt C001,삼성전자,ENTERPRISE,2026-01-01 C002,현대자동차,ENTERPRISE,2026-01-15 C003,카카오,SMB,2026-02-01
# 헤더 불일치 시 동작: # - 매핑되지 않는 컬럼은 무시됨 # - 매핑된 컬럼만 INSERT됨 # - customerId가 없으면 키가 없어 INSERT 실패 (조용히)
실수 3: Association 필드 형식 오류
// CDS 정의
entity Orders {
key orderId : String(20);
customer : Association to Customers;
amount : Decimal(15,2);
}
# 잘못된 CSV (Association 필드 형식 오류)
orderId,customer,amount
ORD-001,C001,50000 # customer는 Association — 직접 값 안 됨
ORD-002,C002,75000
# 올바른 CSV (Association은 외래키 형식으로 표현)
# Association to Customers → 키 필드는 customerId
# 컬럼명: {association명}_{참조엔티티키명}
orderId,customer_customerId,amount
ORD-001,C001,50000
ORD-002,C002,75000
Boolean, Decimal, Date 타입 주의사항
# Boolean isActive,isVIP true,false # 소문자 true/false # 또는 1,0 # 숫자 # Decimal netAmount,taxRate 50000.00,10.0 # 소수점 포함 # Date (ISO 8601) orderDate,deliveryDate 2026-05-01,2026-05-15 # YYYY-MM-DD # DateTime createdAt 2026-05-01T09:00:00Z # ISO 8601 UTC
CSV 로딩 디버깅 방법
# 로그 레벨 높이기 (cds watch 시) DEBUG=cds npm run watch # 출력에서 데이터 로딩 확인 # [cds] - Loading models from db/data/... # > filling com.mycompany.crm.Customers from db/data/... # (결과) 3 records inserted # SQLite에서 직접 확인 (개발 환경) sqlite3 db.sqlite3 .tables SELECT count(*) FROM COM_MYCOMPANY_CRM_CUSTOMERS;
CSV로 관계형 데이터 로딩 전체 예제
# com.mycompany.crm-Customers.csv customerId,name,segment,region C001,삼성전자,ENTERPRISE,ASIA C002,현대자동차,ENTERPRISE,ASIA C003,스타트업A,SMB,ASIA # com.mycompany.crm-Orders.csv orderId,customer_customerId,amount,currency,status ORD-001,C001,5000000,KRW,OPEN ORD-002,C001,3200000,KRW,CLOSED ORD-003,C002,8500000,KRW,OPEN
공식 문서
CAP 초기 데이터 로딩 가이드는 cap.cloud.sap/docs/guides/databases에서 확인하세요.
댓글 0
아직 댓글이 없습니다.