백승현
전체 프로젝트
2026·설계·구현 (단독)

GitHub 이슈 ↔ 노션 칸반 자동 동기화

팀이 GitHub 이슈와 노션 보드를 병행하며 상태를 두 번 옮기던 문제를 GitHub Actions 워크플로우 하나로 해결한 팀 협업 자동화.

GitHub ActionsNotion API

주요 기여

이슈 상태를 GitHub와 노션에 두 번 옮기던 걸 GitHub Actions 하나로 자동화했습니다. 핫픽스 브랜치 때문에 QA 중인 카드가 다시 개발 중으로 돌아가는 일이 없도록 역행을 막는 데 신경을 썼습니다.

문제

이슈 생성·브랜치 푸시·PR 오픈·이슈 닫힘마다 사람이 노션 카드를 찾아 상태를 옮겨야 했고, 누락되면 보드를 아무도 믿지 않게 되는 구조였습니다.

목표

GitHub 이벤트가 노션 카드 상태를 자동으로 갱신하되, 카드가 한 번이라도 거꾸로 가지 않아 팀이 자동화를 신뢰할 수 있게 만드는 것.

구현

이슈 생성 → 카드 생성(시작 전, 파트 FE, 이슈 링크) / 브랜치 첫 푸시·PR 오픈 → 개발 중 / 이슈 닫힘 → DEV/QA / 재오픈 → 시작 전 / 담당자 지정 → 노션 계정 매핑으로 이벤트를 상태에 대응시켰습니다(327줄 워크플로우 + 설정 가이드 90줄). 이슈 본문 마크다운을 노션 블록으로 변환해 카드에 삽입하고, 브랜치명은 이슈 번호를 포함할 때만 매칭되게 했습니다. 머지 전 실제 보드에서 전체 사이클(생성 → 개발 중 → 닫힘 → 재오픈 → 담당자 → 역행 가드)을 로컬 스크립트로 검증했습니다.

어려웠던 점

핫픽스 브랜치나 재PR이 이미 QA 단계인 카드를 '개발 중'으로 되돌리는 역행, 그리고 노션 보드 구조가 바뀌면 워크플로우가 통째로 죽는 문제.

해결 방법

'개발 중' 이동은 현재 '시작 전'인 카드만 대상으로 하는 역행 가드를 넣었습니다. DB 스키마를 실행 시점에 조회해 속성 존재 여부와 타입을 자동 감지하고, 없는 속성은 건너뛰며 상태 옵션 오타는 에러로 안내합니다. 파트 값만 바꾸면 백엔드 레포에도 적용되는 형태로 설계했고, 이후 신규 위원 합류 시 매핑 한 줄 추가로 확장했습니다.

회고

자동화는 성공 경로보다 예외 경로를 먼저 정의해야 신뢰를 얻습니다. 내가 만든 도구도 남이 설정할 수 있어야 쓸모가 있어서 가이드 문서를 함께 썼습니다.