Skip to content

백엔드 개발자의 AI 비서 만들기 (5편) - Discord 7개 채널로 생활을 자동화하기

📚 시리즈: 백엔드 개발자의 AI 비서 만들기

5 / 5
  1. 1당근마켓에서 Mac mini를 주워온 날
  2. 248개의 크론잡으로 살아나다
  3. 3MEMORY.md 20KB가 에이전트를 죽였다
  4. 4오픈소스 12 Stars의 현실
  5. 5Discord 7개 채널로 생활을 자동화하기지금 읽는 중
백엔드 개발자의 AI 비서 만들기 (5편) - Discord 7개 채널로 생활을 자동화하기

시리즈 안내

이 시리즈에서 다룬 내용:


TL;DR

  • 상황: AI 비서를 만들었는데, 모든 메시지가 한 채널에 쏟아짐
  • 원인: 주식 알림, 시스템 로그, 일상 대화가 뒤섞여서 중요한 걸 놓침
  • 해결: Discord 채널 7개를 역할별로 분리 + 채널별 AI 모델 차등 배치
  • 효과: 알림 놓침 0건, 월 API 비용 약 30% 절감
  • 한계: Discord 무료 플랜 제약, 모바일 알림 피로


왜 Discord인가

AI 비서를 만들면 첫 번째 고민이 “어디서 대화할 것인가”입니다.

Telegram 봇, Slack, 직접 만든 웹 UI… 선택지는 많았는데, 결국 Discord를 골랐습니다. 이유는 단순했습니다. 채널을 무제한으로 만들 수 있고, 봇 권한 관리가 세밀하고, 무료입니다. Slack은 무료 플랜에서 메시지 90일 제한이 있었고, Telegram은 채널 분리가 어려웠습니다.

결정적으로, 저는 이미 Discord를 매일 쓰고 있었습니다. 새 앱을 깔 필요가 없다는 게 생각보다 큰 장점이었습니다.



한 채널의 한계

처음에는 채널 하나로 시작했습니다. #jarvis라는 채널에서 모든 걸 처리했습니다.

[06:15] 모닝 브리핑: TQQQ +2.3%, 오늘 일정 2건
[06:20] 시스템: Health Check 실패, 재시작 중...
[07:50] 조식비 알림: 30분 내 출근하면 5천원 획득
[09:00] 시스템: 크론 에러 - Kakao OAuth 토큰 만료
[12:30] 주식: TQQQ -4.2% 급락 알림
[18:00] 퇴근 브리핑: 오늘 복지비 2만원 사용
[21:00] 시스템: Emergency Recovery 트리거됨

문제가 금방 보이시죠. 시스템 로그 사이에 주식 알림이 끼어 있고, 조식비 알림 사이에 에러 로그가 섞여 있습니다. 아침에 Discord를 열면 읽지 않은 메시지가 20개씩 쌓여 있는데, 뭐가 중요한 건지 한눈에 안 들어왔습니다.

TQQQ가 4% 급락했는데, 시스템 로그 사이에 묻혀서 두 시간 뒤에야 봤습니다. 이건 좀 심각했습니다.



채널 설계

백엔드 개발할 때 로그 레벨을 나누는 것과 비슷한 발상이었습니다. ERROR, WARN, INFO, DEBUG를 한 파일에 다 쓰면 못 읽듯이, 메시지도 성격별로 분리해야 합니다.

최종적으로 7개 채널로 나눴습니다.

#jarvis          — 메인 대화 (일상, 질문, 브리핑)
#jarvis-market   — 주식/경제 모니터링
#jarvis-system   — 시스템 로그, 에러, 헬스체크
#jarvis-dev      — 개발/디버깅 전용
#jarvis-family   — 가족 알림 (약 먹기, 일정)
#jarvis-preply   — 와이프 한국어 수업 지원
#jarvis-cron     — 크론잡 실행 로그

설계 원칙은 간단했습니다. “이 채널의 알림을 꺼도 괜찮은가?” 그렇다면 분리할 가치가 있는 채널입니다.

#jarvis#jarvis-market은 알림을 켜두고, #jarvis-system#jarvis-cron은 꺼뒀습니다. 시스템 로그는 문제가 생겼을 때만 보면 되니까요. 이것만으로도 알림 피로가 확 줄었습니다.



채널별 AI 모델 분리

여기서 한 단계 더 갔습니다. 채널마다 다른 AI 모델을 배치했습니다.

# OpenClaw 설정 (간소화)
channels:
  jarvis:          # 메인 대화
    model: claude-sonnet-4-5
  jarvis-market:   # 주식 모니터링
    model: claude-sonnet-4-5
  jarvis-system:   # 시스템 로그
    model: claude-sonnet-4-5
  jarvis-dev:      # 개발/디버깅
    model: claude-opus-4-6
  jarvis-preply:   # 한국어 수업
    model: claude-opus-4-6

로직은 이렇습니다. 대부분의 채널은 Sonnet으로 충분합니다. 모닝 브리핑, 주식 시세 조회, 시스템 상태 체크 같은 건 정형화된 작업이라 가벼운 모델이면 됩니다.

