Bound vs Unbound Action — 언제 어느 걸 #shorts #SAP #CAP
Moderator
· 조회 2
이 글이 답하는 질문
- CAP에서 Bound Action과 Unbound Action은 어떻게 다른가?
- 언제 Bound를 쓰고 언제 Unbound를 써야 하나?
- CDS 선언과 Node.js 핸들러는 어떻게 작성하나?
Bound vs Unbound — 결정적 차이
Bound Action은 특정 엔티티 인스턴스에 묶인 작업입니다. entity 블록 안에 actions로 선언하며 특정 레코드를 대상으로 실행됩니다. 특정 주문 취소, 특정 문서 승인 같은 작업이 Bound입니다. Unbound Action은 서비스 레벨에서 독립 실행됩니다. 특정 인스턴스가 아닌 전체 컨텍스트에서 동작하는 작업에 사용합니다.
직접 해보기
1. CDS 선언
service OrderSvc {
// Unbound — 서비스 레벨
action triggerBatch() returns String;
entity Orders {
key id : Integer;
// Bound — 특정 인스턴스 대상
actions {
action cancel() returns String;
}
}
}
2. Node.js 핸들러
// Unbound
srv.on('triggerBatch', async (req) => {
return 'batch triggered';
});
// Bound — entity 이름 추가
srv.on('cancel', 'Orders', async (req) => {
const { id } = req.params[0];
await UPDATE(Orders, id).with({ status: 'cancelled' });
return 'cancelled';
});
삽질 노트
- Bound 핸들러에서 req.params[0]으로 대상 인스턴스 키를 받음 — 빠뜨리면 undefined
- Unbound: srv.on(action, handler) / Bound: srv.on(action, entity, handler) — 인자 순서 다름
- OData URL: Bound = /Orders(1)/cancel, Unbound = /triggerBatch
핵심 한 줄
특정 레코드 조작이면 Bound, 전체 컨텍스트 작업이면 Unbound — 선언 위치가 의도를 결정합니다.
더 파볼 주제
- CAP Function vs Action — 부수효과 유무 차이
- Bound Function으로 계산 필드 구현하기