들어가며

ChatGPT, Claude 같은 AI를 매번 웹에서 열어 쓰는 시대는 지났습니다. 2025년 현재, AI는 내 서버에서 24시간 상주하며 알아서 일하는 비서로 진화하고 있습니다.

OpenClaw는 Anthropic의 Claude를 핵심 두뇌로 사용하는 오픈소스 AI 에이전트 프레임워크입니다. 단순한 챗봇이 아니라, 실제로 서버의 터미널을 조작하고, 웹 브라우저를 제어하며, 파일을 읽고 쓰고, 메신저로 대화하는 자율적 AI 비서를 구축할 수 있습니다.

이 글에서는 리눅스 서버에 OpenClaw를 설치하고, 실제로 활용 가능한 수준까지 설정하는 전 과정을 다룹니다.

이 글에서 다루는 내용

  • OpenClaw 아키텍처와 핵심 개념
  • 리눅스 서버 설치 및 초기 설정
  • Telegram 메신저 연동
  • 브라우저 자동화 (CDP 연결)
  • 크론 작업과 자동화 스케줄링
  • 메모리 시스템과 페르소나 커스터마이징
  • 보안 고려사항과 운영 팁

OpenClaw란?

OpenClaw는 LLM(대규모 언어 모델) 기반 에이전트 프레임워크입니다. Claude Code의 도구 사용 능력을 활용해, AI가 단순히 텍스트를 생성하는 것을 넘어 실제 환경에서 행동할 수 있도록 합니다.

핵심 특징

기능 설명
터미널 제어 서버에서 직접 셸 명령어 실행
브라우저 자동화 Chrome을 제어하여 웹 작업 수행
메신저 통합 Telegram, Discord, Signal 등과 연동
크론 스케줄링 정해진 시간에 자동으로 작업 실행
메모리 시스템 대화 맥락과 장기 기억을 파일로 관리
멀티 세션 메인 세션과 독립 세션을 분리하여 병렬 작업
노드 연동 모바일 기기, 다른 서버와 연결

아키텍처 개요

┌─────────────────────────────────────────────────┐
│                   OpenClaw Gateway               │
│  ┌───────────┐  ┌──────────┐  ┌──────────────┐  │
│  │  Session   │  │   Cron   │  │   Channel    │  │
│  │  Manager   │  │ Scheduler│  │   Router     │  │
│  └─────┬─────┘  └────┬─────┘  └──────┬───────┘  │
│        │              │               │          │
│  ┌─────▼──────────────▼───────────────▼───────┐  │
│  │              Claude Code (LLM Core)         │  │
│  │         도구 호출 / 추론 / 계획 수립           │  │
│  └─────┬──────────┬──────────┬────────────────┘  │
│        │          │          │                    │
│  ┌─────▼───┐ ┌───▼────┐ ┌──▼─────────┐          │
│  │ Terminal │ │Browser │ │  File I/O  │          │
│  │  (exec) │ │ (CDP)  │ │ (read/edit)│          │
│  └─────────┘ └────────┘ └────────────┘          │
└─────────────────────────────────────────────────┘
         │              │              │
    ┌────▼────┐   ┌────▼─────┐  ┌────▼────┐
    │ Telegram│   │  Chrome  │  │Workspace│
    │   Bot   │   │ Browser  │  │  Files  │
    └─────────┘   └──────────┘  └─────────┘

Gateway는 OpenClaw의 핵심 데몬으로, 모든 세션과 채널, 스케줄러를 관리합니다. Claude Code가 실제 AI 추론을 담당하고, 다양한 도구(터미널, 브라우저, 파일 등)를 통해 외부 환경과 상호작용합니다.


사전 준비

시스템 요구사항

항목 최소 사양 권장 사양
OS Ubuntu 20.04+ / Rocky Linux 9+ Ubuntu 22.04 LTS
CPU 2코어 4코어+
RAM 2GB 4GB+
디스크 10GB 20GB+
Node.js v20+ v22 LTS
네트워크 인터넷 접속 필수 고정 IP 권장

💡 OpenClaw 자체는 가볍습니다. AI 추론은 Anthropic 클라우드에서 처리되므로, 서버에는 GPU가 필요 없습니다.

필요한 API 키

  • Anthropic API Key: Claude 모델 사용을 위한 필수 키 (console.anthropic.com)
  • Telegram Bot Token: 메신저 연동 시 필요 (BotFather에서 발급)

설치하기

1단계: Node.js 설치

Rocky Linux / CentOS 기준:

# NodeSource 저장소 추가
curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash -

