A2A 재구독 산출물 검수, 끊기기 전 조각을 다시 붙여도 될까
A2A 재구독의 첫 Task에서 작업 상태와 산출물 기준을 다시 잡습니다. GetTask, lastChunk, 작업 ID와 산출물 누락을 가상 응답 7개로 대조합니다.
이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스
2026년 11월 기준, A2A 재구독의 첫 Task를 새 수집 기준으로 삼습니다. 작업이 이미 끝났다면 GetTask에서 상태와 기대 산출물을 다시 확인합니다.
외부 에이전트가 대사 보고서를 만들고 있고, 업무 화면이 보고서 앞부분을 받은 뒤 연결을 잃었다고 가정해 보겠습니다. 새 스트림의 첫 작업 객체에 그 앞부분이 이미 들어 있다면 예전 조각을 더할 때 같은 문단이 두 번 보일 수 있습니다. 반대로 재연결에 성공했다는 사실만으로 보고서가 완성됐다고 판단하면 아직 없는 산출물을 업무에 넘기게 됩니다.
이 글은 에이전트 산출물을 운영 화면에 연결하는 IT·플랫폼 책임자를 위한 인수 기준입니다. 첫 요청의 주소와 전송 방식을 고르는 문제는 A2A Agent Card 검수, 스트림에서 JSON 메시지를 복원하는 문제는 MCP SSE 수신 검수에서 다룹니다.
재구독의 첫 응답에서 무엇을 기준으로 삼나요?#
A2A v1.0.1의 SubscribeToTask는 구독 시점의 현재 상태를 담은 Task를 첫 이벤트로 반환해야 합니다. 이 글의 예시는 같은 서버·인가 범위의 작업 ID를 확인하고, 이전 조각을 별도 진단용으로 남긴 뒤 새 Task의 산출물을 조립 기준으로 삼습니다. 첫 응답이 Task가 아니거나 ID가 다르면 데이터를 섞기 전에 작업을 다시 확인합니다. 재구독은 현재 상태부터 관찰하는 기능이며 끊긴 동안 놓친 이벤트 전체의 재전송을 보장하지 않습니다. A2A 재구독 명세
같은 작업 안에서 이후 이벤트의 append가 true이면 같은 artifactId의 이전 산출물에 조각을 더하는 의미입니다. 붙일 기준을 확인할 수 없다면 업무 화면에 완성본처럼 표시하지 말고 현재 상태와 산출물을 다시 확인합니다. lastChunk는 그 산출물의 마지막 조각입니다. 작업의 완료 상태와 인수 조건은 별도로 확인합니다. A2A 산출물 이벤트 명세
어떤 응답을 표본으로 검수하나요?#
첫 Task 또는 다시 읽은 Task의 작업 ID, 상태, 기대 산출물 ID를 비교합니다. 아래 표의 업무는 산출물 하나를 기대한다고 가정했습니다. inspect는 내용 검수를 시작해도 된다는 표시입니다. 산출물 형식, 필수 항목, 접근 권한을 확인한 뒤 업무 인수 여부를 결정합니다.
| 가상 입력 | 판정 | 화면과 운영 기준 |
|---|---|---|
| 첫 Task가 진행 중이고 기대 산출물이 있음 | 관찰 계속 | 새 Task의 값으로 수집 기준을 정함 |
| 첫 Task가 진행 중이고 기대 산출물이 없음 | 관찰 계속 | 해당 산출물은 미확인으로 표시 |
| 첫 이벤트가 Task 없이 산출물 마지막 조각 | 작업 확인 | 기준 없이 조각을 연결하지 않음 |
| 첫 Task의 작업 ID가 다름 | 작업 확인 | 해당 이벤트를 현재 작업에 적용하지 않음 |
| GetTask가 완료이고 기대 산출물이 있음 | 내용 검수 | 보고서 형식과 필수 항목 확인 |
| GetTask가 완료인데 기대 산출물이 없음 | 인수 보류 | 산출물 누락 사유 확인 |
| GetTask가 실패이고 산출물 조각이 있음 | 인수 보류 | 조각은 진단용으로 구분 |
function recoveryBasis(task, taskId, artifactId) {
if (!task || task.id !== taskId) return { next: "verify-task" };
const artifact = task.artifacts?.find(
(item) => item.artifactId === artifactId,
);
const state = task.status.state;
if (state === "TASK_STATE_COMPLETED") {
return { next: artifact ? "inspect" : "hold-missing", artifact };
}
return {
next: state === "TASK_STATE_WORKING" ? "observe" : "hold-state",
artifact,
};
}서버·인가 범위와 파싱된 응답 구조는 이 함수에 전달하기 전에 검증한다고 가정했습니다. 함수는 업무의 다음 판정과 비교할 산출물을 돌려줍니다. 실패 상태의 산출물이 남아 있어도 자동 인수하지 않습니다.
다시 구독하지 않고 조회만 해도 되나요?#
운영 화면에 중간 결과가 필요 없다면 팀이 정한 간격과 한도에서 GetTask로 현재 상태를 읽는 방법도 있습니다. A2A v1.0.1에서는 작업이 완료·실패·취소·거절 상태에 도달하면 재구독 스트림을 종료합니다. 이미 종료된 작업은 다시 구독할 수 없습니다. 연결이 닫혔다는 사실만으로 작업 성공을 판단하지 않습니다. 진행 중으로 조회한 직후 작업이 끝날 수 있으므로 재구독이 거절되면 같은 작업의 현재 상태와 인가 범위를 다시 확인합니다. 재구독 미지원이나 접근 거절을 작업 성공으로 표시하지 않습니다. A2A 작업 조회 명세
작업 데이터 모델에서 산출물 배열은 선택 필드입니다. 산출물이 없어도 되는 업무라면 그에 맞게 인수표를 정합니다. 보고서를 요구하는 업무라면 완료 상태라도 기대 산출물이 없을 때 인수를 보류합니다. 규격이나 클라이언트 버전을 바꾸면 재구독 첫 응답, 종료 경합과 산출물 누락 표본을 다시 검수합니다.
어떤 근거를 확인했나요?#
- A2A v1.0.1 공개 기록은 2026년 5월 28일 UTC에 게시됐습니다.
- A2A Task와 상태 데이터 모델, 재구독, 작업 조회와 산출물 이벤트의 동작을 2026년 11월 9일 확인했습니다.
알파카랩스 업무 자동화·API 연동 서비스는 시스템 연동 범위, 예외 확인과 재처리, 운영 인수 조건을 협의한다고 공개 안내합니다. 위 코드와 가상 응답은 검수 범위를 정하는 설계 예시입니다.
A2A 재구독 산출물 FAQ#
재구독 뒤 예전 산출물 조각을 이어 붙이나요?
이 예시는 첫 Task의 산출물을 새 조립 기준으로 삼습니다. 끊기기 전 조각을 자동으로 붙이지 않고 비교나 장애 진단이 필요할 때 분리해 봅니다.
lastChunk가 true이면 작업도 완료됐나요?
그 산출물의 마지막 조각을 뜻합니다. 작업 상태를 별도로 확인하고, 완료 뒤에도 업무에서 필요한 산출물과 필수 항목을 검수합니다.
작업이 이미 끝났다면 어떤 응답을 확인하나요?
같은 작업을 GetTask로 조회해 종료 상태와 산출물을 확인합니다. 완료와 실패를 구분하고 필요한 산출물이 없으면 인수를 보류합니다.
완료 Task에 산출물 배열이 없으면 규격 위반인가요?
Task의 산출물 배열은 선택 필드입니다. 해당 업무가 보고서를 요구한다면 산출물이 없는 완료 응답은 규격 판정과 별개로 업무 인수를 보류합니다.
재구독 첫 응답의 작업 ID가 다르면 어떻게 하나요?
현재 업무에 붙이지 않습니다. 같은 서버·인가 범위와 기대 작업 ID를 다시 확인하고, 일치하는 작업을 조회합니다.
재연결 산출물 인수표 초안 협의#
식별 정보와 실제 본문을 뺀 첫 Task, 종료 조회, 누락 사례를 준비해 주세요. 첫 범위 협의에서 어떤 응답을 기준으로 다시 시작하고 언제 인수를 보류할지 인수표에 정리합니다. 소요 시간은 표본과 검수 범위를 확인한 뒤 협의합니다.
재연결 뒤 산출물 인수 기준을 정리합니다
첫 범위 협의에서 비식별 응답으로 재연결 기준과 산출물 보류 조건을 정리합니다. 소요 시간은 자료와 검수 범위를 확인한 뒤 협의합니다.
재연결 산출물 인수표 초안 협의