반면 #jarvis-dev#jarvis-preply는 Opus를 씁니다. 코드 디버깅은 복잡한 추론이 필요하고, 한국어 수업 교정은 문맥 이해가 중요하거든요. 이 두 채널은 사용 빈도가 낮아서 비용 부담도 적습니다.

크론잡에도 같은 원칙을 적용했습니다. 48개 크론 중 대부분은 Haiku로 돌립니다. 모닝 브리핑, 날씨 체크, 주식 모니터링 같은 정형 작업은 Haiku면 충분합니다. Sonnet은 분석이 필요한 크론에만 쓰고, Opus는 주간 자기평가 감사 같은 특수 크론에만 할당합니다.



크론잡 설계

48개 크론의 전체 목록을 공개하진 않겠지만, 카테고리별로 어떤 것들이 있는지 소개합니다.

일상 자동화

매일 반복되는 알림들입니다. 사소해 보이지만, 이게 쌓이면 꽤 편합니다.

06:15  모닝 브리핑 (날씨, 일정, 주식, 출근 경로)
07:50  조식비 알림 (8시 30분 전 출근 시 5천원)
17:00  퇴근 브리핑 (퇴근 경로, 오늘 복지비 정산)
21:00  내일 일정 미리보기

모닝 브리핑이 제일 복잡합니다. 날씨 API, Google Calendar, 주식 시세, 대중교통 API를 전부 호출해서 하나의 메시지로 만듭니다. 출근 경로는 “오늘 관훈 출근인지 사조빌딩 출근인지”에 따라 달라지는데, 이건 매주 일요일 저녁에 미리 확인해둡니다.

주식 모니터링

장 시작 전   미국 장 마감 요약
장중 (1시간) TQQQ 변동 체크 (±4% 알림)
장 마감 후   일일 수익률 정리

주식 모니터링은 #jarvis-market 채널로만 갑니다. Yahoo Finance API로 15분 지연 데이터를 가져오는데, 실시간이 필요하면 토스증권 앱을 직접 봅니다. 15분 지연이면 급등락 알림이 늦을 수 있지만, 레버리지 ETF가 아닌 이상 대부분 충분합니다. TQQQ는 3배 레버리지라 4% 변동이 자주 일어나서 임계값을 좀 높게 잡았습니다.

시스템 모니터링

55분 간격   하트비트 (상태 체크 + 프로액티브 작업)
2시간 간격  크론 에러 자동 수정
22:30      일일 시스템 리포트
03:15      Nightly Build (새벽 유지보수)

하트비트가 재미있는 구조인데, 단순히 “살아있니?” 체크가 아닙니다. 55분마다 에이전트가 깨어나서 Gmail 확인, 캘린더 체크, 디스크 용량 확인, MEMORY.md 크기 체크까지 한 번에 돌립니다. 55분 간격인 이유는 OpenClaw의 프롬프트 캐시 TTL이 1시간이라서, 캐시가 만료되기 직전에 갱신하면 토큰을 절약할 수 있기 때문입니다.

Nightly Build는 제가 자는 동안 돌아갑니다. Git 상태 체크, 로그 파일 정리, 의존성 업데이트 확인 같은 유지보수 작업을 합니다. 아침에 일어나면 “어젯밤에 이런 것들 정리했습니다”라고 보고가 와 있습니다.

가족 알림