# Node.js 설치
sudo dnf install -y nodejs

# 버전 확인
node -v   # v22.x.x
npm -v    # 10.x.x

Ubuntu / Debian 기준:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs

2단계: 전용 사용자 생성

보안을 위해 OpenClaw 전용 사용자를 생성하는 것을 권장합니다.

# openclaw 사용자 생성
sudo useradd -m -s /bin/bash openclaw

# 사용자 전환
sudo su - openclaw

3단계: OpenClaw 설치

# 글로벌 npm 경로 설정 (sudo 없이 설치하기 위함)
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# OpenClaw 설치
npm install -g openclaw

# 설치 확인
openclaw --version

4단계: 초기 설정

# 대화형 설정 시작
openclaw configure

설정 과정에서 다음 항목들을 입력합니다:

  1. Anthropic API Key: sk-ant-... 형태의 키
  2. 기본 모델: anthropic/claude-sonnet-4-5 (비용 효율적) 또는 anthropic/claude-opus-4-6 (최고 성능)
  3. 작업 디렉토리: 기본값 ~/.openclaw/workspace 사용

5단계: Gateway 시작

# Gateway 데몬 시작
openclaw gateway start

# 상태 확인
openclaw gateway status

정상적으로 시작되면 다음과 같은 출력을 볼 수 있습니다:

✔ Gateway is running
  PID: 12345
  Uptime: 5s
  Sessions: 0 active

Telegram 연동하기

OpenClaw의 가장 강력한 기능 중 하나는 메신저를 통한 자연어 제어입니다. Telegram을 연동하면 스마트폰에서 AI 비서에게 직접 지시할 수 있습니다.

BotFather에서 봇 생성

  1. Telegram에서 @BotFather를 검색하여 대화 시작
  2. /newbot 명령어 입력
  3. 봇 이름 입력 (예: My OpenClaw Bot)
  4. 봇 유저네임 입력 (예: my_openclaw_bot_bot으로 끝나야 함)
  5. 발급된 Bot Token을 복사

OpenClaw에 Telegram 설정

openclaw configure --section telegram

설정 항목:

# Telegram Bot Token
token: "7123456789:AAH..."

# 허용할 사용자 ID (보안을 위해 반드시 설정)
allowedUsers:
  - "YOUR_TELEGRAM_USER_ID"

⚠️ 보안 주의: allowedUsers를 설정하지 않으면 누구나 봇에게 명령을 내릴 수 있습니다. 반드시 자신의 Telegram User ID만 허용하세요.

Telegram User ID 확인 방법

  1. @userinfobot에게 아무 메시지나 보내면 ID를 알려줍니다
  2. 또는 @RawDataBot을 사용

연동 테스트

Gateway를 재시작한 후 Telegram에서 봇에게 메시지를 보내봅니다:

나: 안녕! 넌 누구야?
봇: 안녕하세요! 저는 OpenClaw로 구동되는 AI 비서입니다. 
    무엇을 도와드릴까요?

브라우저 자동화 설정

OpenClaw의 진정한 힘은 웹 브라우저를 직접 제어할 수 있다는 것입니다. Chrome DevTools Protocol(CDP)을 통해 Chrome 브라우저를 조작하여, 웹사이트 로그인, 폼 작성, 데이터 수집 등을 자동화할 수 있습니다.

Chrome 설치

# Rocky Linux / CentOS
sudo dnf install -y google-chrome-stable

# Ubuntu / Debian
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update && sudo apt install -y google-chrome-stable

CDP 모드로 Chrome 실행

기존 Chrome 프로필과 충돌을 방지하기 위해 별도 프로필 디렉토리를 사용합니다:

# 별도 프로필로 Chrome 실행 (디스플레이 환경 필요)
DISPLAY=:0 google-chrome-stable \
  --remote-debugging-port=9222 \
  --no-first-run \
  --no-default-browser-check \
  --user-data-dir=$HOME/.openclaw/chrome-debug

💡 핵심 포인트: 기존 Chrome 프로필(~/.config/google-chrome)로는 --remote-debugging-port가 열리지 않습니다. 반드시 별도 --user-data-dir을 지정하세요.

헤드리스 서버에서 실행 (GUI 없는 환경)

GUI 데스크톱이 없는 서버에서는 가상 디스플레이를 사용합니다:

# Xvfb 설치
sudo dnf install -y xorg-x11-server-Xvfb  # Rocky Linux
# sudo apt install -y xvfb                  # Ubuntu

# 가상 디스플레이 시작
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99

