Jira는 튜링 완전하다
요약
Jira Automation을 사용하여 Minsky 머신을 구현함으로써 Jira의 튜링 완전성을 증명한 기술적 분석입니다. Epic 상태를 프로그램 카운터로, 연결된 이슈 수를 레지스터로 활용하여 산술 연산과 루프를 구현할 수 있음을 보여줍니다.
핵심 포인트
- Jira Automation은 Minsky 머신 모델을 통해 튜링 완전성을 가짐
- Epic 상태는 프로그램 카운터, 연결 이슈는 레지스터 역할을 수행
- JQL 조건 규칙을 통해 조건 분기 및 명령 디스패치 구현 가능
- Jira Cloud의 체인 깊이 제한(10)은 외부 재트리거로 극복 가능
Jira Automation은 두 무한 카운터와 유한 명령 상태를 가진 Minsky 머신을 표현해 Jira의 튜링 완전성을 보일 수 있음- Epic 상태는
프로그램 카운터, 연결된 Bug와 Task 수는 두 레지스터가 되며, Automation 규칙이 명령별 디스패치 테이블이 됨 INC
와DEC
는 연결 이슈 생성·삭제로 구현되고, 조건 분기는JQL 조건 규칙으로 연결 이슈 수를 검사해 결정함- 덧셈 예시는
A=2
,B=3
에서 Bug를 줄이고 Task를 늘려 실제*.atlassian.net
실행에서Task 5개와 정지 상태에 도달함 - Fibonacci 예시는 이슈 유형 변환으로 루프를 줄이며, Jira Cloud의
체인 깊이 제한 10에 닿으면 수동 재트리거로 계속 진행 가능함
Jira 자동화로 만든 Minsky 머신
Jira Automation은 두 개의 무한 카운터와 유한한 명령 상태를 갖는 Minsky register machine을 표현할 수 있어, Jira의 튜링 완전성을 보이는 환원이 가능함- Minsky가 1967년에 증명한 모델은
INC r; goto S
와if r == 0 goto S else (DEC r; goto S')
만으로 구성됨 - Jira 구성 요소는 Minsky 머신의 각 요소에 대응됨
Register A: 연결된Bug이슈 수Register B: 연결된Task이슈 수Program Counter: 단일Epic이슈의 상태Dispatch Table: 명령 상태별 Jira Automation 규칙Clock: 자동화가 트리거하는 전환 또는 체인 제한 이후 외부 재트리거
- Epic 상태가 현재 명령을 인코딩하고, Automation rules가 연결 이슈 수를 검사해 다음 상태로 전환함
INC
와DEC
는 해당 유형의 연결 이슈 생성과 삭제로 구현되고, 조건 분기는 JQL 조건 규칙으로 처리됨
실행 예시와 제한
덧셈 프로그램은A
를 줄이면서B
를 늘리는 Minsky 프로그램으로 구성됨1. if A == 0 goto 3 else (DEC A; goto 2) 2. INC B; goto 1 3. HALT
- 최소 구현은 하나의 Epic, 연결 이슈 5개, 명령 상태별 Automation 규칙 하나씩으로 구성됨
워크플로와 규칙
- Jira Workflow에 초기 상태
BACKLOG
, 이후TODO
,DEV
,PROD
를 만들고 모든 상태가 서로 전환 가능하게 설정함 BACKLOG
상태의 Epic을 하나 생성함TODO
규칙은DEC A; if A=0 halt, else goto DEV
를 구현함- Epic 상태가
TODO
로 바뀌면 트리거됨 - 연결된 Bug가 하나 이상 있으면 Bug 하나를 삭제하고 Epic을
DEV
로 전환함 - Bug가 없으면 Epic을
PROD
로 전환해 정지함
- Epic 상태가
DEV
규칙은INC B; goto TODO
를 구현함- Epic 상태가
DEV
로 바뀌면 트리거됨 - 새 Task를 만들고 Epic에 연결함
- Epic을
TODO
로 전환함
-
Epic 상태가
-
두 규칙 모두 "
Allow rule to trigger other rules"가 활성화됨 -
Jira Workflow에 초기 상태
초기값과 결과
- Epic에 Bug 2개와 Task 3개를 연결해
A=2
,B=3
으로 초기화함 - Epic을
TODO
로 전환하면 다음 흐름으로 연쇄 실행됨(2,3) TODO → (1,3) DEV → (1,4) TODO → (0,4) DEV → (0,5) TODO → (0,5) PROD
- 실제
*.atlassian.net
인스턴스에서 실행됐고, 최종적으로 Epic은PROD
에 도달하며 Bug 0개와 Task 5개가 연결됨 - 이 실행은 Jira 자동화로
2 + 3 = 5
를 계산한 결과가 됨
- Epic에 Bug 2개와 Task 3개를 연결해
Fibonacci 구성
Convert Issue Type은 Bug → Story, Story → Task처럼 이슈 유형을 즉시 바꿀 수 있음CONVERT
는DEC + INC
로 표현 가능해 계산 능력을 확장하지 않지만, 이동 루프의 디스패치 테이블을 줄여 더 복잡한 프로그램을 다루기 쉽게 만듦- Fibonacci는
(A, B) → (B, A+B)
로 표현되며, 세 레지스터A=Bug
,B=Task
,C=Story
와 세 상태TODO
,QA
,DEV
로 구성됨TODO: if any linked Task exists: CONVERT Task → Story INC Bug transition to TODO else: transition to QA QA: if any linked Bug exists: CONVERT Bug → Task transition to QA else: transition to DEV DEV: if any linked Story exists: CONVERT Story → Bug transition to DEV else: transition to TODO
- 초기 상태는
A=1
,B=1
,C=0
이며,Task 수인B
에서1, 1, 2, 3, 5, 8, 13, ...
수열이 나타남 - 덧셈 머신과 달리 Fibonacci 머신에는 정지 상태가 없고, Jira Cloud의 체인 깊이 제한 10에 도달할 때까지 실행됨
- 제한에 닿으면 운영자가 Epic을 다시 트리거해 계속 진행할 수 있으며, 한 번의 상태 편집으로 연쇄 실행이 재시작됨
- Jira Data Center는
automation.rule.execution.timeout
과 관련 설정을 구성 가능한 속성으로 노출함 - 무한한 이슈 생성과 규칙 실행을 가정하면 Jira 자동화 언어는 두 카운터 머신을 인코딩할 수 있으며, 물리 컴퓨터도 유한하다는 통상적 기준에서는 Jira Cloud의 유한 쿼터가 이 구성을 반박하지 않음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기