본문으로 건너뛰기

워크플로우로 업무 자동화

워크플로우로 업무 자동화트리거 · 조건 · 액션을 조합해 비즈니스 프로세스를 자동화합니다

고급데이터16초읽기 약 4분업데이트 2026-04-14

트리거 · 조건 · 액션을 조합해 비즈니스 프로세스를 자동화합니다

이 튜토리얼에서 배울 내용
트리거/스텝/조건 분기 이해
이메일 자동 발송
재고 관리 자동화
실행 모니터링

워크플로우 자동화

Connect Base 워크플로우로 비즈니스 프로세스를 자동화합니다.

워크플로우란?

워크플로우는 여러 작업을 순차적/조건적으로 연결하여 자동 실행하는 기능입니다.

  • 트리거: 워크플로우를 시작하는 이벤트
  • 스텝: 실행할 개별 작업 (함수 호출, HTTP 요청, 조건 분기 등)
  • 지연: 특정 시간만큼 대기 후 다음 스텝 실행

사용 가능한 트리거

트리거설명예시
데이터 이벤트테이블 데이터 변경 시users.created, orders.updated
스케줄정해진 시간에 실행매일 9시, 매주 월요일
HTTP 웹훅외부에서 API 호출 시결제 완료 알림
수동 실행콘솔에서 직접 실행테스트, 일회성 작업

스텝 유형

스텝설명
함수 호출서버리스 함수 실행
HTTP 요청외부 API 호출
조건 분기if/else 로직
지연대기 (초/분/시간/일)
병렬 실행여러 스텝 동시 실행
반복배열 순회하며 스텝 실행

예제 1: 신규 회원 온보딩

시나리오

회원가입 → 환영 이메일 → 1일 후 프로필 확인 → 리마인드 또는 쿠폰 발송

워크플로우 설계

[트리거: users.created]
       |
       v
[함수: send-welcome-email]
       |
       v
[지연: 1일]
       |
       v
[함수: check-profile-completed]
       |
       v
[조건: isCompleted == true?]
   |               |
   v               v
  Yes             No
   |               |
   v               v
[send-coupon]  [send-reminder]
   |               |
   v               v
[종료]         [지연: 3일]
                   |
                   v
               [check-profile]
                   |
                   v
               [조건 분기]
                   |
          Yes ----+---- No
           |            |
           v            v
       [coupon]      [종료]

1. 콘솔에서 워크플로우 생성

  1. 콘솔 > 워크플로우 > 새 워크플로우
  2. 이름: user-onboarding
  3. 트리거: 데이터 이벤트 > users 테이블 > created

2. 이메일 발송 함수 만들기

send-email.js:

javascript
// 환경 변수: RESEND_API_KEY (이메일 서비스 API 키)

export default async function handler(request, context) {
  const { to, subject, template, data } = request.body

  // 템플릿 렌더링
  const templates = {
    welcome: (d) => `
      <h1>환영합니다, ${d.name}님!</h1>
      <p>Connect Base에 가입해주셔서 감사합니다.</p>
      <a href="https://myapp.com/profile">프로필 완성하기</a>
    `,
    reminder: (d) => `
      <h1>${d.name}님, 프로필을 완성해주세요!</h1>
      <p>프로필을 완성하면 10% 할인 쿠폰을 드립니다.</p>
    `,
    coupon: (d) => `
      <h1>축하합니다, ${d.name}님!</h1>
      <p>첫 구매 10% 할인 쿠폰: <strong>WELCOME10</strong></p>
    `
  }

  const html = templates[template](data)

  // Resend API로 이메일 발송
  const response = await fetch('https://api.resend.com/emails', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${context.env.RESEND_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ from: '[email protected]', to, subject, html })
  })

  return { success: response.ok }
}

3. 프로필 확인 함수 만들기

check-profile.js:

javascript
export default async function handler(request, context) {
  const { userId } = request.body
  const db = context.database

  const user = await db.table('users').doc(userId).get()
  const requiredFields = ['name', 'phone', 'address']
  const isCompleted = requiredFields.every(field => user[field])

  return {
    isCompleted,
    userId,
    name: user.name,
    email: user.email
  }
}

4. 워크플로우 스텝 구성