08:00  어머님 약 복용 알림 (#jarvis-family 전용)
21:00  어머님 저녁 약 알림

이건 #jarvis-family 채널에서만 동작합니다. 다른 채널에서 약 알림이 뜨면 안 되니까요. 단순한 기능이지만, 어머님이 약을 빼먹는 일이 줄었습니다.



한국어 숙제 교정 봇

#jarvis-preply 채널은 좀 특수합니다. 와이프가 Preply에서 외국인에게 한국어를 가르치는데, 학생들이 숙제를 사진으로 보내면 교정해줘야 합니다.

동작 방식은 이렇습니다.

  1. 학생 숙제 이미지를 채널에 업로드
  2. “교정해줘”라고 입력
  3. Google Vision API로 손글씨 인식
  4. 오류 감지 + 빨간 밑줄 마킹된 이미지 생성
  5. 10점 만점 평가 점수와 함께 전송

Google Vision API의 text_detection으로 개별 글자 좌표를 추출하고, 글자 단위로 영역을 병합해서 정확한 위치에 마킹합니다. “아ㅍ요” 같은 불완전한 글자도 잡아냅니다.

이건 기술적으로 꽤 재미있었는데, 자세한 구현은 별도 포스트로 다룰 수 있을 것 같습니다. 핵심만 말하면, Google Vision API가 월 1,000건 무료라서 비용 부담이 없고, 손글씨 인식 정확도가 95% 이상이었습니다.



비용 구조

솔직히 공개하겠습니다.

OpenClaw는 Anthropic API를 씁니다. 모델별 토큰 단가가 다르고, 48개 크론이 하루 수백 번 돌기 때문에 비용 관리가 중요합니다.

모델 분리 전에는 모든 크론이 Sonnet으로 돌았습니다. 분리 후에는 대부분을 Haiku로 내렸습니다. Haiku는 Sonnet 대비 약 10분의 1 가격입니다. 정형화된 작업(시세 조회, 날씨 체크, 상태 보고)은 Haiku로도 품질 차이가 거의 없었습니다.

비용 모니터링도 자동화했습니다. 매일 22:30에 일일 리포트가 오는데, Claude API 사용량, OpenAI API 사용량(Whisper 음성인식), Brave Search API 남은 쿼터까지 한 번에 확인할 수 있습니다. 주간 한도의 몇 퍼센트를 사용했는지가 제일 중요한 수치입니다.



실수했던 것들

처음부터 이렇게 깔끔했던 건 아닙니다.

채널을 너무 많이 만들었다가 줄였습니다. 처음에는 10개 넘게 만들었는데, #jarvis-weather, #jarvis-calendar 같은 채널은 하루에 메시지가 1-2개밖에 안 와서 의미가 없었습니다. 채널이 너무 많으면 오히려 어디를 봐야 할지 모르게 됩니다. 7개가 적당한 수였습니다.

알림 설정을 잘못 잡았습니다. 모든 채널에 알림을 켜두면 하루에 알림이 50개 넘게 옵니다. 시스템 로그 채널 알림을 끄고, 중요 채널만 켜두니까 비로소 쓸 만해졌습니다.

크론 간격을 너무 짧게 잡았습니다. 주식 모니터링을 5분마다 돌렸더니 토큰 소모가 심했습니다. 15분 지연 데이터를 5분마다 체크하는 것 자체가 의미 없었죠. 1시간으로 늘리고, ±4% 같은 임계값을 넣으니까 의미 있는 알림만 오게 됐습니다.



운영 팁

3개월 운영하면서 얻은 팁입니다.

하트비트에 여러 체크를 묶으세요. Gmail 체크, 캘린더 체크, 디스크 체크를 각각 크론으로 만들면 API 호출이 3배입니다. 하트비트 하나에 묶으면 세션 하나로 처리되니까 토큰도 절약되고, 응답도 한 번에 옵니다.

채널별 톤을 다르게 설정할 수 있습니다. #jarvis-market은 숫자 위주로 간결하게, #jarvis는 대화체로 자연스럽게. OpenClaw의 채널 설정에서 시스템 프롬프트를 채널별로 다르게 줄 수 있습니다.

HEARTBEAT.md 파일을 활용하세요. 하트비트 때마다 체크할 항목을 이 파일에 적어두면, 에이전트가 매번 읽고 실행합니다. 체크리스트를 수시로 수정할 수 있어서 유연합니다.



현재 구조

지금 운영 중인 전체 구조를 정리하면 이렇습니다.

graph TB
    subgraph "Discord Server"
        C1["#jarvis<br/>메인 대화"]
        C2["#jarvis-market<br/>주식/경제"]
        C3["#jarvis-system<br/>시스템 로그"]
        C4["#jarvis-dev<br/>개발 전용"]
        C5["#jarvis-family<br/>가족 알림"]
        C6["#jarvis-preply<br/>한국어 교정"]
        C7["#jarvis-cron<br/>크론 로그"]
    end

    subgraph "AI Models"
        S["Sonnet 4.5<br/>일반 대화, 모니터링"]
        O["Opus 4.6<br/>코딩, 분석"]
        H["Haiku 4.5<br/>크론잡 48개"]
    end

    subgraph "Data Sources"
        D1["Yahoo Finance"]
        D2["Google Calendar"]
        D3["Gmail"]
        D4["Weather API"]
        D5["Google Vision"]
        D6["Odsay 교통"]
    end

    S --> C1
    S --> C2
    S --> C3
    O --> C4
    O --> C6
    H --> C7

    D1 --> C2
    D2 --> C1
    D3 --> C1
    D4 --> C1
    D5 --> C6
    D6 --> C1

    style S fill:#e3f2fd
    style O fill:#fce4ec
    style H fill:#e8f5e9

Mac mini 한 대에서 전부 돌아갑니다. 당근마켓에서 9만원에 산 M1 Mac mini. CPU 사용률은 평소 5% 미만이고, 메모리는 8GB 중 4GB 정도 씁니다. AI 비서 치고는 꽤 가성비가 좋습니다.



다음 편 예고

채널 분리하고, 크론 정리하고, 비용 최적화까지 했습니다. 꽤 잘 돌아가고 있었는데, 한 가지 빠진 게 있었습니다. “이 비서가 진짜 제대로 일하고 있는 건 맞나?”

다음 편에서는 AI 비서의 응답 품질을 어떻게 모니터링하는지, 그리고 비서 스스로 자기 성과를 평가하게 만든 이야기를 다루겠습니다.




참고 :

https://docs.openclaw.ai
https://discord.com
https://github.com/Ramsbaby/openclaw-self-healing




읽어주셔서 감사합니다.🖐


Ramsbaby
Written byRamsbaby
이 블로그는 직접 개발/운영하는 블로그이므로 당신을 불쾌하게 만드는 불필요한 광고가 없습니다.

#My Github#소개 페이지#Blog OpenSource Github#Blog OpenSource Demo Site