로그인

사용 시나리오 가이드

Clawdbot의 실제 사용 예시와 시나리오

📋 목록

1. 개인 생산성

시나리오 1.1: 일정 관리

상황: 하루 종료 시에 다음 날 일정 정리
사용법:
WhatsApp 또는 Telegram에서:

"내일 하루를 정리해줘"
"오늘 있었던 회의 내용을 요약해줘"
"다음 주 목표를 정리해줘"
에이전트 응답:
Clawdbot이 자동으로:
1.
이메일 확인 (Webmail/Google Mail)
2.
캘더 앱 확인 (if configured)
3.
회의 기록에서 주요 이슈 추출
4.
우선순위 부여
5.
정리된 일정 반환
필요 설정:
# 캘더 통합 (선택적)
clawdbot config set integrations.calendar.enabled true
clawdbot config set integrations.calendar.provider "google"

# 이메일 통합 (선택적)
clawdbot config set integrations.email.enabled true
clawdbot config set integrations.email.provider "imap"

시나리오 1.2: 문서 작성

상황: 회의 내용을 바탕으로 문서 작성
사용법:
WhatsApp에서:

"회의 내용을 바탕으로 메모를 작성해줘"
"다음 회의를 위한 아젠다를 작성해줘"
"이슈 리스트를 정리해줘"
에이전트 응답:
Clawdbot이 다음 작업을 수행:
1.
회의 녹음/메모 확인
2.
주요 내용 요약
3.
구조화된 문서 작성
4.
Markdown 형식으로 저장
저장 경로: ~/clawd/workspace/output/meeting-notes.md

시나리오 1.3: 이메일 처리

상황: 이메일 우선순위 정리 및 답변 초안 작성
사용법:
이메일에서:

"오늘 온 이메일을 우선순위로 정리해줘"
"중요한 이메일에 대한 답변 초안을 작성해줘"
"스팸 메일에 대한 응답을 작성해줘"
에이전트 응답:
Clawdbot이 다음 작업을 수행:
1.
이메일 목록 분석 (IMAP API)
2.
우선순위 알고리즘 적용
3.
긴급한 이메일 먼저 답변 초안 작성
4.
이메일 초안을 클립보드에 복사

시나리오 1.4: 코드 리뷰

상황: GitHub PR을 자동으로 리뷰
사용법:
Slack에서:

"이 PR을 리뷰해줘: https://github.com/user/repo/pull/123"

GitHub 링크 전송 후 Clawdbot이:
1. PR 내용 분석
2. 코드 변경사항 확인
3. 버그 또는 개선사항 식별
4. 구조화된 리뷰 작성
에이전트 응답:
리뷰 요약:
- PR #123: "새로운 기능 추가"
- 변경사항: 5개 파일 수정, 300줄 추가
- 발견된 이슈: 3개 (2개 버그, 1개 개선사항)
- 승인: ✅ (코드 품질 양호, 테스트 충분)
- 권장사항: ...

2. 콘텐츠 크레이션

시나리오 2.1: 팀 채팅 중앙화

상황: 여러 채널에서의 대화를 한곳에서 모니터링
사용법:
Discord에서:

"WhatsApp에서 온 메시지를 정리해줘"
"Slack에서 논의 중인 주제를 요약해줘"
"Telegram에서의 투표 내용을 요약해줘"
에이전트 응답:
Clawdbot이 모든 채널에서 수신된 메시지를 분석하고 통합 요약을 제공:
채널별 요약:

WhatsApp (개인 DM):
- 발신자: A님
- 내용: 프로젝트 일정 문의
- 중요도: 높음

Slack (팀 채널):
- 채널: #development
- 활동량: 지난 1시간 동안 25개 메시지
- 주제: Q3 리뷰 준비, 코드 리팩토링
- 결론: 개발자들이 Q3 리뷰를 진행 중

Telegram (그룹):
- 채널: @project_updates
- 활동량: 지난 24시간 동안 15개 메시지
- 주제: 신규 기능 발표
- 결론: 새로운 기능이 곧 출시될 예정

