뒤로가기

17. OpenClaw 실전: AI 프로그래밍 어시스턴트 구축

OpenClaw로 AI 프로그래밍 어시스턴트를 구축하는 방법을 소개합니다. Claude Code, Codex 등 도구를 연동해 코드 리뷰, 자동화 테스트, CI/CD 통합으로 개발 효율을 높입니다.

OpenClaw v2026.2 적용 | coding-agentgit-workflowstest-runner 스킬 설치 필요, 프로젝트 코드베이스 접근 권한 필요.

TL;DR: 코드 리뷰: Agent가 PR 변경 분석 후 리뷰 보고서 생성. 자동화 테스트: "test-runner": {"frameworks": ["jest", "vitest"]}. CI/CD 통합: Webhook으로 GitHub/GitLab 이벤트 수신. 다중 프로젝트: "projects": {"frontend": {...}, "backend": {...}}. 핵심 명령: openclaw agent --message "이 PR 리뷰해줘".

실전 목표

다음 기능을 갖춘 AI 프로그래밍 어시스턴트를 구축합니다:

  1. 코드 리뷰 자동화
  2. 테스트 실행 및 결과 보고
  3. 코드 문서 생성
  4. CI/CD 파이프라인 통합
  5. 다중 프로젝트 컨텍스트 전환

필수 스킬 설치

# 프로그래밍 관련 스킬
openclaw skill install coding-agent
openclaw skill install debug-pro
openclaw skill install git-workflows
openclaw skill install docker-essentials

# 테스트 스킬
openclaw skill install test-runner

코드 리뷰 자동화

코드 리뷰 설정

---
name: code-review-assistant
version: 1.0.0
description: OpenClaw 기반 자동 코드 리뷰
triggers:
  - code review
  - 코드 리뷰
  - review
  - PR review
---

# Code Review Assistant

풀 리퀘스트 코드 리뷰 자동화.

## 기능

- 코드 변경 리뷰
- 일반 이슈 검사
- 개선 제안
- 리뷰 코멘트 생성

## 리뷰 체크리스트

1. **코드 품질**
   - 명명 규칙
   - 코드 구조
   - 에러 처리

2. **보안**
   - SQL 인젝션
   - XSS 취약점
   - 시크릿 노출

3. **성능**
   - N+1 쿼리
   - 메모리 누수
   - 비효율 알고리즘

4. **모범 사례**
   - DRY 원칙
   - SOLID 원칙
   - 디자인 패턴

코드 리뷰 시나리오

사용자: 이 PR 리뷰해줘

Agent: PR #123 리뷰하겠습니다...

[PR 정보 조회]
[코드 변경 분석]
[잠재 이슈 검사]

## PR #123 리뷰 보고서

### 개요
- 브랜치: feature/user-search
- 변경: +156 -23
- 파일: 8개

### 발견 이슈

**심각** (1):
- 🚨 `auth.js:45` - 비밀번호 평문 저장 위험

**경고** (3):
- ⚠️ `search.js:23` - 잠재적 SQL 인젝션
- ⚠️ `user.js:78` - 미처리 Promise
- ⚠️ `utils.js:12` - deprecated API 사용

**제안** (5):
- 💡 단위 테스트 추가 고려
- 💡 매직 넘버 대신 상수 사용
- 💡 에러 바운더리 추가 권장
- 💡 공통 메서드 추출 고려
- 💡 타입 주석 추가 권장

### 코드 장점
- ✅ 함수 명명 양호
- ✅ 모듈 분리 적절
- ✅ 주석 적절

리뷰 코멘트 생성할까요?

자동화 테스트

테스트 실행 설정

{
  "skills": {
    "test-runner": {
      "frameworks": ["jest", "vitest", "pytest"],
      "coverage": {
        "enabled": true,
        "threshold": 80
      },
      "reporting": {
        "format": "markdown",
        "output": "test-report.md"
      }
    }
  }
}

테스트 시나리오

사용자: 테스트 실행하고 결과 보고해줘

Agent: 테스트 실행 중입니다...

[테스트 명령 실행]
[테스트 결과 수집]
[커버리지 분석]

## 테스트 보고서

### 테스트 결과
- 총계: 45개 테스트
- 통과: 42 ✅
- 실패: 2 ❌
- 스킵: 1 ⏭️

### 실패한 테스트

**1. UserSearch.test.js**

AssertionError: expected [] to equal [{id: 1, name: ’test’}]

권장: DB 연결 또는 mock 데이터 확인

**2. Auth.test.js**

Timeout: Async callback not invoked within 5000ms

권장: 타임아웃 연장 또는 비동기 로직 확인

### 커버리지

| 파일 | 문장 | 분기 | 함수 | 라인 |
|-----|-----|-----|-----|-----|
| auth.js | 85% | 78% | 90% | 85% |
| search.js | 72% | 65% | 80% | 70% |
| user.js | 90% | 85% | 95% | 90% |
| **총계** | **82%** | **76%** | **88%** | **82%** |

실패한 테스트 수정할까요?

CI/CD 통합

GitHub Actions 통합