순서스텝설정
1함수 호출send-email (template: welcome)
2지연1일
3함수 호출check-profile
4조건 분기{{steps.3.isCompleted}} == true
4-Yes함수 호출send-email (template: coupon)
4-No함수 호출send-email (template: reminder)
5지연3일 (No 분기 이후)
6함수 호출check-profile
7조건 분기최종 체크

예제 2: 주문 처리 자동화

시나리오

주문 생성 → 재고 확인 → 결제 처리 → 배송 시작

[트리거: orders.created]
       |
       v
[함수: check-inventory]
       |
       v
[조건: 재고 있음?]
   |           |
  No          Yes
   |           |
   v           v
[알림]    [process-payment]
   |           |
   v           v
[종료]    [조건: 결제 성공?]
              |           |
             No          Yes
              |           |
              v           v
          [알림]     [병렬 실행]
                        |
            +-----------+-----------+
            |           |           |
            v           v           v
      [재고 차감]  [확인 메일]  [배송 생성]

예제 3: 일일 리포트 생성

스케줄 트리거 설정

Cron: 0 9 * * * (매일 오전 9시)

데이터 집계 함수

aggregate-daily-data.js:

javascript
export default async function handler(request, context) {
  const db = context.database

  const yesterday = new Date()
  yesterday.setDate(yesterday.getDate() - 1)
  const startOfDay = new Date(yesterday.setHours(0, 0, 0, 0))
  const endOfDay = new Date(yesterday.setHours(23, 59, 59, 999))

  // 주문 통계
  const orders = await db.table('orders').find({
    where: { createdAt: { $gte: startOfDay, $lte: endOfDay } }
  })

  const totalRevenue = orders.reduce((sum, o) => sum + o.amount, 0)

  // 신규 가입자
  const newUsers = await db.table('users').find({
    where: { createdAt: { $gte: startOfDay, $lte: endOfDay } }
  })

  return {
    date: startOfDay.toISOString().split('T')[0],
    metrics: {
      totalRevenue,
      orderCount: orders.length,
      newUserCount: newUsers.length
    }
  }
}

변수 사용법

트리거 데이터

{{trigger.data}}          // 전체 데이터
{{trigger.data.id}}       // 특정 필드
{{trigger.event}}         // 이벤트 타입

스텝 결과

{{steps.1.result}}                    // 1번 스텝 결과
{{steps.check-profile.isCompleted}}   // 이름으로 참조

조건식 예시

{{steps.1.amount}} > 10000
{{steps.2.status}} == "success"
{{steps.3.items.length}} > 0

실행 모니터링

콘솔 > 워크플로우 > 실행 이력:

  • 실행 상태: 진행 중 / 완료 / 실패
  • 각 스텝 결과: 입력/출력 데이터
  • 소요 시간: 전체 및 스텝별
  • 에러 로그: 실패 원인 상세

재시도 설정

설정설명
재시도 횟수최대 3회
재시도 간격지수 백오프 (1분, 5분, 15분)
재시도 조건5xx 에러, 타임아웃

워크플로우 실행

📌 connectbase-client SDK 에는 워크플로우 실행/조회 메서드가 포함되어 있지 않습니다. 워크플로우는 다음 방법으로 트리거합니다:

  1. 콘솔에서 직접 "수동 실행" 버튼 클릭
  2. 스케줄 트리거 — 콘솔에서 cron 스케줄 등록 (자동 실행)
  3. 데이터 이벤트 트리거 — 특정 테이블의 row 변경 시 자동 실행
  4. 외부 webhook URL 트리거 — 콘솔의 워크플로우 트리거 설정에서 발급된 webhook URL 을 외부 서비스에 등록

콘솔 사용자 JWT 가 있다면 POST /v1/apps/:appID/workflows/:workflowID/execute 엔드포인트로 직접 실행할 수도 있지만, SDK 의 Public Key 인증으로는 호출할 수 없습니다.

typescript
// 데이터 이벤트로 워크플로우 트리거 (가장 흔한 패턴)
// 예: tbl_orders 에 row 가 생성되면 자동으로 워크플로우 실행
await cb.database.createData('tbl_orders', {
  data: { user_id: 'member_xxx', amount: 50000 }
})
// → 콘솔에서 "tbl_orders.created" 이벤트로 등록된 워크플로우들이 자동 실행됨

실행 상태와 결과는 콘솔의 워크플로우 → 실행 이력 에서 확인하세요.

이 튜토리얼이 도움이 됐나요?