통합 요약:
- 총 3개 채널에서 활동 발생
- 주요 이슈: Q3 리뷰 준비, 새로운 기능 발표
- 권장사항: WhatsApp에서의 일정 문의를 우선 처리 필요

시나리오 2.2: 멀티채널 협업

상황: 프로젝트 멤버들이 다른 채널에서 동시에 작업
사용법:
Discord에서:

"WhatsApp 그룹에서 논의된 내용을 Slack 팀 채널로 전달해줘"
"Slack에서 결정된 사항을 Telegram 그룹으로 알려줘"
에이전트 응답:
Discord (WhatsApp 그룹) → Slack:
"Q3 리뷰 준비를 위해 다음 아젠다를 정리했습니다:

1. API 엔드포인트 리팩토링 완료
2. 프론트엔드 캐싱 최적화
3. 테스트 케이스 작성 완료

다음 단계: 프론트엔드 테스트 시작"

Slack → Telegram (프로젝트 그룹):
"아젠다 항목 전달:

1. API 리팩토링 완료 ✅
2. 프론트엔드 캐싱 최적화 ✅
3. 테스트 케이스 작성 완료 ✅

예상 완료 시간: 이번 주 금요일 오후"

시나리오 2.3: 공지 브로드캐스팅

상황: 중요한 공지를 모든 채널에 동시에 전송
사용법:
CLI에서:

# 모든 채널에 동시 전송
clawdbot send \
  --to "whatsapp:+1234567890,telegram:@group1,slack:channel:U12345" \
  --message "⚠️ 긴급: 서버 점검 예정 ⚠️"

# 또는 특정 채널만
clawdbot send --to "whatsapp:*" --message "공지 내용"

3. 연구 및 학습

시나리오 3.1: 문서 분석

상황: 여러 개념서/논문을 분석하여 인사이트 도출
사용법:
WhatsApp에서:

"~/Documents/papers 디렉토리에 있는 모든 PDF를 분석해줘"
"주요 개념들을 추출하고 비교해줘"
"요약 문서를 작성해줘"
에이전트 응답:
Clawdbot이 다음 작업을 수행:
1.
PDF 파일들을 순차적으로 읽음 (read tool)
2.
각 문서에서 텍스트 추출
3.
주요 개념과 키워드 식별
4.
개념별 빈도 빈도 분석
5.
통합 요약 문서 작성
분석 결과:

1. 문서 1 (machine_learning.pdf):
   - 주요 개념: 신경망, 딥러닝, CNN, RNN
   - 빈도: 높음 (20회)

2. 문서 2 (software_architecture.pdf):
   - 주요 개념: 마이크로서비스, 이벤트 기반 아키텍처, REST API, GraphQL
   - 빈도: 중간 (12회)

3. 문서 3 (distributed_systems.pdf):
   - 주요 개념: 분산 시스템, 컨센서스 패턴, CAP 이론
   - 빈도: 낮음 (5회)

공통 개념:
- "아키텍처"가 세 문서 모두에서 언급됨
- "분산"과 "마이크로서비스"가 상호 보완 관계

요약:
세 문서는 주로 분산 시스템 아키텍처와 관련이며, 마이크로서비스 패턴과 CAP 이론에 초점을 두고 있습니다.

시나리오 3.2: 코드 리서치

상황: 특정 주제의 GitHub 리포지토리를 리서치하고 베스트 프랙티스 수집
사용법:
Telegram에서:

"TypeScript 타입 가드 관련 리포지토리를 리서치해줘"
"베스트 프랙티스를 10개 찾아줘"
"각 프랙티스의 장단점을 분석해줘"
에이전트 응답:
리서치 결과:

조건:
- 주제: TypeScript 타입 가드
- 검색 키워드: type guard, conditional types, utility types
- 리포지토리 수: 50개

상위 10개 리포지토리:

1. ts-pattern-community/type-predicate
   - 스타: ⭐ 5,200
   - 설명: 타입 시스템에서 프리디케이트 생성
   - 장점: 컴파일 타임 최적화, 직관적인 API
   - 단점: 복잡한 설정, 러닝 곡선 높음

