사이드 프로젝트를 진행할 때 개발 전, 협업 규칙과 컨벤션 등을 정한다. 이 기본 틀이 가장 중요하며 프로젝트 속도를 늦추지 않는 중요한 규칙이 된다.
이번 글은 어떻게 협업 자동화를 (무료로!) 구성했는지에 관한 이야기다.
레퍼런스가 없어 상당히 고생했기 때문에 비슷한 시도를 하는 모두에게 도움이 되었으면 좋겠다!
협업 툴로는 다양한 후보군들이 많다. 그 중에서 어떤 것을 선택할지 정하는 것도 쉽지 않았다.
선택한 협업 툴에 관한 짧은 설명과, 왜 선택하게 되었는지에 대해 정리하겠다.
칸반 보드 방식의 직관적인 작업 관리 도구
Jira나 Linear 같은 복잡한 도구 대신, 소규모 사이드 프로젝트에서는 간단하면서도 시각적인 관리가 필요했다. 특히 Automation Rules로 카드 생성시 GitHub 링크를 자동 생성할 수 있고, API가 잘 문서화되어 GitHub Actions와 연동하기 적합했다.
코드 저장소 및 이슈 트래킹 툴
GitHub Actions의 강력함과 월 2000분 무료 제공이 결정적이었다. 무엇보다 Trello API 호출을 통한 자동화 구현이 가장 용이했다.
팀 커뮤니케이션 툴
Discord나 Microsoft Teams도 있었지만, GitHub App의 연동 품질이 Slack이 가장 뛰어났다. 특히 팀 슬랙 채널에 PR, 이슈, 커밋 알림을 받아볼 수 있어 팀 전체가 프로젝트 진행상황을 실시간으로 공유할 수 있었다.
다음은 협업 툴 연동 파트인데, 이를 설명하기 전 협업 Flow 전략부터 설명하겠다. 왜냐하면 이 플로우에 맞게 연동 설정을 구축했기 때문에 미리 이해해야 쉽다.
체계적인 협업을 위해 명확한 Git Flow를 정의했다.
ver 1.0
master : 제품으로 출시될 수 있는 브랜치
develop : 다음 출시 버전을 개발하는 브랜치
feature : 기능을 개발하는 브랜치
ver 1.1 ~
release : 이번 출시 버전을 준비하는 브랜치
hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치
일관성 있는 브랜치 관리를 위해 다음과 같은 컨벤션을 적용했다:
feature/ : 새로운 기능 개발 (예: feature/login-system )design/ : 디자인 변경 (예: design/landing-page-redesign )bugfix/ : 버그 수정 (예: bugfix/login-error )hotfix/ : 긴급한 프로덕션 버그 수정 (예: hotfix/security-vulnerability )release/ : 새로운 제품 출시 준비 (예: release/v1.2.0 )refactor/ : 코드 리팩토링 (예: refactor/improve-performance )docs/ : 문서 업데이트 (예: docs/api-guide )test/ : 테스트 관련 변경 (예: test/integration-tests )chore/ : 빌드 작업, 패키지 매니저 설정 등 (예: chore/update-dependencies )style/ : 코드 스타일 변경 (예: style/lint-fixes )효율적인 협업을 위해 명확한 작업 순서를 정의했다.
작업 전
Backlog 리스트 에 생성 (간단한 내용과 체크리스트)작업 중
In Progress 리스트 로 이동#이슈번호 필수 포함)작업 완료 후
develop 브랜치로의 PR 생성일관성 있는 커밋 히스토리 관리를 위한 컨벤션을 적용했다.
feat: 유저 엔티티 추가
유저 id, email, password, createdAt, DeletedAt 필드 추가
#1
커밋 메시지에 이슈 번호를 포함하여 GitHub에서 자동으로 이슈와 커밋을 연결하도록 했다.

작업의 일관성을 위해 Issue 템플릿을 만들었다.
**Add a title**
(제목 작성)
**📋 Trello 카드 연결**
Trello 카드 URL 또는 카드 ID를 입력하세요
(trello 카드에서 복사한 카드ID 입력)
**Description**
이슈에 대한 설명 작성
(설명 작성)
**Tasks**
필요한 작업 작성
(작업 작성)
- [ ] 체크리스트 형태
- [x] 완료된 작업 표시
**Additional Infos**
스크린샷, 예시, 레퍼런스 등
(참고자료 url, 사진, 코드 등..)