# Chrome 실행
google-chrome-stable \
  --remote-debugging-port=9222 \
  --no-first-run \
  --no-default-browser-check \
  --user-data-dir=$HOME/.openclaw/chrome-debug

OpenClaw 브라우저 설정

openclaw configure --section browser

설정 내용:

{
  "browser": {
    "cdpUrl": "http://127.0.0.1:9222",
    "defaultProfile": "openclaw",
    "noSandbox": true
  }
}

연결 확인

# CDP 엔드포인트 확인
curl -s http://127.0.0.1:9222/json/version | python3 -m json.tool

정상 응답 예시:

{
    "Browser": "Chrome/145.0.6422.60",
    "Protocol-Version": "1.3",
    "webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/..."
}

브라우저 자동화 활용 예시

Telegram에서 다음과 같은 지시를 내릴 수 있습니다:

나: 네이버에 접속해서 오늘 날씨 알려줘
봇: 네이버에 접속하여 날씨를 확인했습니다.
    서울 현재 기온 28°C, 맑음 ☀️
    오후부터 구름 많아지며 내일 비 예보가 있습니다.
나: 동행복권 사이트에서 로또 5장 사줘
봇: 로또 6/45 자동번호 5장 구매 완료했습니다! 🎰
    구매금액: 5,000원
    잔액: 42,350원

크론 작업 설정

OpenClaw의 크론 시스템을 사용하면 정해진 시간에 자동으로 AI가 작업을 수행합니다. 일반 crontab과 달리, AI가 상황을 판단하여 유연하게 대응할 수 있다는 것이 큰 장점입니다.

크론 작업 유형

OpenClaw은 두 가지 크론 페이로드를 지원합니다:

1. systemEvent (메인 세션)

메인 세션에 시스템 이벤트를 주입합니다. 간단한 알림이나 체크에 적합합니다.

{
  "sessionTarget": "main",
  "payload": {
    "kind": "systemEvent",
    "text": "일일 보안 점검을 수행하세요."
  }
}

2. agentTurn (독립 세션)

별도 세션에서 AI가 독립적으로 작업을 수행합니다. 복잡한 작업에 적합합니다.

{
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "동행복권 사이트에서 로또 6/45 자동번호 5장을 구매하세요.",
    "model": "anthropic/claude-sonnet-4-5"
  }
}

스케줄 유형

유형 설명 예시
at 한 번만 실행 "at": "2025-07-20T09:00:00+09:00"
cron Cron 표현식 "expr": "0 19 * * 5" (매주 금 19시)
every 반복 간격 "everyMs": 3600000 (매 1시간)

실전 예시: 매주 로또 자동 구매

{
  "name": "로또 자동구매",
  "schedule": {
    "kind": "cron",
    "expr": "0 19 * * 5",
    "tz": "Asia/Seoul"
  },
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "동행복권 사이트에서 로또 6/45 자동번호 5장을 구매해주세요. 예치금이 부족하면 알려주세요."
  },
  "delivery": {
    "mode": "announce"
  }
}

실전 예시: 매일 아침 보안 점검

{
  "name": "일일 보안 점검",
  "schedule": {
    "kind": "cron",
    "expr": "0 7 * * *",
    "tz": "Asia/Seoul"
  },
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "서버의 보안 상태를 점검해주세요. SSH 접속 로그, 방화벽 상태, 시스템 업데이트를 확인하고 요약해주세요."
  }
}

크론 작업 관리

Telegram에서 직접 크론을 관리할 수도 있습니다:

나: 현재 등록된 크론 작업 목록 보여줘
봇: 현재 4개의 크론 작업이 등록되어 있습니다:
    1. 🎰 로또 자동구매 - 매주 금 19:00
    2. 🔍 로또 당첨확인 - 매주 월 09:00
    3. 🔒 일일 보안점검 - 매일 07:00
    4. 🛡️ 주간 종합점검 - 매주 수 08:00

메모리 시스템 이해하기

OpenClaw는 매 세션마다 초기화되지만, 파일 기반 메모리 시스템을 통해 연속성을 유지합니다.

메모리 파일 구조

~/.openclaw/workspace/
├── SOUL.md          # AI의 성격과 행동 원칙
├── IDENTITY.md      # AI의 이름, 이모지, 정체성
├── USER.md          # 사용자 정보 (이름, 선호, 메모)
├── MEMORY.md        # 장기 기억 (큐레이션된 핵심 정보)
├── AGENTS.md        # 행동 규칙과 작업 가이드라인
├── HEARTBEAT.md     # 주기적 체크 항목
├── TOOLS.md         # 로컬 도구 설정 메모
└── memory/
    ├── 2025-07-17.md  # 일일 기록
    └── 2025-07-18.md  # 일일 기록