2. ts-toolbelt/type-fest
   - 스타: ⭐ 7,100
   - 설명: TypeScript 프로그래밍을 위한 유틸리티 타입
   - 장점: 풍부한 기능, 훌륭한 문서
   - 단점: 파일 크기 큼, 로드 타임 길음

3. ts-essentials/build
   - 스타: ⭐ 4,900
   - 설명: 빌드 타임 최적화를 위한 도구 모음
   - 장점: 빌드 속도 향상, 타입 안정성
   - 단점: 빌드 툴체인 설정 복잡

... (총 10개 리포지토리 분석)

베스트 프랙티스:
- 가장 일반적으로 사용되는 3개: ts-pattern-community/type-predicate, ts-toolbelt/type-fest, ts-essentials/build
- 권장: "범용적인 프로젝트에서는 ts-toolbelt/type-fest를 권장"
- 대안: "zod 같은 런타임 검증 라이브러리도 고려"

시나리오 3.3: 웹 스크래핑

상황: 웹사이트에서 정보를 수집하고 분석
사용법:
WhatsApp에서:

"https://example.com 사이트를 스크래핑해줘"
"모든 기사 제목을 추출해줘"
"제목별 요약을 작성해줘"
에이전트 응답:
Clawdbot이 다음 작업을 수행:
1.
브라우저 자동화로 해당 사이트 탐색
2.
페이지에서 모든 기사 링크 추출
3.
각 기사로 이동 후 제목 요약
4.
통합 결과를 JSON/Markdown으로 저장
스크래핑 결과:

사이트: https://example.com

수집된 기사: 25개

상위 5개 기사 요약:

1. "AI 기술 동향 2026년 1월 전망"
   - 링크: https://example.com/article/1
   - 요약: 생성형 AI 모델이 대중적으로 도입되고 있으며, 오픈소스 모델들이 빠르게 성장하고 있습니다.

2. "클라우드 네이티브 서비스 비교"
   - 링크: https://example.com/article/2
   - 요약: AWS, Azure, GCP의 네이티브 서비스를 비교 분석했습니다.

3. "데이터 프라이버시 보안 베스트 프랙티스"
   - 링크: https://example.com/article/3
   - 요약: 최신 데이터 프라이버시 보안 표준과 베스트 프랙티스를 정리했습니다.

4. "서버리스 컨테이너화 전략"
   - 링크: https://example.com/article/4
   - 요약: 마이크로서비스 컨테이너화를 위한 전략과 도구들을 분석했습니다.

5. "오픈소스 라이선스 전략"
   - 링크: https://example.com/article/5
   - 요약: 기업의 오픈소스 채택 전략과 법적 고려사항을 정리했습니다.

전체 요약:
AI 기술 동향, 클라우드 비교, 보안, 컨테이너, 오픈소스 등 다양한 주제를 다루고 있습니다.

4. 개발 테스트

시나리오 4.1: 자동화된 테스트 케이스 작성

상황: 새로운 기능에 대한 테스트 케이스 자동 작성
사용법:
Telegram에서:

"이 기능에 대한 테스트 케이스를 작성해줘:
- 기능: 사용자 인증
- 테스트 케이스:
  1. 정상적인 로그인
  2. 잘못된 비밀번호
  3. 만료된 토큰
  4. 계정 잠금
  5. 연속 실패 시도 (DoS 방어)"
에이전트 응답:
생성된 테스트 케이스: tests/auth.test.ts

import { describe, it, expect } from 'vitest';
import { AuthService } from '../src/auth';

