출처:

How We Cut up to 80% of Engineering “Chores” Using AI Agents in Jira


작성자: 
Arnaud Moret, Principal Engineer, Jira

Waiyee Loo, Senior Engineer, Jira


발행일: 2026년 06월 01일



Jira 엔지니어링 팀은 KTLO(Keeping the Lights On) 업무에 예상보다 많은 시간을 할애하고 있었습니다.

이는 누구도 많은 시간을 들이고 싶어 하지는 않지만 반드시 수행해야 하는 작고 중요한 유지보수 작업을 의미합니다.

예를 들어 오래된 기능 플래그 정리, 불안정한 테스트(flaky tests) 추적, 발견된 취약점 수정, 접근성 이슈 해결, 그리고 장기간 누적된 버그를 처리하는 작업 등이 포함됩니다.


팀은 단순히 기술 부채를 관리하는 데 그치지 않고, 최고의 도구를 활용해 엔지니어링 조직이 더 빠르게 움직일 수 있도록 지원하는 데 시간을 집중하고자 했습니다.

이를 위해 에이전트, Jira, 그리고 워크플로를 활용해 핵심적인 반복 업무에 소요되는 시간을 최대 80%까지 줄일 수 있는 방식을 마련했습니다.


Jira는 이러한 전략의 중심에 있습니다. 각 작업 항목(work item)은 수행해야 할 업무를 기록하는 역할을 할 뿐만 아니라, 에이전트에게 제공되는 프롬프트 역할도 합니다.

에이전트가 필요로 하는 모든 컨텍스트는 작업 항목, Atlassian’s Teamwork Graph, 그리고 워크플로 자동화에 포함된 명시적인 지침을 통해 제공됩니다.


팀은 수년 동안 이러한 유형의 문제를 직접 해결해 왔습니다.

이러한 패턴에 대한 이해가 있었기에 에이전트에 업무를 위임할 수 있었습니다.

효과적인 정리가 어떤 모습인지 알고 있기 때문에 명확한 기준을 정의하고, 검토 단계를 마련하며, 팀의 품질 기준을 충족하는 코드를 생성할 수 있도록 인간이 개입하는(human-in-the-loop) 시스템을 설계할 수 있었습니다.


팀에게 Jira는 단순히 업무를 추적하는 도구가 아닙니다.

Jira는 에이전트에 필요한 컨텍스트를 제공하고, 업무를 할당하며, 에이전트가 수행한 작업 중 실제로 코드베이스에 반영할 내용을 팀이 통제하는 공간입니다.


다음은 이러한 프레임워크를 활용해 엔지니어링 반복 업무 일부를 자동화한 두 가지 사례입니다:


Jira에서 AI 에이전트를 활용해 불안정한 테스트(flaky tests)를 더 빠르게 해결하는 방법



불안정한 테스트(flaky tests)는 개별적으로 보면 작은 유지보수 이슈처럼 보이지만, 시간이 지날수록 개발 생산성에 실질적인 부담을 줍니다.

이는 빌드를 중단시키고, CI에 대한 신뢰를 떨어뜨리며, 배포 속도를 늦추고, 엔지니어가 제품 개발 대신 문제 해결에 시간을 쓰도록 만듭니다.


기존에는 불안정한 테스트 하나를 해결하는 데 약 2시간이 소요되었습니다.

이러한 문제는 하루에 평균 한 건, 많을 때는 그 이상 발생했습니다.

엔지니어는 CI 실패 원인을 분석하고, 로컬 환경 또는 CI와 유사한 환경에서 문제를 재현한 뒤, 원인이 테스트 코드인지 제품 코드인지 판단하고 수정 작업을 수행해야 했습니다.


Jira 기반의 에이전트 워크플로를 도입한 이후, 매월 약 1주일 분량의 엔지니어링 시간을 절약하고 있습니다.

이를 통해 불안정한 테스트 해결에 투입되는 엔지니어링 시간을 최대 80%까지 줄일 수 있었습니다.


에이전트에 적절한 맥락을 제공하는 방법


수작업을 줄이기 위해, 팀은 그동안 처리해 온 불안정한 테스트 문제를 분석했습니다.

