콘텐츠로 이동

09. 데이터셋

워크플로우가 읽고 쓸 수 있는 표입니다. 사이드바 Datasets 화면에서 관리합니다.

워크플로우는 실행이 끝나면 아무것도 기억하지 않습니다. "이미 처리한 주문인지" 같은 걸 실행 사이에 기억해야 할 때 데이터셋을 씁니다.


이럴 때 씁니다

상황 쓰는 법
중복 처리 막기 처리한 주문번호를 저장해두고 다음 실행에서 대조
누적 기록 남기기 매일 매출을 한 행씩 쌓아 추이 보기
설정값 목록 관리 알림 보낼 대상 목록을 표로 관리
실행 로그 남기기 언제 무엇을 처리했는지 기록

값 하나짜리 설정이라면 변수가 더 적합합니다. 데이터셋은 행이 여러 개 쌓이는 것을 위한 기능입니다.


만들기

Datasets 화면에서 생성 버튼을 누르고 채웁니다.

항목 설명
Title 데이터셋 제목. 워크스페이스 안에서 고유해야 하며, 워크플로우에서 이 이름으로 참조합니다
Description 설명 (선택)
Columns 컬럼 정의. 최소 하나 필요

컬럼마다 이름과 타입을 정합니다.

타입 담는 값
STRING 문자열
NUMBER 숫자
BOOLEAN 참/거짓
DATETIME 날짜·시각

컬럼 순서는 화살표 버튼으로 바꿀 수 있습니다.

예시 — "처리이력"

컬럼 타입
주문번호 STRING
금액 NUMBER
처리시각 DATETIME
알림발송 BOOLEAN

만들고 나면 목록에서 클릭해 행을 직접 보고 편집할 수 있습니다.


워크플로우에서 쓰기

dataset 통합을 씁니다. → 04. 통합 카탈로그

읽기 (QUERY)

- id: load-history
  name: 처리이력 조회
  type: CALL
  integration: dataset
  input:
    datasetTitle: "처리이력"
    operation: QUERY
    limit: 100        # 기본 100, 최대 1000
    offset: 0

출력은 { rows: [...] } 모양입니다.

${nodes.load-history.response.body.rows | raw}     # 배열 전체 (| raw 필수)
${nodes.load-history.response.body.rows.0.주문번호}  # 첫 행의 주문번호

각 행에는 시스템이 붙이는 id와 정의한 컬럼들이 들어 있습니다.

쓰기 (INSERT)

- id: save-history
  name: 처리이력 저장
  type: CALL
  integration: dataset
  input:
    datasetTitle: "처리이력"
    operation: INSERT
    data:
      주문번호: "${nodes.trigger.response.body.orderId}"
      금액: "${nodes.trigger.response.body.amount}"
      처리시각: "${nodes.trigger.response.body.windowEnd}"
      알림발송: "true"

출력은 방금 저장된 행입니다: ${nodes.save-history.response.body.id}

컬럼에 없는 키는 조용히 버려집니다. 값이 안 들어갔다면 컬럼 이름 오타를 먼저 의심하세요.

수정 (UPDATE) / 삭제 (DELETE)

- id: mark-done
  type: CALL
  integration: dataset
  input:
    datasetTitle: "처리이력"
    operation: UPDATE
    rowId: "${nodes.find.response.body.rows.0.id}"
    data:
      알림발송: "true"

- id: cleanup
  type: CALL
  integration: dataset
  input:
    datasetTitle: "처리이력"
    operation: DELETE
    rowId: "${nodes.find.response.body.rows.0.id}"

DELETE 출력은 { deleted: true, id: ... } 입니다.


표현식으로 바로 꺼내기

간단한 조회는 dataset 노드 없이 표현식만으로 됩니다.

표현식
${datasets.처리이력.count} 행 개수
${datasets.처리이력.latest} 가장 최근 행 전체 (객체 — \| raw 필요)
${datasets.처리이력.latest.주문번호} 가장 최근 행의 특정 필드
userPrompt: |
  지금까지 처리한 건수: ${datasets.처리이력.count}건
  마지막 처리: ${datasets.처리이력.latest.처리시각}

노드를 하나 아끼는 편리한 방법입니다. 여러 행을 봐야 한다면 dataset 노드의 QUERY를 쓰세요.


활용 예 — 중복 처리 막기

# 1) 최근 처리 이력 조회
- id: load
  type: CALL
  integration: dataset
  input:
    datasetTitle: "처리이력"
    operation: QUERY
    limit: 200

# 2) 이번 주문번호가 이미 있는지 확인
- id: check
  type: CALL
  integration: transform_jmespath
  input:
    expression: "{이미처리: length(rows[?주문번호 == `${nodes.trigger.response.body.orderId}`]) > `0`}"
    data: "${nodes.load.response.body | raw}"

# 3) 결과로 분기
- id: route
  type: CONDITIONAL
  execution-info:
    conditions:
      - label: skip
        expression: "이미처리 == 'true'"
      - label: process
        otherwise: true

엣지에서 이미처리를 조건 노드로 넘겨주는 것을 잊지 마세요. → 06. 흐름 제어


주의할 점

  • 워크스페이스마다 따로입니다.
  • datasetTitle제목 문자열로 찾습니다. 제목을 바꾸면 그 이름을 쓰던 워크플로우가 전부 실패합니다.
  • 한 번에 읽을 수 있는 최대 행 수는 1000입니다. 그보다 많으면 offset으로 나눠 읽으세요.
  • 대량 데이터 저장소가 아닙니다. 자동화가 기억해야 할 것을 담는 용도로 쓰세요.

다음10. 실행과 모니터링