[둥지] Claude Routines로 일일 PR 자동 리뷰 루틴 구축하기
Claude Code의 Routines 기능으로 Doongzi GitHub PR을 매일 아침 자동 코드 리뷰하고 카카오톡 나에게보내기로 수신하는 루틴을 구축한 과정을 공유합니다.
[둥지] Claude Routines로 일일 PR 자동 리뷰 루틴 구축하기
Claude Code의 Routines 기능을 활용해 둥지 프로젝트의 GitHub PR을 매일 아침 자동으로 코드 리뷰하고, 결과를 카카오톡 나에게보내기로 수신하는 루틴을 구축했다.
매일 PR 확인하기 귀찮다
둥지 팀은 팀원들이 각자 작업을 마치면 PR을 올리는 방식으로 협업하고 있다. 문제는 PR이 올라왔는지 확인하는 시점이 제각각이라는 것이었다. 누군가 리뷰 요청을 올려도 그날 GitHub을 열어보지 않으면 놓치기 일쑤고, 코드 리뷰 자체도 Diff를 열어서 직접 읽어야 하는 번거로움이 있었다.
“아침에 일어나면 오늘 리뷰해야 할 PR이 정리되어 있고, 코드 리뷰 초안까지 준비되어 있으면 어떨까?”
이 아이디어를 Claude Code의 Routines로 구현했다.
Routines란
Routines는 Claude Code에서 지원하는 스케줄 기반 자동화 기능이다. 자연어로 작성한 지침을 등록해 두면, 설정한 시각에 Claude가 자율적으로 도구를 사용해 작업을 수행한다.
루틴 설계
이번 루틴의 흐름은 다음과 같다.
- 매일 오전 7시 자동 실행
- Doongzi organization의 열려있는 PR 목록 조회
- PR을 긴급 / 높음 / 보통 3단계로 우선순위 분류
- 각 PR의 Diff를 분석해 코드 리뷰 마크다운 파일 생성
- 카카오톡 나에게보내기로 요약 알림 및 리뷰 파일 첨부 전송
사용한 지침
루틴 생성 화면에 아래 지침을 등록했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Doongzi 일일 PR 자동 리뷰 루틴
**트리거**: 매일 아침 7시
**목적**: Doongzi 조직 내 레포지토리의 열려있는 PR을 파악하고, 코드 리뷰 결과를 카카오톡-나에게보내기로 전송합니다.
## 제약 사항 (Constraints)
- 저장소에 대한 쓰기 권한을 행사하지 않습니다. 코드 수정, Commit, Push, PR 상태 변경(Merge/Close)은 절대 수행하지 마세요.
- 모든 리뷰는 읽기 전용(Read-only)으로 진행하며 개선점 제안만 작성합니다.
- 알림 메시지 전송 후 추가 작업 없이 즉시 루틴을 종료합니다.
## 수행 단계 (Execution Steps)
### Step 1: PR 목록 조회
- GitHub 도구를 사용하여 `Doongzi` organization 내의 모든 레포지토리에서 상태가 `opened`인 PR 목록과 세부 정보(Diff, 제목, 작성자, 티켓 번호, 라벨)를 가져옵니다.
### Step 2: 우선순위 분류
- 수집된 PR의 라벨 및 제목 키워드 등을 분석하여 다음 3가지 우선순위로 분류합니다.
- 긴급 (Urgent)
- 높음 (High)
- 보통 (Normal)
### Step 3: 코드 리뷰 분석 및 md 파일 생성
- `opened` 상태인 각 PR의 변경 사항(Diff)을 분석하여 코드 리뷰 마크다운 텍스트를 생성합니다.
- 파일명 규칙: `[이슈번호/PR번호]-code-review.md` (예: `TD-355-code-review.md`)
- **[코드 리뷰 작성 규칙]**
1. PR 요약: 작업 내용에 대한 핵심 요약만 정확히 3줄 이내로 작성합니다.
2. 목록 제외: 변경된 파일 목록(Changed files list)은 절대 작성하지 않습니다.
3. 사소한 리뷰 배제: 당장에 치명적이거나 중요하지 않은 내용(단순 띄어쓰기, 단순 네이밍 컨벤션, 개인적인 코딩 스타일 선호도 등)은 리뷰에서 완전히 제외합니다.
4. 위험도 분류: 리뷰 내용은 반드시 아래 3가지 카테고리로 분류하여 작성합니다. 해당되는 내용이 없는 카테고리는 생략합니다.
- Critical: 심각한 버그, 보안 취약점, 런타임 에러나 서버 장애를 유발할 수 있는 치명적인 문제
- Warning: 잠재적인 오류 발생 가능성, 성능 저하 우려, 구조적 결함 등 수정이 강하게 권장되는 문제
- Info: 로직의 안정성이나 효율성을 높일 수 있는 제안, 가독성 및 유지보수성을 위한 리팩토링(Refactoring) 방향 제시, 주석(Comments) 추가/수정 관련 내용
5. 경로 명시: 각 리뷰 항목을 작성할 때는 반드시 관련된 대상 파일의 전체 경로(File path)를 함께 명시합니다.
---
[생성될 마크다운 파일 예시]
## 작업 요약
- 부동산 계약서 파싱을 위한 FastAPI 라우터 추가
- PDF 텍스트 추출 로직 및 의존성 모듈 연동
- 추출된 계약 데이터를 데이터베이스에 비동기로 저장하는 로직 구현
## 코드 리뷰
**1. [Critical] 예외 처리 누락**
- `app/api/routes/contract.py`
파일 업로드 엔드포인트에 예외 처리가 누락되어 있습니다.
**2. [Warning] 함수 호출 오류**
- `app/database/crud.py`
비동기 DB 세션을 사용하고 있으나, 내부 트랜잭션에서 블로킹 I/O 함수를 호출하고 있습니다.
**3. [Info] 정규식 패턴 주석 필요**
- `app/services/parser.py`
PDF 파싱 로직 내 정규식 패턴이 복잡하므로, 후임 작업자를 위해 해당 정규식이 어떤 포맷을 추출하는지 구체적인 주석을 추가해 두는 것을 권장합니다.
**4. [Info] @validator 활용 제안**
- `app/schemas/contract_dto.py`
중복되는 검증 로직이 여러 곳에 흩어져 있습니다. Pydantic 모델의 `@validator`를 활용하여 검증 로직을 한 곳으로 모으는 방향으로 리팩토링하면 유지보수성이 향상됩니다.
---
### Step 4: 카카오톡 알림 전송
- 아래 템플릿에 맞춰 메시지를 작성하고, 준비된 모든 마크다운 파일을 첨부하여 PlayMCP(카카오톡-나에게보내기)로 전송합니다.
- 진행 중인 PR이 전혀 없을 경우 내용에 '0건'임을 명시합니다.
## 메시지 템플릿 (Message Template)
실행 시점의 날짜(yyyy-MM-DD)를 반영하여 아래 텍스트 형식을 엄격히 준수하세요.
타이틀: 일일 PR 리뷰 (yyyy-MM-DD)
긴급 (N건)
- [레포지토리명] PR#[번호] [이슈번호] - [작성자명]
높음 (N건)
- [레포지토리명] PR#[번호] [이슈번호] - [작성자명]
보통 (N건)
- [레포지토리명] PR#[번호] [이슈번호] - [작성자명]
첨부파일: [첨부된 리뷰 파일명1], [첨부된 리뷰 파일명2]...
*(주의: 생성된 PR이 없을 경우 카테고리별로 기재하지 않고 "열려있는 PR이 0건입니다."라고만 출력하세요)*
수동 실행 테스트
루틴 등록 후 수동으로 실행해 정상 동작을 확인했다.
레퍼런스
This post is licensed under CC BY 4.0 by the author.

