개발자의 업무 중 가장 번거로운 것 중 하나가 바로 '상태 업데이트'입니다. 코드를 짜고 PR을 올린 뒤, 다시 Jira로 넘어가 이슈 상태를 'QA'로 옮기고, 이번 배포 버전을 찾아 Fix Version을 넣는 과정은 단순하지만 귀찮습니다. 이번에 n8n을 활용해 이 과정을 완전히 자동화하며 느낀 후기를 공유합니다.
n8n의 가장 큰 장점은 데이터의 흐름이 한눈에 보이는 캔버스입니다.
직관적인 디버깅: 코드로만 짠 자동화는 중간에 데이터가 어떻게 변하는지 로그를 찍어봐야 알 수 있지만, n8n은 각 노드를 통과할 때마다 변하는 데이터를 시각적으로 즉시 확인할 수 있습니다.
복잡한 분기 처리: 조건에 따라 IF 노드나 Switch 노드로 갈라지는 경로가 선으로 연결되어 있어, 기획자나 다른 개발자와 로직을 논의할 때도 별도의 다이어그램 없이 화면 그 자체가 명세서가 됩니다.
심리적 안정감: 수십 개의 API가 얽힌 복잡한 로직도 캔버스 위에 정리되어 있으면 구조적으로 파악하기 훨씬 쉽습니다.
노드 기반 도구임에도 불구하고, 정규표현식을 활용한 이슈 키 추출처럼 섬세한 작업이 필요할 때는 언제든 JavaScript 코드를 작성할 수 있습니다. "노드로 시작해서 코드로 완성한다"는 점이 개발자에게는 최고의 유연성을 제공합니다.
물론 시각적으로 예쁘다고 해서 모든 게 쉬운 건 아니었습니다.
아이템 매칭의 섬세함: 여러 개의 이슈 키를 동시에 처리할 때, n8n이 각 아이템을 어떻게 인식하는지(Item Mapping) 이해하는 것이 핵심이었습니다. Filter 노드에서 Run For Each Item 설정을 놓치면 데이터가 하나만 전달되는 등, n8n만의 데이터 처리 규칙을 익히는 과정이 필요했습니다.
슬랙의 독특한 규격: 슬랙은 일반적인 마크다운과 다른 mrkdwn 방식을 사용합니다. 굵은 글씨를 위해 ** 대신 *를 써야 하는 등 플랫폼별 특성을 맞추는 데 시행착오가 있었습니다.
제가 구축한 시스템은 다음과 같이 작동합니다.
트리거: GitHub PR이 생성되거나 업데이트됨.
추출: PR 본문은 물론, **브랜치명(feature/SH-1234-...)**에서 정규표현식으로 이슈 키를 정확히 뽑아 별도 변수로 저장.
조회: HTTP Request 노드로 Jira 프로젝트의 모든 Fix Versions 목록을 API로 호출.
판단: Code 노드에서 미출시 상태이면서 이름에 'dashboard'가 포함된 최신 버전을 검색.
실행: 해당 이슈를 'QA' 상태로 전환함과 동시에 찾은 Fix Version을 할당.
알림: 처리 결과를 슬랙으로 예쁘게 포맷팅하여 전송.
이제 기초적인 자동화를 넘어, 실제 운영 환경에서 발생하는 변수들을 해결하고 더 고도화된 영역으로 확장하려 합니다.
현재 PR의 diff 내용을 AI에게 전달해 변경 사항을 요약하여 슬랙으로 보내는 기능을 구현해 사용 중입니다. 하지만 프로젝트 규모가 커짐에 따라 "방대한 양의 Diff 데이터를 어떻게 효율적으로 처리할 것인가"라는 문제가 있습니다.
토큰 한계 극복: 수천 줄이 넘는 diff는 AI 모델의 토큰 제한을 초과합니다. 이를 해결하기 위해 package-lock.json 같은 불필요한 파일을 자동으로 걸러내고, 핵심 비즈니스 로직이 담긴 파일 위주로 데이터를 정제하는 전처리 로직을 고도화할 계획입니다.
분할 및 요약 (Map-Reduce): 너무 큰 변경 사항은 파일 단위로 나누어 개별 요약한 뒤, 이를 다시 종합하여 최종 요약본을 생성하는 방식을 검토하고 있습니다.
리뷰 품질 정교화: 단순히 양을 줄이는 데 그치지 않고, 코드의 맥락을 유지하면서 보안 취약점이나 성능 이슈 등 핵심 포인트만 정확히 짚어낼 수 있도록 프롬프트 엔지니어링을 지속적으로 개선하려 합니다.
PR이 Merge되는 순간을 트리거로 삼아, 사람이 개입하지 않아도 다음 단계가 이어지는 파이프라인을 구상 중입니다.
상태 자동 전환: Merge 완료 시 관련 Jira 이슈들을 자동으로 'Done'으로 이동시킵니다.
출시 처리 연동: 실제 서비스 배포 완료 시점에 Jira의 'Fix Version'을 출시(Released) 상태로 변경하고, 배포 완료 로그를 자동으로 남기는 끝단까지의 자동화를 목표로 하고 있습니다.