각 파일의 역할

SOUL.md — AI의 영혼

AI가 어떤 성격으로 대화할지 정의합니다. 친근한 비서, 전문적인 엔지니어, 유머러스한 동료 등 원하는 페르소나를 자유롭게 설정할 수 있습니다.

# SOUL.md

## 핵심 원칙
- 진짜 도움이 되는 비서가 되자 (형식적 인사 금지)
- 의견을 가지고 있어도 된다
- 먼저 스스로 알아보고, 안 되면 그때 물어보자
- 외부 행동(메일, 메시지 전송)은 신중하게

## 분위기
간결하면서 필요할 때 상세하게. 딱딱하지 않게, 아부하지 않게.

MEMORY.md — 장기 기억

세션을 넘어 유지되어야 하는 중요한 정보를 기록합니다:

# MEMORY.md - 장기 기억

## 사용자 정보
- GitHub: developer-joon
- 블로그: Jekyll + GitHub Pages
- 투자에 관심: 비트코인, 국내주식

## 서버 환경
- OS: Rocky Linux 9.7
- Chrome CDP 포트: 9222
- 별도 프로필: ~/.openclaw/chrome-debug

## 교훈
- 기존 Chrome 프로필로는 CDP 포트가 안 열림
- 동행복권 사이트는 PC/모바일 버전이 다름

하트비트 시스템

OpenClaw는 주기적으로 하트비트 폴링을 수행합니다. HEARTBEAT.md에 체크 항목을 정의하면 AI가 알아서 확인합니다:

# HEARTBEAT.md

- [ ] 이메일 확인 (8시간마다)
- [ ] 서버 디스크 사용량 체크
- [ ] 로또 구매 여부 확인 (금요일)

systemd 서비스 등록

서버 재부팅 시 OpenClaw가 자동으로 시작되도록 systemd 서비스를 등록합니다.

OpenClaw Gateway 서비스

sudo tee /etc/systemd/system/openclaw.service << 'EOF'
[Unit]
Description=OpenClaw Gateway
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw/.openclaw
Environment=HOME=/home/openclaw
Environment=PATH=/home/openclaw/.npm-global/bin:/usr/local/bin:/usr/bin:/bin
Environment=DISPLAY=:0
ExecStart=/home/openclaw/.npm-global/bin/openclaw gateway start --foreground
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw

Chrome CDP 서비스 (선택)

브라우저 자동화를 사용한다면 Chrome도 서비스로 등록합니다:

sudo tee /etc/systemd/system/chrome-debug.service << 'EOF'
[Unit]
Description=Chrome CDP Debug Instance
After=display-manager.service

[Service]
Type=simple
User=openclaw
Environment=DISPLAY=:0
ExecStart=/usr/bin/google-chrome-stable \
  --remote-debugging-port=9222 \
  --no-first-run \
  --no-default-browser-check \
  --user-data-dir=/home/openclaw/.openclaw/chrome-debug
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable chrome-debug
sudo systemctl start chrome-debug

보안 고려사항

AI에게 서버 접근 권한을 주는 만큼, 보안은 매우 중요합니다.

필수 보안 설정

1. Gateway는 loopback에만 바인딩

OpenClaw Gateway는 기본적으로 127.0.0.1에만 바인딩됩니다. 외부에서 직접 접근할 수 없도록 이 설정을 유지하세요.

2. Telegram 사용자 제한

{
  "telegram": {
    "allowedUsers": ["YOUR_USER_ID"]
  }
}

반드시 자신의 User ID만 허용하세요.

3. API 키 보호

# 설정 파일 권한 제한
chmod 600 ~/.openclaw/openclaw.json

4. 전용 사용자 사용

root가 아닌 전용 사용자(openclaw)로 실행하여, AI가 시스템 전체에 영향을 줄 수 없도록 합니다.

5. 방화벽 설정

# CDP 포트는 외부 차단 (로컬만 허용)
sudo firewall-cmd --permanent --remove-port=9222/tcp 2>/dev/null
sudo firewall-cmd --reload

보안 체크리스트

항목 상태 비고
Gateway loopback 바인딩 기본값
Telegram 사용자 제한 allowedUsers 설정
설정 파일 권한 (600) ⚠️ 수동 설정 필요
전용 사용자 실행 openclaw 유저
SSH 키 인증 패스워드 비활성화 권장
방화벽 활성화 firewalld 사용
CDP 포트 외부 차단 로컬만 허용

