서문
OpenClaw가 더 이상 개인 전용이 아니라 전체 팀에 서비스를 제공해야 할 때, 사용자 관리, 권한 제어, 리소스 할당 등의 문제를 고려해야 합니다. 본 글에서는 OpenClaw를 개인 도구에서 팀 수준의 AI 어시스턴트 플랫폼으로 업그레이드하는 방법을 소개합니다.
1. 다중 사용자 아키텍처 개요
OpenClaw의 다중 사용자 아키텍처는 다음 핵심 개념을 기반으로 합니다:
┌──────────────────────────────────────────┐
│ OpenClaw Gateway │
│ (:18789) │
├──────────────────────────────────────────┤
│ 사용자 관리 모듈 │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │Admin │ │User A│ │User B│ ... │
│ │(관리) │ │(일반) │ │(일반) │ │
│ └──────┘ └──────┘ └──────┘ │
├──────────────────────────────────────────┤
│ 공유 스킬풀 │ 개인 스킬 영역 │ 모델 할당량 관리 │
├──────────────────────────────────────────┤
│ 채널 계층 (각 사용자별 독립 세션) │
│ WhatsApp │ Telegram │ Discord │ Slack │
└──────────────────────────────────────────┘
2. 다중 사용자 모드 활성화
2.1 기본 설정
// ~/.config/openclaw/openclaw.json5
{
"multiUser": {
"enabled": true,
// 사용자 데이터 저장 디렉토리
"dataDir": "/var/lib/openclaw/users",
// 사용자 인증 방식
"authMethod": "token",
// 기본 사용자 역할
"defaultRole": "user",
// 셀프 등록 허용
"selfRegistration": false
}
}
2.2 관리자 계정 생성
# 다중 사용자 모드 초기화
openclaw onboard --multi-user
# 관리자 생성
openclaw user create \
--username admin \
--role admin \
--email [email protected]
# 시스템이 API Token을 생성합니다. 안전하게 보관하세요
# Token: oc_admin_a1b2c3d4e5f6...
2.3 일반 사용자 추가
# 일반 사용자 생성
openclaw user create \
--username alice \
--role user \
--email [email protected]
# 모든 사용자 목록 확인
openclaw user list
출력 예시:
┌──────────┬─────────┬──────────────────────┬─────────┐
│ Username │ Role │ Email │ Status │
├──────────┼─────────┼──────────────────────┼─────────┤
│ admin │ admin │ [email protected] │ active │
│ alice │ user │ [email protected] │ active │
│ bob │ user │ [email protected] │ active │
└──────────┴─────────┴──────────────────────┴─────────┘
3. 사용자 격리 메커니즘
3.1 대화 격리
각 사용자의 대화 기록은 완전히 독립적이며 서로 볼 수 없습니다:
{
"multiUser": {
"isolation": {
// 대화 기록 격리
"conversations": true,
// 사용자 환경 설정 격리
"preferences": true,
// 커스텀 프롬프트 격리
"systemPrompts": true
}
}
}
3.2 데이터 저장 구조
/var/lib/openclaw/users/
├── admin/
│ ├── conversations/
│ ├── preferences.json
│ └── skills/ # 개인 스킬
├── alice/
│ ├── conversations/
│ ├── preferences.json
│ └── skills/
└── bob/
├── conversations/
├── preferences.json
└── skills/
3.3 채널에서 사용자로의 매핑
각 채널의 사용자를 OpenClaw 내부 사용자에 매핑해야 합니다:
{
"multiUser": {
"channelMapping": {
"telegram": {
// Telegram 사용자 ID -> OpenClaw 사용자명
"123456789": "alice",
"987654321": "bob"
},
"whatsapp": {
// WhatsApp 번호 -> OpenClaw 사용자명
"+8613800138000": "alice",
"+8613900139000": "bob"
},
"discord": {
// Discord 사용자 ID -> OpenClaw 사용자명
"1234567890": "alice"
}
},
// 매핑되지 않은 사용자 처리 방식
"unmappedUserPolicy": "create_auto" // auto | reject | guest
}
}
4. 역할 및 권한 관리
4.1 내장 역할
| 역할 | 권한 | 적합한 시나리오 |
|---|---|---|
admin |
모든 권한 | 시스템 관리자 |
manager |
사용자 관리 + 설정 | 팀 리더 |
user |
일반 사용 | 일반 팀 구성원 |
guest |
제한된 사용 | 임시 사용자 |
4.2 권한 상세 목록
{
"roles": {
"admin": {
"permissions": [
"user.create", "user.delete", "user.modify",
"config.modify", "skill.manage",
"model.all", "channel.manage",
"stats.view", "logs.view"
]
},
"manager": {
"permissions": [
"user.create", "user.modify",
"skill.manage", "model.all",
"stats.view"
]
},
"user": {
"permissions": [
"chat.send", "chat.history",
"skill.use", "model.allowed",
"preference.modify"
]
},
"guest": {
"permissions": [
"chat.send"
],
"restrictions": {
"maxMessagesPerDay": 50,
"maxConversationLength": 10
}
}
}
}
4.3 커스텀 역할
# 커스텀 역할 생성
openclaw role create developer \
--permissions "chat.send,chat.history,skill.use,skill.create,model.all"
# 사용자에게 역할 할당
openclaw user modify alice --role developer
5. 모델 할당량 관리
5.1 사용자별 할당량 설정
{
"quotas": {
"default": {
"dailyMessages": 200,
"dailyTokens": 500000,
"maxTokensPerMessage": 4096,
"allowedModels": ["claude-sonnet-4-20250514", "gpt-4o-mini"]
},
"users": {
"alice": {
"dailyMessages": 500,
"dailyTokens": 1000000,
"allowedModels": ["claude-sonnet-4-20250514", "claude-opus-4-20250514", "gpt-4o"]
},
"bob": {
"dailyMessages": 100,
"dailyTokens": 200000,
"allowedModels": ["claude-sonnet-4-20250514"]
}
}
}
}
5.2 역할별 할당량 설정
{
"quotas": {
"byRole": {
"admin": {
"dailyMessages": -1, // -1은 무제한
"dailyTokens": -1,
"allowedModels": ["*"] // 모든 모델
},
"user": {
"dailyMessages": 200,
"dailyTokens": 500000,
"allowedModels": ["claude-sonnet-4-20250514", "gpt-4o-mini"]
},
"guest": {
"dailyMessages": 20,
"dailyTokens": 50000,
"allowedModels": ["gpt-4o-mini"]
}
}
}
}
5.3 할당량 사용량 확인
# 모든 사용자의 할당량 사용 현황 확인
openclaw user stats
# 출력 예시:
# ┌──────────┬──────────┬──────────┬─────────────┐
# │ User │ Messages │ Tokens │ Quota Used │
# ├──────────┼──────────┼──────────┼─────────────┤
# │ alice │ 156/500 │ 342K/1M │ 34.2% │
# │ bob │ 89/100 │ 178K/200K│ 89.0% │
# └──────────┴──────────┴──────────┴─────────────┘
# 개별 사용자의 상세 사용 통계 확인
openclaw user stats alice --detail
5.4 할당량 초과 처리
{
"quotas": {
"onExceeded": {
// 초과 시 응답 메시지
"message": "오늘의 사용 할당량이 소진되었습니다. 내일 다시 시도해 주세요. 추가 할당량이 필요하면 관리자에게 문의하세요.",
// 관리자에게 알림 여부
"notifyAdmin": true,
// 더 저렴한 모델로 다운그레이드 허용 여부
"fallbackToFreeModel": true,
"fallbackModel": "gpt-4o-mini"
}
}
}
6. 공유 스킬 vs 개인 스킬
6.1 스킬 디렉토리 구조
~/.openclaw/
├── skills/ # 전역 공유 스킬
│ ├── translator.SKILL.md
│ ├── code-review.SKILL.md
│ └── meeting-notes.SKILL.md
└── users/
├── alice/
│ └── skills/ # Alice의 개인 스킬
│ └── my-custom.SKILL.md
└── bob/
└── skills/ # Bob의 개인 스킬
└── data-analysis.SKILL.md
6.2 스킬 권한 설정
{
"skills": {
"shared": {
"path": "~/.openclaw/skills",
// 모든 사용자 사용 가능
"accessLevel": "all"
},
"private": {
// 각 사용자에게 자신만의 스킬 디렉토리
"pathTemplate": "~/.openclaw/users/{{username}}/skills",
"accessLevel": "owner"
},
// 스킬 관리 권한
"management": {
"createShared": ["admin", "manager"],
"createPrivate": ["admin", "manager", "user"],
"deleteShared": ["admin"],
"deletePrivate": ["admin", "owner"]
}
}
}
6.3 팀 공유 스킬 예시
<!-- ~/.openclaw/skills/team-qa.SKILL.md -->
# 팀 Q&A 어시스턴트
당신은 팀 내부의 Q&A 어시스턴트로, 회사 정책, 프로세스 및 기술 규범에 관한 질문에 답변하는 역할을 합니다.
## 지식베이스
- /data/company-docs/ 디렉토리의 문서 참조
- 최신 버전의 문서를 우선 사용
## 답변 규범
- 구체적인 문서 이름과 섹션을 인용
- 확실하지 않으면 명확히 밝히고 담당자에게 문의를 권장
- 기밀 정보는 그룹에서 공개하지 않음
7. 사용 통계 분석
7.1 통계 수집 설정
{
"analytics": {
"enabled": true,
"storage": "sqlite",
"dbPath": "/var/lib/openclaw/analytics.db",
"retention": "90d", // 데이터 90일 보존
"collect": {
"messageCount": true,
"tokenUsage": true,
"modelUsage": true,
"responseTime": true,
"skillUsage": true,
"channelUsage": true
}
}
}
7.2 통계 보고서 확인
# 전체 사용 현황 확인
openclaw dashboard
# 지정 기간의 통계 확인
openclaw stats --from 2026-04-01 --to 2026-04-08
# CSV 보고서 내보내기
openclaw stats --export csv --output /tmp/openclaw-stats.csv
7.3 API를 통한 통계 조회
# 사용자별 사용 순위 조회
curl -s http://localhost:18789/api/v1/admin/stats/users \
-H "Authorization: Bearer ADMIN_TOKEN" | jq .
# 모델 사용 통계 조회
curl -s http://localhost:18789/api/v1/admin/stats/models \
-H "Authorization: Bearer ADMIN_TOKEN" | jq .
8. 팀 배포 모범 사례
8.1 배포 체크리스트
□ 다중 사용자 모드 활성화 및 관리자 생성
□ 각 팀 구성원에 대한 계정 생성 및 역할 할당
□ 적절한 사용 할당량 설정
□ 팀 공유 스킬 생성
□ 채널에서 사용자로의 매핑 설정
□ 사용 통계 및 모니터링 설정
□ 사용 규범 수립 및 팀에 공지
□ 정기적으로 사용 현황 및 할당량 검토
8.2 보안 권장사항
| 조치 | 중요도 | 설명 |
|---|---|---|
| 정기적 API Token 교체 | 높음 | 90일마다 교체 |
| 감사 로그 활성화 | 높음 | 모든 관리 작업 기록 |
| 최소 권한 원칙 | 높음 | 필요한 권한만 부여 |
| 민감 정보 필터링 | 보통 | AI의 민감 데이터 유출 방지 |
| 정기적 사용자 목록 검토 | 보통 | 퇴직자 즉시 삭제 |
| 할당량 알림 | 보통 | 80% 초과 시 관리자 알림 |
8.3 용량 계획
| 팀 규모 | 권장 사양 | 월 예산 참고 |
|---|---|---|
| 5명 이하 | 1코어 2G VPS | $50-100 |
| 5-20명 | 2코어 4G VPS | $100-300 |
| 20-50명 | 4코어 8G VPS | $300-800 |
| 50명 이상 | 클러스터 배포 | $800+ |
8.4 사용자 관리 명령어 빠른 참조
# 사용자 생성
openclaw user create --username NAME --role ROLE --email EMAIL
# 사용자 역할 변경
openclaw user modify USERNAME --role NEW_ROLE
# 사용자 비활성화
openclaw user disable USERNAME
# 사용자 활성화
openclaw user enable USERNAME
# 사용자 삭제
openclaw user delete USERNAME
# 사용자 Token 재설정
openclaw user reset-token USERNAME
# 사용자 상세 정보 확인
openclaw user info USERNAME
# 사용자 일괄 가져오기
openclaw user import --file users.csv
위의 설정을 통해 OpenClaw를 안전하고 효율적인 팀 AI 어시스턴트 플랫폼으로 구축하여 각 구성원이 AI의 강력한 능력을 활용하면서도 우수한 관리 및 제어를 유지할 수 있습니다.