비동기 처리 시점 이슈, 경쟁 상태(race conditions), 불안정한 테스트 환경 설정, 신뢰할 수 없는 목(mock) 객체, 페이지 상태 문제, 시각적 렌더링 차이 등 반복적으로 나타나는 공통적인 근본 원인과 해결 패턴을 파악했습니다.


이러한 학습 내용을 재사용 가능한 에이전트 스킬로 전환했습니다.

모든 불안정한 테스트에 하나의 범용 워크플로를 적용하는 대신, 테스트 유형에 따라 적절한 에이전트 스킬이 해당 범주에 특화된 지침을 적용할 수 있도록 설계했습니다.


예를 들어 다음과 같은 스킬을 구성할 수 있습니다:


  • 단위 테스트(Unit test) 전문 스킬: 비동기 처리 시점 이슈, 목(mock) 객체, 가짜 타이머(fake timers), 테스트 격리에 중점을 둡니다.

  • 통합 테스트(Integration test) 전문 스킬: 브라우저 자동화 이슈, 네트워크 경쟁 상태(network races), 페이지 안정성, 테스트 환경 설정에 중점을 둡니다.

  • 시각적 회귀 테스트(Visual regression) 전문 스킬: 결정론적 렌더링(deterministic rendering), 스냅샷 업데이트, 이미지 차이(image diffs), 시각적 테스트 안정성에 중점을 둡니다.


에이전트가 올바른 문제를 진단할 수 있도록, 각 스킬에는 재현(reproduction) 절차도 함께 포함되어 있습니다.

예를 들어 에이전트는 CI 환경을 최대한 유사하게 재현하기 위해 속도를 낮추거나 CPU를 제한(throttled)한 조건에서 실패한 테스트를 반복 실행할 수 있습니다.

이를 통해 단일 로컬 테스트 실행에서는 드러나지 않는 간헐적 실패(intermittent failures)까지 재현할 수 있습니다.


Jira 워크플로를 활용한 이슈 자동 분류


티켓이 생성되면 워크플로는 먼저 사용자 정의 프롬프트를 기반으로 에이전트에게 트리아지(triage)를 위임하며, 해당 이슈가 실제 문제인지 검증하는 단계부터 시작합니다.

만약 해당 이슈가 오탐(false positive)으로 판단되면, 에이전트는 작업을 중단하고 그 결과를 요약해 원본 Jira 작업 항목에 코멘트로 남깁니다.

이를 통해 해당 티켓을 검토하는 엔지니어는 에이전트가 수행한 작업과 발견 내용을 별도로 탐색하지 않고도 빠르게 파악할 수 있습니다.


문제가 재현 가능한 경우에는 에이전트가 관련된 수정 패턴을 적용하고 코드 변경을 준비합니다.

이후 엔지니어링 팀을 위해 코멘트를 남기고, 엔지니어가 검토할 수 있도록 드래프트 풀 리퀘스트를 생성합니다.


핵심은 에이전트가 반복적인 1차 작업을 담당한다는 점입니다.

즉, 조사, 진단, 그리고 잠재적 수정 제안까지의 초기 과정을 수행합니다.

엔지니어는 최종적으로 변경 사항을 검증한 후 병합합니다.


이러한 방식으로 과거에는 몇 시간씩 걸리던 수동 조사 작업이 이제는 몇 분 단위의 리뷰 작업으로 줄어들었습니다.


AI 에이전트로 오래된 기능 플래그 정리를 자동화하는 방법


기능 플래그(feature flags)는 점진적 롤아웃과 안전한 실험에 매우 유용합니다.

하지만 기능 플래그로 제어되는 코드가 정기적으로 최신 상태로 관리되지 않으면 사용되지 않는 코드(dead code)가 누적되고, 이는 성능, 안정성, 개발자 생산성에 영향을 미칠 수 있습니다.


대규모 멀티 제품 코드베이스에서 정리 작업은 단순히 “코드를 제거하는 것”보다 훨씬 복잡합니다.

특정 플래그는 일부 고객에게는 완전히 롤아웃되었지만, 컴플라이언스 요구사항, 릴리스 트랙, 실험 유지 대상 등의 이유로 다른 고객에게는 여전히 활성 상태일 수 있습니다.

여러 시스템에 흩어진 정보를 조합해 플래그의 실제 상태를 파악하는 작업은 수작업에 의존해야 했고, 오류가 발생하기 쉬웠습니다.

지루하고 시간이 많이 걸리며 반복적인 작업이었고, 에이전트에 맡기기에 적합한 영역이었습니다.


이러한 작업의 상당 부분을 자동화하기 위해 Jira에 시스템을 구축했습니다.

현재까지 이 시스템을 통해 최근 70일 동안 500건 이상의 PR이 병합되었습니다.


Jira 작업 항목을 프롬프트로 활용하는 방법


그동안의 경험을 바탕으로 코드베이스에서 오래된 기능 플래그를 식별하고, 에이전트가 작업을 시작하는 데 필요한 컨텍스트를 수집할 수 있는 휴리스틱을 만들었습니다.

매일 실행되는 cron 작업을 통해 오래된 각 플래그에 대한 Jira 작업 항목을 생성하고 업데이트하며, 여기에는 다음 정보가 포함됩니다:


  • 플래그 이름 및 유형:
    플래그의 고유 식별자와 플래그 유형을 포함합니다.

    예를 들어 롤아웃 게이트(rollout gate), 실험(experiment) 등이 해당됩니다.

  • 저장소 및 코드 참조 정보:
    플래그가 사용된 정확한 레포지토리, 파일 경로, 줄 번호를 포함합니다.

  • 원하는 최종 상태:
    플래그가 제거된 후 코드가 어떤 모습이어야 하는지를 정의합니다.

    예를 들어 롤아웃 게이트의 경우 일반적으로 유지해야 하는 “on” 또는 “off” 분기를 의미합니다.

    실험의 경우 선정된 코호트, 특정 변형(variant)의 동작 방식, 또는 실험 소유자가 정의한 사용자 지정 경로가 될 수 있습니다.


Jira에서 작업 항목을 에이전트에게 위임하기


책임성과 코드 품질을 보장하기 위해 인간이 개입하는(human-in-the-loop) 시스템을 설계했습니다.

엔지니어는 생성된 작업 항목을 검토한 후 상태를 변경해 작업을 에이전트에게 위임할 수 있습니다.

이 과정에서 정리 작업 지침이 포함된 사용자 지정 시스템 프롬프트를 에이전트에 전달하는 워크플로가 실행됩니다.


Atlassian에는 수백 개의 팀이 소유한 수천 개의 레포지토리가 존재하며, 각 팀은 서로 다른 코드베이스와 개발 관행을 가지고 있습니다.

따라서 모든 상황에 동일하게 적용되는 획일적인 접근 방식은 효과적이지 않습니다.

이에 팀은 그동안 축적한 정리 작업 경험과 노하우를 레포지토리별 에이전트 스킬에 반영했으며, 시스템 프롬프트를 통해 각 에이전트가 명확한 대체 경로(fallback path)를 따를 수 있도록 했습니다.


  1. 가능한 경우, 해당 코드베이스에 특화된 지침을 제공하는 레포지토리의 기존 정리 절차를 활용합니다.

  2. 전용 스킬이 도움이 될 수 있는 레포지토리를 식별하고, 레포지토리 소유자에게 정리 절차 생성을 위한 지침을 제공합니다.

  3. 별도의 정리 절차가 없는 경우, 대부분의 코드베이스에서 활용할 수 있는 범용 정리 스킬을 적용합니다.


이제 모든 정리 작업은 일관되게 높은 품질의 PR로 이어지며, 그 과정에서 축적되는 지침은 에이전트의 의사결정을 지속적으로 개선하는 데 활용됩니다.


배운 점


두 사례에서 공통적으로 확인한 패턴은 명확합니다.

팀이 이미 잘 수행하고 있는 업무를 기반으로, 그 지식과 경험을 구조화된 Jira 작업 항목, 에이전트 지침, 그리고 에이전트 스킬에 반영한 뒤, 에이전트가 1차 작업을 담당하도록 하되 최종 결과물에 대한 통제권은 엔지니어가 유지하는 방식입니다.

만약 팀이 반복 가능한 패턴을 가진 업무에 지속적으로 엔지니어링 시간을 투입하고 있다면, 이는 에이전트 기반 자동화를 도입할 수 있는 기회가 있다는 신호일 수 있습니다.

  • No labels