실전 활용 시나리오

시나리오 1: 로또 자동 구매 봇

매주 금요일 저녁, AI가 자동으로 동행복권 사이트에 접속하여 로또를 구매합니다.

[금요일 19:00 크론 작업 실행]

AI: 동행복권 사이트에 접속합니다...
AI: 로또 6/45 구매 페이지로 이동합니다...
AI: 자동번호 5게임 선택 완료
AI: 구매 버튼 클릭...
AI: ✅ 구매 완료!
    - A조: 03, 11, 36, 39, 41, 44
    - B조: 03, 04, 16, 19, 22, 38
    - C조: 03, 06, 20, 32, 37, 44
    - D조: 14, 25, 31, 34, 38, 42
    - E조: 07, 15, 23, 29, 35, 43
    구매금액: 5,000원 | 잔액: 42,350원

시나리오 2: 서버 모니터링

나: 서버 상태 확인해줘

봇: 🖥️ 서버 상태 요약
    ─────────────────
    CPU: 12% (4코어)
    RAM: 3.2GB / 8GB (40%)
    디스크: 45GB / 100GB (45%)
    가동시간: 23일 4시간

    ⚠️ 주의사항:
    - /var/log 디렉토리가 5GB 차지 중
    - 3개의 보안 업데이트 대기 중

시나리오 3: 블로그 포스트 작성 도우미

나: Jekyll 블로그에 OpenClaw 가이드 포스트 작성해줘.
    저작권 없는 이미지도 포함하고 PR 올려줘.

봇: 포스트 작성을 시작합니다...
    1. ✅ Unsplash에서 이미지 6장 다운로드
    2. ✅ 포스트 마크다운 작성 완료 (약 4,000자)
    3. ✅ Git 브랜치 생성 및 커밋
    4. ✅ PR #4 생성 완료
    
    리뷰해주세요: https://github.com/.../pull/4

트러블슈팅

Chrome CDP 연결이 안 될 때

# 1. Chrome이 실행 중인지 확인
ps aux | grep chrome

# 2. CDP 포트가 열려 있는지 확인
curl -s http://127.0.0.1:9222/json/version

# 3. 기존 Chrome 프로필이 잠금 중인지 확인
# → 별도 user-data-dir 사용으로 해결
ls ~/.openclaw/chrome-debug/SingletonLock 2>/dev/null && \
  echo "잠금 파일 존재 - Chrome이 이미 실행 중"

Gateway가 시작되지 않을 때

# 로그 확인
journalctl -u openclaw -f

# 설정 파일 검증
openclaw gateway status

# 포트 충돌 확인
ss -tlnp | grep :3000

Telegram 봇이 응답하지 않을 때

  1. Bot Token이 올바른지 확인
  2. allowedUsers에 자신의 ID가 포함되어 있는지 확인
  3. Gateway가 실행 중인지 확인
  4. 네트워크에서 Telegram API 접속이 가능한지 확인

유용한 명령어 모음

# Gateway 상태 확인
openclaw gateway status

# Gateway 재시작
openclaw gateway restart

# 설정 확인
openclaw configure

# 브라우저 섹션 설정
openclaw configure --section browser

# 텔레그램 섹션 설정
openclaw configure --section telegram

# 로그 실시간 확인
journalctl -u openclaw -f

# Chrome CDP 상태 확인
curl -s http://127.0.0.1:9222/json/list | python3 -m json.tool

마무리

OpenClaw를 사용하면 AI가 단순히 대답하는 것을 넘어, 실제로 일을 하는 환경을 구축할 수 있습니다. 서버 관리, 웹 자동화, 일정 관리, 반복 업무 처리까지 — 한번 설정해두면 24시간 묵묵히 일하는 비서가 생기는 셈입니다.

핵심을 정리하면:

  1. 설치는 간단합니다 — Node.js + npm 한 줄이면 끝
  2. Telegram 연동으로 어디서든 AI에게 지시 가능
  3. 브라우저 자동화로 웹 기반 업무도 처리
  4. 크론 시스템으로 반복 업무를 완전 자동화
  5. 메모리 시스템으로 AI가 맥락을 기억

아직 초기 단계이지만, AI 에이전트가 일상의 반복적인 업무를 대신 처리하는 미래는 이미 시작되었습니다. 직접 설치해보고, 자신만의 AI 비서를 만들어보세요!


참고 링크:


이 글은 Rocky Linux 9.7 + OpenClaw 환경에서 실제 구축한 경험을 바탕으로 작성되었습니다.