# .github/workflows/openclaw-review.yml
name: OpenClaw Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup OpenClaw
        run: npm install -g openclaw@latest
        
      - name: Run Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          openclaw agent --message "Review PR #${{ github.event.pull_request.number }}" \
            --output review-comment.md
            
      - name: Post Comment
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const comment = fs.readFileSync('review-comment.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: comment
            });

자동 배포

사용자: staging에 배포해줘

Agent: staging 환경에 배포 중입니다...

[최신 코드 풀]
[테스트 실행]
[프로젝트 빌드]
[서버 배포]

## 배포 보고서

### 배포 정보
- 환경: staging
- 브랜치: main
- 커밋: abc1234
- 시간: 2026-02-26 15:30

### 배포 단계
1. ✅ 코드 풀
2. ✅ 의존성 설치
3. ✅ 테스트 실행 (45/45 통과)
4. ✅ 프로젝트 빌드
5. ✅ 서버 배포

### 헬스 체크
- API: ✅ 정상
- DB: ✅ 연결 정상
- Redis: ✅ 연결 정상

### 접속 URL
- URL: https://staging.example.com
- API: https://api-staging.example.com

배포 완료!

다중 프로젝트 관리

프로젝트 설정

{
  "projects": {
    "frontend": {
      "path": "~/projects/frontend",
      "skills": ["coding-agent", "test-runner"],
      "context": "AGENTS.md"
    },
    "backend": {
      "path": "~/projects/backend",
      "skills": ["coding-agent", "docker-essentials"],
      "context": "AGENTS.md"
    },
    "mobile": {
      "path": "~/projects/mobile",
      "skills": ["coding-agent"],
      "context": "AGENTS.md"
    }
  }
}

프로젝트 전환

사용자: backend 프로젝트로 전환해줘

Agent: backend 프로젝트로 전환했습니다.

현재 프로젝트 정보:
- 이름: backend
- 경로: ~/projects/backend
- 기술: Python/FastAPI
- 최근 커밋: 사용자 인증 추가

무엇을 도와드릴까요?

코드 생성

보일러플레이트 코드 생성

사용자: User 모델용 CRUD API 만들어줘

Agent: User 모델용 CRUD API 생성하겠습니다...

[기존 코드 구조 분석]
[코드 파일 생성]

다음 파일 생성됨:

**1. models/user.py**
```python
from pydantic import BaseModel
from datetime import datetime

class User(BaseModel):
    id: int
    name: str
    email: str
    created_at: datetime
    updated_at: datetime

class UserCreate(BaseModel):
    name: str
    email: str

class UserUpdate(BaseModel):
    name: str | None = None
    email: str | None = None

2. routers/users.py

from fastapi import APIRouter, HTTPException
from models.user import User, UserCreate, UserUpdate

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/", response_model=list[User])
async def list_users(): ...

@router.get("/{user_id}", response_model=User)
async def get_user(user_id: int): ...

@router.post("/", response_model=User)
async def create_user(user: UserCreate): ...

@router.put("/{user_id}", response_model=User)
async def update_user(user_id: int, user: UserUpdate): ...

@router.delete("/{user_id}")
async def delete_user(user_id: int): ...

3. tests/test_users.py

from fastapi.testclient import TestClient

def test_list_users(): ...
def test_create_user(): ...
def test_update_user(): ...
def test_delete_user(): ...

테스트 실행해서 검증할까요?


## 문서 생성

### API 문서

사용자: 이 API 문서 만들어줘

Agent: API 엔드포인트 분석 중입니다…

[라우트 파일 스캔] [API 정보 추출] [문서 생성]

API 문서

사용자 모듈

GET /users

사용자 목록 조회

파라미터

이름 타입 필수 설명
page int 아니오 페이지 번호
limit int 아니오 페이지당 개수

응답

{
  "data": [User],
  "total": int,
  "page": int,
  "limit": int
}

POST /users

사용자 생성

요청 본문

{
  "name": "string",
  "email": "string"
}

응답

{
  "id": 1,
  "name": "string",
  "email": "string",
  "created_at": "2026-02-26T00:00:00Z",
  "updated_at": "2026-02-26T00:00:00Z"
}

docs/api.md에 저장할까요?


## 장애 대응

### CI/CD 이슈

```bash
# CI/CD 상태 확인
openclaw ci status

# CI/CD 로그 조회
openclaw ci logs --last

# 실패 작업 재실행
openclaw ci retry

코드 이슈

# 코드 이슈 분석
openclaw analyze --project backend

# 수정 제안 생성
openclaw suggest --file auth.js

요약

OpenClaw로 프로그래밍 어시스턴트 구축:

  • 코드 리뷰: PR 리뷰 자동화
  • 테스트 실행: 자동 테스트 및 보고
  • CI/CD 통합: 배포 프로세스 자동화
  • 다중 프로젝트: 컨텍스트 빠른 전환
  • 코드 생성: 보일러플레이트 코드 생성
  • 문서 생성: API 문서 자동 생성

업데이트 기록:

  • 2026-02-26: 초판 발행

시리즈 네비게이션: