워크플로우로 업무 자동화
워크플로우로 업무 자동화 — 트리거 · 조건 · 액션을 조합해 비즈니스 프로세스를 자동화합니다
고급데이터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. 콘솔에서 워크플로우 생성
- 콘솔 > 워크플로우 > 새 워크플로우
- 이름:
user-onboarding - 트리거: 데이터 이벤트 >
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-clientSDK 에는 워크플로우 실행/조회 메서드가 포함되어 있지 않습니다. 워크플로우는 다음 방법으로 트리거합니다:
- 콘솔에서 직접 "수동 실행" 버튼 클릭
- 스케줄 트리거 — 콘솔에서 cron 스케줄 등록 (자동 실행)
- 데이터 이벤트 트리거 — 특정 테이블의 row 변경 시 자동 실행
- 외부 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" 이벤트로 등록된 워크플로우들이 자동 실행됨실행 상태와 결과는 콘솔의 워크플로우 → 실행 이력 에서 확인하세요.
이 튜토리얼이 도움이 됐나요?