describe('사용자 인증', () => {
  it('정상적인 로그인', async () => {
    const result = await AuthService.login('valid-user', 'valid-password');
    expect(result.success).toBe(true);
    expect(result.token).toBeDefined();
  });

  it('잘못된 비밀번호', async () => {
    const result = await AuthService.login('valid-user', 'wrong-password');
    expect(result.success).toBe(false);
    expect(result.error).toBe('InvalidCredentials');
  });

  it('만료된 토큰', async () => {
    const result = await AuthService.login('valid-user', 'valid-password', 'expired-token');
    expect(result.success).toBe(false);
    expect(result.error).toBe('TokenExpired');
  });

  it('계정 잠금', async () => {
    const result = await AuthService.login('locked-user', 'valid-password');
    expect(result.success).toBe(false);
    expect(result.error).toBe('AccountLocked');
  });

  it('연속 실패 시도 (DoS 방어)', async () => {
    for (let i = 0; i < 5; i++) {
      const result = await AuthService.login('user', 'wrong-password');
      expect(result.success).toBe(false);
    }
    // 6번째 시도는 속도 제한으로 차단됨
    const rateLimitedResult = await AuthService.login('user', 'wrong-password');
    expect(rateLimitedResult.error).toBe('RateLimited');
  });
});

시나리오 4.2: CI/CD 파이프라인 설정

상황: GitHub Actions로 CI/CD 파이프라인 자동 설정
사용법:
Discord에서:

"이 프로젝트를 위한 GitHub Actions 워크플로우를 설정해줘:
- Node.js 테스트
- TypeScript 빌드
- Docker 이미지 빌드
- 배포 자동화

프로젝트: https://github.com/user/myproject"
에이전트 응답:
Clawdbot이 다음 작업을 수행:
1.
GitHub CLI로 리포지토리 복제
2.
.github/workflows 디렉토리 생성
3.
CI/CD 워크플로우 파일 작성
4.
GitHub에 푸시
생성된 워크플로우: .github/workflows/ci.yml

name: CI/CD

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: npm run build

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t myproject .
      - name: Deploy
        run: docker push myproject registry.example.com/myproject

시나리오 4.3: API 테스트 자동화

상황: REST API 엔드포인트들에 대한 통합 테스트 수행
사용법:
Slack에서:

"다음 API 엔드포인트들에 대한 테스트 코드를 작성해줘:
- GET /api/users
- POST /api/users
- GET /api/users/:id
- PUT /api/users/:id
- DELETE /api/users/:id

각 엔드포인트에 대해:
- 성공 케이스
- 실패 케이스
- 에지 케이스"
에이전트 응답:
생성된 테스트 파일: tests/api/users.test.ts

import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import request from 'supertest';
import { app } from '../src/app';
import { setupTestDatabase, teardownTestDatabase } from '../test-utils';