Pull Request 생성 시 자동으로 적용되는 템플릿도 구성했다.
# Pull Request Summary
(PR 내용 작성)
## 🔗 Related Issue
Closes #(이슈번호)
## 📋 Trello 카드
(트렐로 카드 ID or URL)
## 🔄 변경 유형
- [ ] 새 기능
- [ ] 버그 수정
- [ ] 문서 업데이트
- [ ] 빌드/설정 변경
- [ ] 스타일/UI 변경
- [ ] 리팩토링 (기능 변경 없음)
- [ ] 테스트 추가/수정
- [ ] 성능 개선
## ✅ 체크리스트
- [ ] 코드 컨벤션에 맞게 작성함
- [ ] 코드에 적절한 주석을 추가함
- [ ] 관련 문서를 업데이트함
- [ ] 변경사항이 기존 테스트를 통과함
## 📝 추가 정보
(작성할 내용 있으면 작성)


Trello의 Automation Rules를 활용하여 카드 생성시 자동으로 GitHub 연동 정보를 추가하도록 설정했다.

해당 rule을 단계에 따라 잘 진행하면
when a card is added to list "🗒 Backlog" by anyone,
post comment "🔗 **GitHub 연동 안내**\n\n
**카드 ID**: {cardid}\n\n\n카드 ID를 복사하세요!\n\n
**이슈 생성**: https://github.com/Im-almost-there/Server/issues\n\n\n
이슈 생성 후 커밋시 #이슈번호를 포함하세요!"
이 설정으로 카드가 생성되면 자동으로 카드 ID와 GitHub Issue 생성 링크가 댓글로 추가된다.

