오래 실행했다는 사실은 완료 근거가 아니다
M31.04에서는 같은 조건의 반복/회귀와 결과 분모를 확인했다. 작업이 길어지고 여러 Agent가 참여해도 기준은 같다. 각 작업이 어떤 입력/소스에서 무엇을 만들었고 어떤 검사를 수행했는지 확인해야 한다. 도구가 “완료”라고 답했거나 세션이 끝났다는 상태만으로 현재 결과를 승인하지 않는다.
여기서 Agent는 정해진 도구와 작업 범위 안에서 계획·수행·보고하는 실행 주체를 뜻한다. 조정자는 작업 사이의 의존성과 인수/통합을 관리하는 역할이다. 여러 실행 주체를 만든다고 실제 시스템 권한이나 품질 검수가 자동으로 분리되지는 않는다. 이번 교재의 권한 표는 가상 작업의 명세이며 실제 도구/장비에 대한 실행 승인이 아니다.
병렬화할 수 있는 일과 순서대로 할 일을 나눈다
DAG(방향 비순환 그래프)는 작업과 선행 관계를 고리가 없게 표현한 것이다. 선수가 끝나야 후속 작업을 수행하며 서로 독립인 가지를 병행할 수 있다. 파일 소유나 공유 서비스·메모리 충돌이 있으면 그래프상 독립이어도 동시 실행이 적절하지 않을 수 있다.
그림 M31.05-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
합성 계획은 A→(B,C)→D다. A가 공통 기록 계약을 확정한 다음 B와 C가 같은 개정을 읽고, 둘 다 끝나야 D가 인수한다. 시간은 아래 사전 가정이며 실제 측정값이 아니다.
| 작업 | 역할·출력 소유 | 가정 시간/예약 작업 메모리 |
|---|---|---|
| A | 공통 schema/계약, 한 담당자가 직렬 확정 | 3분/2GiB |
| B | A개정의 회귀/계산, tests/와 고유 출력 | 8분/6GiB |
| C | A개정의 설명/양식, docs/와 고유 출력 | 4분/2GiB |
| D | B/C 인수와 통합 검사 | 2분/1GiB |
직렬 시간은3+8+4+2=17분이다. B/C가 독립 파일·실행 환경을 쓰고 자원이 충분하다면 이상적인 병렬 시간은3+max(8,4)+2=13분이다. 가장 오래 걸리는 선행 경로 A-B-D가 결과를 결정한다. 작업자 수로 전체 시간을 단순히 나누지 않는다. 준비/동기화·재실행·자원 경합은 이 이상값에 포함하지 않았다.
B/C의 메모리 합은6+2=8GiB로 작업 예산8GiB에 맞는다. 운영체제/공통 플랫폼의 여유는 별도다. C가3GiB 필요한 변형이면9GiB가 되어 같은 예산에서 겹칠 수 없다. 이 단순 계획에서 B/C를 직렬로 두면 다시17분이다. 숫자를 낮춰 적는 대신 실제 요구와 예산을 확인하고 계획을 바꾼다.
파일 소유와 실행 격리는 다르다
B가 tests/, C가 docs/를 맡아도 둘 다 공통 schema를 동시에 고치면 충돌할 수 있다. 공통 변경은 A 담당자에게 돌려 계약을 새 개정으로 확정하고 후속 가지를 다시 맞춘다. 다른 담당자의 파일을 이전 상태로 되돌려 자신의 결과를 맞추지 않는다.
Git worktree 문서는 같은 저장소에 여러 작업 트리를 둘 수 있음을 설명한다. 작업 디렉터리/브랜치를 분리해도 외부 DB·캐시·포트·모델 파일·자격증명/장비가 자동으로 격리되는 것은 아니다. 한 작업이 공유 캐시를 초기화하거나 같은 시뮬레이터를 리셋하면 다른 작업의 전제가 바뀔 수 있다.
따라서 base 소스 개정과 소유 경로·변경 금지 경로, 출력/임시 디렉터리·프로세스/포트·자원 한도와 인수자를 지정한다. 결과 통합은 한 주체가 검토된 개정 순서대로 수행하고 통합 후 검사를 확인한다. 병렬 작성과 최종 인수는 같은 단계가 아니다.
작업 범위와 권한을 따로 명시한다
파일을 맡겼다는 이유로 네트워크·비밀값·배포·장비 명령까지 허용한 것은 아니다. “필요한 것 모두” 대신 입력/출력과 사용할 수 있는 동작을 정한다. 새로운 권한이 필요한 경우 현재 작업 범위에 실제 포함되는지 확인하고, 없는 권한을 하위 작업으로 옮겨 얻으려 하지 않는다.
| 권한 범주 | 합성 B/C의 기본 범위 | 범위 밖의 예 |
|---|---|---|
| 읽기 | 지정 소스/합성 입력·공개 문서 | 무관한 개인 파일/비밀값 수집 |
| 쓰기 | 소유 경로의 변경·고유 attempt 출력 | 다른 담당자의 파일·원본 결과 덮어쓰기 |
| 실행 | 지정 로컬 검사/계산·자원 예산 | 승인되지 않은 외부 서비스·장비 명령 |
| 결과 전달 | 변경/검사·산출물 지문과 미확인 보고 | 비밀값을 로그/체크포인트에 포함 |
이 표의 구체적 범위는 교육용 가정이다. 실제 사용자/조직이 이미 허용한 범위와 환경의 규칙을 적용한다. 읽기·로컬 수정·외부 작용을 무조건 같은 승인 절차로 묶지 말고, 현재 범위와 결과에 필요한 권한을 구체적으로 대조한다.
체크포인트에는 다시 시작할 근거를 남긴다
체크포인트(checkpoint)는 중단 뒤에도 마지막 확정 단계와 다음 행동을 복구할 수 있는 기록이다. “거의 끝남” 같은 요약만 남기면 이전 결과를 현재 소스로 오인하거나 실행 중인 작업을 중복 발행할 수 있다.
최소 기록은 작업/attempt ID·명세/기준 버전·base/source/input/config/environment 지문, DAG/담당/권한 범위, 완료/실패/미확인 단계, 실제 실행 job/process와 마지막 heartbeat, 생성된 산출물/지문·실행/검사 결과, 남은 의문과 다음 행동이다. 경로/환경 식별자는 남기되 자격증명 자체를 넣지 않는다.
작업 소유권을 일정 기간만 부여하는 lease를 쓴다면 만료 시각도 체크포인트에 남긴다. P3의 통로 예약처럼, 소유권 만료가 실제 작업의 종료를 만들지는 않는다.
A완료·C완료·B실행 중에 조정자가 중단됐다면 먼저 원 B가 아직 실행 중인지와 그 출력 상태를 확인한다. heartbeat 만료는 연락이 끊겼다는 근거이지 프로세스 종료의 근거가 아니다. 취소 요청/수락도 실제 종료·출력 마감과 다르다. GitHub Actions concurrency 문서는 동시 작업 제어의 한 구현 예이며, 여기의 일반 복구 계약을 특정 서비스가 자동 보장한다고 해석하지 않는다.
재시도는 원래 실행과 외부 효과를 보존한다
멱등성(idempotency)은 같은 요청을 반복해도 추가 효과가 생기지 않도록 정한 성질이다. 재시도 가능한 읽기/독립 계산과 메시지 전송·배포·장비 명령은 같은 종류가 아니다. 응답이 없다고 실제 실행이 없었다고 가정하면 같은 외부 효과를 두 번 만들 수 있다.
B의 계산이 실패했다면 원 attempt의 입력/로그/실패를 남기고 새 attempt ID와 고유 출력으로 재실행한다. 원 B가 살아 있으면 중복 실행부터 시작하지 않는다. 외부 효과가 있는 작업은 실행 상태·요청 ID/중복 방지·관측/복구 계약을 확인하기 전 임의 재전송하지 않는다. 실물 변경과 감독 경계는 다음 M31.06에서 구체화한다.
실패 회차를 새 성공으로 덮어쓰거나 같은 파일명으로 과거 결과를 바꾸면 재현/분모가 사라진다. 중간 파일이 있다는 사실도 마감/무결성을 증명하지 않는다. 단계별 완료 표식과 크기/지문·예상 목록을 대조한다.
산출물 인수는 현재 소스의 검사까지 연결한다
GitHub artifact 안내는 실행 산출물을 보존/전달하는 경로를 설명한다. 업로드나 파일 다운로드 성공이 시나리오 통과와 같은 것은 아니다. D는 다음을 대조한다.
- B/C가 같은 확정 A개정에서 시작했고 최종 통합 소스에 적용 가능한가?
- 변경 경로와 차이가 담당/권한 범위 안에 있고 다른 결과를 되돌리지 않았는가?
- 검사 명령·환경·시작/종료·exit code·실제 검사 개수/결과와 산출물 지문이 있는가?
- 마지막 소스 변경 뒤에 필요한 회귀/통합 검사가 수행됐는가? 재사용이라면 같은 조건/지문과 범위를 설명했는가?
- 실패/미실행·중단·선택 심화와 실제 확인한 범위를 구분했는가?
예를 들어 B보고서가 sourceS1의 결과인데 통합 소스가S2라면 같은 이름의 파일이어도 S2검수로 자동 승인하지 않는다. exit0/검사0건도 필수 회귀 통과가 아니다. 작성자의 “done”과 검수자의 통과를 별도 상태로 두며 독립 검수자가 없다면 자기검수라고 명시한다.
이 활동은 실제 다중 Agent 성능을 측정하지 않았다. 순서·권한·체크포인트·현재 산출물 인수 계약을 제공 표로 검토한다. 다음 M31.06은 시뮬레이션/엣지 연결과 실물 변경의 정확한 대상·범위를 다룬다.