describe('API: /api/users', () => {
  let authToken: string;
  let testUserId: string;

  beforeAll(async () => {
    // 테스트용 사용자 생성 및 인증
    const response = await request(app)
      .post('/api/auth/login')
      .send({ username: 'testuser', password: 'testpass' });
    authToken = response.body.token;
    
    // 테스트 유저 생성
    const userResponse = await request(app)
      .post('/api/users')
      .set('Authorization', `Bearer ${authToken}`)
      .send({
        username: 'test_api_user',
        email: 'test@example.com',
        password: 'testpass'
      });
    testUserId = userResponse.body.id;
  });

  afterAll(async () => {
    // 테스트 데이터 정리
    await teardownTestDatabase();
  });

  describe('GET /api/users', () => {
    it('성공: 전체 사용자 목록 반환', async () => {
      const response = await request(app)
        .get('/api/users')
        .set('Authorization', `Bearer ${authToken}`);
      
      expect(response.status).toBe(200);
      expect(Array.isArray(response.body)).toBe(true);
      expect(response.body.length).toBeGreaterThan(0);
    });

    it('실패: 인증 없음', async () => {
      const response = await request(app).get('/api/users');
      expect(response.status).toBe(401);
    });
  });

  describe('POST /api/users', () => {
    it('성공: 사용자 생성', async () => {
      const newUser = {
        username: 'newuser',
        email: 'new@example.com',
        password: 'password123'
      };
      
      const response = await request(app)
        .post('/api/users')
        .set('Authorization', `Bearer ${authToken}`)
        .send(newUser);
      
      expect(response.status).toBe(201);
      expect(response.body.username).toBe(newUser.username);
      expect(response.body.email).toBe(newUser.email);
      expect(response.body.id).toBeDefined();
    });

    it('실패: 중복 사용자명', async () => {
      const duplicateUser = {
        username: 'test_api_user',  // 이미 존재
        email: 'new2@example.com',
        password: 'password456'
      };
      
      const response = await request(app)
        .post('/api/users')
        .set('Authorization', `Bearer ${authToken}`)
        .send(duplicateUser);
      
      expect(response.status).toBe(400);
      expect(response.body.error).toBe('UsernameAlreadyExists');
    });

    it('실패: 잘못된 이메일 형식', async () => {
      const invalidUser = {
        username: 'newuser2',
        email: 'invalid-email',
        password: 'password789'
      };
      
      const response = await request(app)
        .post('/api/users')
        .set('Authorization', `Bearer ${authToken}`)
        .send(invalidUser);
      
      expect(response.status).toBe(400);
      expect(response.body.error).toBe('InvalidEmailFormat');
    });
  });

  describe('GET /api/users/:id', () => {
    it('성공: 특정 사용자 조회', async () => {
      const response = await request(app)
        .get(`/api/users/${testUserId}`)
        .set('Authorization', `Bearer ${authToken}`);
      
      expect(response.status).toBe(200);
      expect(response.body.id).toBe(testUserId);
      expect(response.body.username).toBe('test_api_user');
    });

    it('실패: 존재하지 않는 사용자', async () => {
      const response = await request(app)
        .get('/api/users/nonexistent-id')
        .set('Authorization', `Bearer ${authToken}`);
      
      expect(response.status).toBe(404);
      expect(response.body.error).toBe('UserNotFound');
    });
  });

  describe('PUT /api/users/:id', () => {
    it('성공: 사용자 정보 업데이트', async () => {
      const updates = {
        email: 'updated@example.com'
      };
      
      const response = await request(app)
        .put(`/api/users/${testUserId}`)
        .set('Authorization', `Bearer ${authToken}`)
        .send(updates);
      
      expect(response.status).toBe(200);
      expect(response.body.email).toBe(updates.email);
    });

    it('실패: 권한 없음', async () => {
      const otherUserToken = 'different-auth-token';
      const updates = { email: 'forbidden@example.com' };
      
      const response = await request(app)
        .put(`/api/users/${testUserId}`)
        .set('Authorization', `Bearer ${otherUserToken}`)
        .send(updates);
      
      expect(response.status).toBe(403);
    });
  });

  describe('DELETE /api/users/:id', () => {
    it('성공: 사용자 삭제', async () => {
      const response = await request(app)
        .delete(`/api/users/${testUserId}`)
        .set('Authorization', `Bearer ${authToken}`);
      
      expect(response.status).toBe(204);
    });

    it('실패: 권한 없음', async () => {
      const otherUserToken = 'different-auth-token';
      
      const response = await request(app)
        .delete(`/api/users/${testUserId}`)
        .set('Authorization', `Bearer ${otherUserToken}`);
      
      expect(response.status).toBe(403);
    });
  });
});

📊 시나리오 요약

범주
시나리오 수
주요 도구
예상 효율
개인 생산성
4
이메일, 캔더, 브라우저
높음
콘텐츠 크레이션
3
멀티채널 통합
매우 높음
연구 및 학습
3
웹 스크래핑, 문서 분석
중간
개발 테스트
3
브라우저, 파일 시스템
높음

🎯 실용적인 팁

1.
시나리오별로 세션 사용: 각 프로젝트나 작업 유형에 별도의 세션을 사용하여 컨텍스트 격리
2.
에이전트에 컨텍스트 제공: "개인 프로젝트 관리를 위한 채팅 세션입니다"와 같이 명확한 컨텍스트 제공
3.
도구 결합 사용: 브라우저 + 파일 시스템 + 이메일 통합을 함께 사용하여 자동화 극대화
4.
캔버스 활용: 복잡한 시각화가 필요한 경우 Canvas/A2UI 사용
5.
멀티채널 활용: 여러 채널에서 동시에 협업 필요한 시나리오에서 세션 도구 활용

🔗 관련 문서