가장 핵심적인 부분인 GitHub Actions를 통한 자동화 설정이다.
이를 통해 다음과 같은 작업들이 자동으로 처리된다:
1. 커밋시 Trello 카드에 커밋 정보 추가
2. PR 생성시 카드를 Code Review 리스트로 이동
3. PR 머지시 카드를 Done 리스트로 이동
name: Trello Integration
on:
push:
pull_request:
types: [opened, closed]
jobs:
# 커밋에 이슈 번호가 있으면 Trello 카드에 커밋 정보 추가
commit-to-trello:
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Extract issue numbers and update Trello
env:
TRELLO_API_KEY: ${{ secrets.TRELLO_API_KEY }}
TRELLO_TOKEN: ${{ secrets.TRELLO_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
COMMIT_MSG=$(git log -1 --pretty=format:"%B")
ISSUE_NUMBERS=$(echo "$COMMIT_MSG" | grep -oE '#[0-9]+' | sed 's/#//')
for ISSUE_NUM in $ISSUE_NUMBERS; do
# GitHub Issue에서 Trello 카드 ID 추출
ISSUE_DATA=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/${{ github.repository }}/issues/$ISSUE_NUM")
ISSUE_BODY=$(echo "$ISSUE_DATA" | jq -r '.body // ""')
TRELLO_CARD_ID=$(echo "$ISSUE_BODY" | grep -oE "[a-zA-Z0-9]{8,24}" | head -1)
if [ -n "$TRELLO_CARD_ID" ]; then
# Trello 카드에 커밋 정보 댓글 추가
COMMIT_URL="https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
COMMENT_TEXT="커밋: $COMMIT_URL"
curl -X POST \
-H "Content-Type: application/json" \
"https://api.trello.com/1/cards/$TRELLO_CARD_ID/actions/comments?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "{\"text\":\"$COMMENT_TEXT\"}"
fi
done

이런 방식으로 커밋할 때마다 해당 이슈와 연결된 Trello 카드에 자동으로 커밋 정보가 추가된다.
# PR 생성시 Code Review 리스트로 이동
pr-to-review:
if: github.event.action == 'opened'
runs-on: ubuntu-latest
steps:
- name: Move Trello card to Code Review
env:
TRELLO_CODE_REVIEW_LIST_ID: ${{ secrets.TRELLO_CODE_REVIEW_LIST_ID }}
run: |
# PR 본문에서 이슈 번호 추출
ISSUE_NUMBERS=$(echo "${{ github.event.pull_request.body }}" | grep -oiE "(closes?|fixes?|resolves?) #([0-9]+)" | grep -oE "#[0-9]+" | sed 's/#//')
for ISSUE_NUM in $ISSUE_NUMBERS; do
# 해당 이슈의 Trello 카드를 Code Review 리스트로 이동
curl -X PUT \
"https://api.trello.com/1/cards/$TRELLO_CARD_ID?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&idList=$TRELLO_CODE_REVIEW_LIST_ID"
# PR 정보를 카드에 댓글로 추가
curl -X POST \
"https://api.trello.com/1/cards/$TRELLO_CARD_ID/actions/comments?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "{\"text\":\"PR: ${{ github.event.pull_request.html_url }}\"}"
done
# PR 머지시 Done 리스트로 이동
pr-to-done:
if: github.event.action == 'closed' && github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- name: Move Trello card to Done
env:
TRELLO_DONE_LIST_ID: ${{ secrets.TRELLO_DONE_LIST_ID }}
run: |
# PR이 머지되면 해당 카드를 Done 리스트로 이동
curl -X PUT \
"https://api.trello.com/1/cards/$TRELLO_CARD_ID?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&idList=$TRELLO_DONE_LIST_ID"
# 머지 정보를 카드에 댓글로 추가
curl -X POST \
"https://api.trello.com/1/cards/$TRELLO_CARD_ID/actions/comments?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "{\"text\":\"머지: ${{ github.event.pull_request.html_url }}\"}"
이 설정을 통해 PR이 생성되었을 때 해당 이슈와 연동된 PR은 Code Review 리스트 에 자동으로 이동된다.
똑같이 PR이 병합되면 해당 카드는 자동으로 Done 리스트 로 이동된다.
자동화를 구현하기 위해 다음과 같은 GitHub Secrets 설정이 필요하다. 각각을 어떻게 얻는지 단계별로 설명하겠다.
Step 1: Trello Power-Up 관리자 페이지 접속
Step 2: API Key 발급
TRELLO_API_KEY 로 사용Step 3: Token 발급
TRELLO_TOKEN 으로 사용 // 아래 예시 URL에서 /b/ 다음 문자열이 보드 ID
https://trello.com/b/[BOARD_ID]/board-name
리스트 ID 확인 방법:
또는
curl "https://api.trello.com/1/boards/[BOARD_ID]/lists?key=[API_KEY]&token=[TOKEN]"
위 명령어에 BOARD_ID , API_KEY , TOKEN 값 넣고 명령어 실행해보기.
Step 1: GitHub 저장소의 Settings 접속
저장소 → Settings → Secrets and variables → ActionsStep 2: Repository secrets 추가
TRELLO_API_KEY : 위에서 발급받은 API KeyTRELLO_TOKEN : 위에서 발급받은 TokenTRELLO_BOARD_ID : 트렐로 보드 IDTRELLO_CODE_REVIEW_LIST_ID : "Code Review" 리스트 IDTRELLO_DONE_LIST_ID : "Done" 리스트 IDSecret 값들은 한번 저장하면 다시 볼 수 없으므로 정확히 입력해야 함
API Key 와 Token 은 외부에 노출되지 않도록 주의 (잘 저장해두자)
GitHub Repository의 Webhooks 기능을 활용하여 팀 슬랙 채널로 실시간 알림을 받도록 설정했다.
Step 1: Slack에서 웹훅 URL 생성
https://hooks.slack.com/services/... )Step 2: GitHub Repository Webhooks 설정
Repository → Settings → Webhooks → Add webhookapplication/jsonpull_request , pull_request_review )현재 레포지토리에선 다음 이벤트들에 대한 알림을 받고 있다
설정 완료 후 다음과 같은 알림들을 팀 슬랙 채널에서 받을 수 있다:
이를 통해 팀원들이 개발 진행상황을 실시간으로 파악하고 빠르게 피드백을 주고받을 수 있게 되었다.
이슈 생성

PR 생성

Commit & PR 병합
