실패한 자식 Task에서 순차 Build 멈추기
첫 자식 Task가 종료 코드 7로 실패할 때 다음 자식과 부모 Build 명령이 실행되지 않는지 확인하고, 오류 원문을 보존한 뒤 원인을 고쳐 전체 Build를 다시 성공시킵니다.
이번 편의 핵심
Ctrl+Shift+B를 실행한 뒤 실패 시 package.txt와 parent.txt가 없고, 복구 후에는 두 파일과 VALIDATION_OK → PACKAGE_RAN → PARENT_BUILD_RAN 기록이 모두 생기면 완료입니다.
순차 Compound Task는 앞 단계가 실패했는데도 패키징이나 배포가 이어지는 일을 막는 안전장치가 됩니다. 핵심은 오류 문구만 보는 것이 아니라 자식의 nonzero exit code, 중단된 후속 단계, 부모 Build의 실패 결과를 함께 확인하는 것입니다.
1. 시작하기 전에
난이도는 초급입니다. 앞 편의 dependsOn과 dependsOrder: "sequence" 개념을 이어 쓰지만, 이번에는 일부러 실패를 만들고 복구하므로 기존 프로젝트가 아닌 빈 연습 폴더가 필요합니다.
준비할 것
- VS Code Stable이 설치되어 있어야 합니다. — 확인: 통합 Terminal에서
code --version을 실행해 첫 줄이1.133.0인지 확인합니다. - Windows PowerShell 5.1을 사용할 수 있어야 합니다. — 확인:
powershell.exe -NoProfile -Command "$PSVersionTable.PSEdition"을 실행해Desktop을 확인합니다. - 새 연습 폴더를 Folder 또는 Workspace로 열 수 있어야 합니다. — 확인: Explorer 맨 위에 폴더 이름이 보이고 단일 파일만 연 상태가 아닌지 확인합니다.
- 기존
.vscode/tasks.json과 실습 결과 파일이 없어야 합니다. — 확인: 같은 이름 파일이 있으면 중단하고 다른 새 폴더를 사용합니다.
적용 환경 한국어 초보자 · Windows 11 · VS Code Stable 1.133.0 · Windows PowerShell 5.1
.vscode/tasks.json, build-log.txt, ready.flag, package.txt, parent.txt를 만들거나 다시 씁니다. 실제 빌드·배포 폴더에는 적용하지 말고, 기존 파일은 보호 대상으로 취급합니다. 첫 실행은 의도적으로 실패하지만 설치·권한 상승·외부 전송은 하지 않습니다. 중단 조건: 연습 폴더가 아닌 경로가 열렸거나 동일 이름 파일에 필요한 내용이 있거나, 예상하지 못한 외부 명령·관리자 권한 요청이 보이면 실행하지 않습니다.2. 알아둘 핵심 개념
종료 코드와 실패
프로세스가 0으로 끝나면 일반적으로 성공, 0이 아닌 값으로 끝나면 실패입니다. 이번 검증 Task는 조건이 충족되지 않으면 오류 원문을 표준 오류에 남기고 exit 7로 끝납니다. 숫자 7은 실습용 예시이며 모든 도구의 공통 오류 코드를 뜻하지 않습니다.
순차 의존성의 중단
dependsOrder: "sequence"에서는 dependsOn 배열 순서대로 자식 Task를 기다립니다. VS Code Stable 1.133.0 소스는 자식 결과의 exitCode가 0이 아니면 반복을 중단하고 그 실패 코드를 부모 실행 결과로 반환합니다. 따라서 다음 자식과 부모의 자체 command는 실행되지 않습니다.
오류 보존과 독립 검증
Terminal의 실제 오류 원문은 복구 전에 복사해 두고, 결과 파일의 존재 여부로도 실행 범위를 교차 확인합니다. 정확한 Terminal 장식이나 보조 문구는 환경에 따라 달라질 수 있으므로 이 글은 VALIDATION_FAILED: ready.flag missing, 종료 코드 7, 후속 파일 부재를 완료 판단 근거로 사용합니다.
이번 실습의 상태 전환
첫 실행은 ready.flag가 없어서 실패하고, 복구 단계에서 정확히 그 파일만 만든 뒤 같은 Build를 다시 실행합니다. 복구 후에는 검증·패키징·부모 Build가 순서대로 끝나야 합니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 버전과 실행 환경 확인하기
목적 현재 Stable 버전과 실습 Shell을 첫 변경 전에 확인합니다.
- VS Code 통합 Terminal을 열고 아래 두 명령을 차례로 실행합니다.
입력 위치 VS Code 통합 Terminal · Shell: PowerShell · 실행 위치: 어느 폴더든 가능 · Artifact: 버전 출력
code --version
powershell.exe -NoProfile -Command "$PSVersionTable.PSEdition"
정상 결과 첫 명령의 첫 줄은1.133.0, 두 번째 명령은Desktop입니다.
확인 버전과 커밋 출력 원문을 보존합니다. 이 글의 연구 기준은 2026-08-17이며 이후 Stable은 별도 확인이 필요합니다.
실패 신호 명령을 찾지 못하거나 버전·Shell edition이 예상과 다릅니다.
2. 비어 있는 연습 폴더 만들기
목적 기존 프로젝트를 건드리지 않는 독립 Workspace를 준비합니다.
- 아래 명령을 한 번 실행합니다. 경로가 이미 있으면 중단되므로
<연습폴더명>을 충돌 없는 이름으로 치환합니다.
입력 위치 PowerShell Terminal · 실행 위치: 어느 폴더든 가능 · Placeholder: <연습폴더명>을 새 폴더 이름으로 치환 · Artifact: 새 Directory
$PracticeRoot = Join-Path ([Environment]::GetFolderPath('MyDocuments')) '<연습폴더명>'
if (Test-Path -LiteralPath $PracticeRoot) { throw "중단: 이미 존재함 - $PracticeRoot" }
New-Item -ItemType Directory -Path $PracticeRoot | Out-Null
code $PracticeRoot
정상 결과 새 VS Code 창 또는 현재 창에 비어 있는 연습 폴더가 열립니다.
확인 Explorer에서 경로가 Documents 아래이며 파일이 없는지 확인합니다.
실패 신호 중단: 이미 존재함, 권한 오류, 또는 실제 프로젝트가 열립니다.
3. 실패 검증과 순차 Build 작성하기
목적 검증 → 패키징 순서와 부모 Build 명령을 하나의 기본 Build Task로 연결합니다.
- Explorer에서
.vscode/tasks.json을 새로 만들고 아래 JSON 전체를 붙여 넣어 저장합니다.
입력 위치 연습 Workspace의 .vscode/tasks.json · Artifact: JSON Object · 설정 범위: 현재 Workspace Folder
{
"version": "2.0.0",
"tasks": [
{
"label": "Child: validate gate",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"$root='${workspaceFolder}'; $log=Join-Path $root 'build-log.txt'; $flag=Join-Path $root 'ready.flag'; if (-not (Test-Path -LiteralPath $flag)) { Set-Content -LiteralPath $log -Value 'VALIDATION_FAILED: ready.flag missing' -Encoding utf8; [Console]::Error.WriteLine('VALIDATION_FAILED: ready.flag missing'); exit 7 }; Set-Content -LiteralPath $log -Value 'VALIDATION_OK' -Encoding utf8; Write-Output 'VALIDATION_OK'; exit 0"
],
"presentation": {
"reveal": "always"
},
"problemMatcher": []
},
{
"label": "Child: package",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"$root='${workspaceFolder}'; Add-Content -LiteralPath (Join-Path $root 'build-log.txt') -Value 'PACKAGE_RAN' -Encoding utf8; Set-Content -LiteralPath (Join-Path $root 'package.txt') -Value 'PACKAGE_OK' -Encoding utf8; Write-Output 'PACKAGE_OK'"
],
"presentation": {
"reveal": "always"
},
"problemMatcher": []
},
{
"label": "Build: stop on failed child",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"$root='${workspaceFolder}'; Add-Content -LiteralPath (Join-Path $root 'build-log.txt') -Value 'PARENT_BUILD_RAN' -Encoding utf8; Set-Content -LiteralPath (Join-Path $root 'parent.txt') -Value 'BUILD_OK' -Encoding utf8; Write-Output 'BUILD_OK'"
],
"dependsOn": [
"Child: validate gate",
"Child: package"
],
"dependsOrder": "sequence",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}
정상 결과 JSON 오류 표시가 없고 세 Task label이 서로 다릅니다. 부모의 dependsOn은 두 자식 label과 정확히 일치합니다.
확인 Ctrl+Shift+P에서 Tasks: Run Task를 열어 세 label이 보이는지 확인한 뒤 Esc로 닫습니다.
실패 신호 빨간 물결표시, JSON 구문 오류, 또는 자식 label을 찾지 못한다는 메시지가 보입니다.
command가 모두 powershell.exe이고 쓰기 대상이 다섯 실습 파일뿐인지 확인하는 Human Gate를 통과하세요. 되돌리기: 아직 Task를 실행하지 않았다면 새로 만든 .vscode/tasks.json만 삭제하고 Step 2의 빈 폴더 상태로 돌아갑니다.4. 의도된 실패 실행하고 원문 보존하기
목적 첫 자식의 nonzero exit code가 후속 Task와 부모 명령을 막는지 관찰합니다.
- Ctrl+Shift+B를 한 번 누릅니다. 기본 Build이므로 별도 선택 없이 실행되거나, 선택지가 나오면
Build: stop on failed child를 선택합니다.
입력 위치 VS Code 편집기 · Command: Tasks: Run Build Task · Artifact: Task Terminal 출력과 실패 실행 상태
기대하는 핵심 오류 원문:
VALIDATION_FAILED: ready.flag missing
기대하는 프로세스 종료 코드:
7
정상 결과 검증 자식이 종료 코드 7로 실패하고, 패키징 자식과 부모 Build 명령은 실행되지 않습니다. 부모 Build 실행 결과도 성공이 아닌 상태로 끝납니다.
확인 복구하기 전에 Terminal의 오류 줄과 종료 코드가 보이는 부분을 그대로 복사해 메모합니다. 주변의 현지화 문구·아이콘은 다를 수 있으므로 추측해 고쳐 쓰지 않습니다.
실패 신호 PACKAGE_OK 또는 BUILD_OK가 출력되거나 종료 코드가 0입니다.
exit 7을 exit 0으로 바꾸지 마세요. 되돌리기: 실행을 더 반복하지 말고 Terminal 원문을 보존한 뒤 Step 5에서 파일 상태를 확인합니다.5. 후속 단계가 멈췄는지 독립 확인하기
목적 입력 화면이나 Terminal만 믿지 않고 디스크 결과로 중단 범위를 확인합니다.
- 연습 Workspace의 통합 Terminal에서 아래 명령을 실행합니다.
입력 위치 VS Code 통합 Terminal · Shell: PowerShell · 실행 위치: 연습 Workspace 루트 · Artifact: 파일 상태 표
Get-Content -LiteralPath .\build-log.txt
[pscustomobject]@{
ReadyFlag = Test-Path -LiteralPath .\ready.flag
Package = Test-Path -LiteralPath .\package.txt
Parent = Test-Path -LiteralPath .\parent.txt
}
정상 결과 로그는VALIDATION_FAILED: ready.flag missing한 줄이고,ReadyFlag,Package,Parent가 모두False입니다.
확인 package.txt와 parent.txt가 없으므로 두 번째 자식과 부모 명령이 실행되지 않았음을 확인합니다.
실패 신호 로그에 PACKAGE_RAN 또는 PARENT_BUILD_RAN이 있거나 결과 파일 중 하나가 존재합니다.
UNKNOWN으로 두고 파일을 삭제해 증거를 지우지 않습니다. 되돌리기: 추가 실행을 중단하고 tasks.json, Terminal 원문, 다섯 파일의 존재 상태를 보존한 뒤 Step 3의 label과 순서를 다시 비교합니다.6. 누락 조건을 복구하고 같은 Build 다시 실행하기
목적 오류 원인인 ready.flag만 만들고 같은 순차 Build가 끝까지 진행되는지 확인합니다.
- 오류 원문을 보존했는지 확인한 뒤 아래 명령으로
ready.flag를 만들고, 다시 Ctrl+Shift+B를 누릅니다.
입력 위치 VS Code 통합 Terminal과 편집기 · Shell: PowerShell · 실행 위치: 연습 Workspace 루트 · Artifact: ready.flag
if (Test-Path -LiteralPath .\ready.flag) { throw '중단: ready.flag가 이미 존재합니다.' }
Set-Content -LiteralPath .\ready.flag -Value 'READY' -Encoding utf8
정상 결과 Terminal에VALIDATION_OK,PACKAGE_OK,BUILD_OK가 순서대로 표시되고 Build가 성공 상태로 끝납니다.
확인 이번에는 첫 자식이 0으로 끝났기 때문에 다음 자식과 부모 명령까지 이어졌는지 Step 7에서 파일로 다시 확인합니다.
실패 신호 ready.flag가 이미 있었거나, 다시 종료 코드 7이 나오거나, 세 성공 문구 중 하나가 없습니다.
ready.flag를 덮어쓰지 않습니다. 되돌리기: 재실행 전이라면 방금 만든 파일의 경로와 내용이 정확한지 확인한 뒤 그 ready.flag만 삭제하여 실패 상태로 돌아갈 수 있습니다.7. 복구 완료 조건 확인하기
목적 세 단계의 실행 순서와 최종 산출물을 독립적으로 확인합니다.
- 통합 Terminal에서 아래 명령을 실행하고 모든 값이 기대와 일치하는지 확인합니다.
입력 위치 VS Code 통합 Terminal · Shell: PowerShell · 실행 위치: 연습 Workspace 루트 · Artifact: 최종 검증 출력
Get-Content -LiteralPath .\build-log.txt
Get-Content -LiteralPath .\package.txt
Get-Content -LiteralPath .\parent.txt
정상 결과 로그는VALIDATION_OK,PACKAGE_RAN,PARENT_BUILD_RAN순서이고, 나머지 두 파일은 각각PACKAGE_OK,BUILD_OK입니다.
확인 오류 원문 보존 메모, 실패 시 후속 파일 부재, 복구 후 세 단계 순서와 두 결과 파일을 한 번에 대조합니다.
실패 신호 파일이 없거나, 로그 순서가 다르거나, 내용이 기대 문자열과 다릅니다.
$PracticeRoot가 Documents 아래의 실습 폴더인지 눈으로 확인하고 VS Code에서 그 폴더를 닫는 Human Gate가 필요합니다. 되돌리기: 결과를 보존하려면 삭제하지 않습니다. 정리가 필요하면 정확한 실습 폴더만 휴지통으로 이동하고 실제 프로젝트나 상위 Documents 폴더는 선택하지 않습니다.4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
- 실패 실행의 Terminal 원문을 확인합니다. —
VALIDATION_FAILED: ready.flag missing와 종료 코드 7이 보존되어 있습니다. - 실패 직후 파일 상태를 확인합니다. —
package.txt와parent.txt가 모두 없습니다. - 복구 후
build-log.txt를 확인합니다. —VALIDATION_OK → PACKAGE_RAN → PARENT_BUILD_RAN순서입니다. - 복구 후 결과 파일을 확인합니다. —
package.txt는PACKAGE_OK,parent.txt는BUILD_OK입니다. tasks.json을 확인합니다. —dependsOrder는 String"sequence",dependsOn은 두 label의 Array,group.isDefault는 Booleantrue입니다.
완료 기준 같은 기본 Build가 누락 조건에서는 첫 자식의 종료 코드 7을 부모 실패 결과로 전달해 다음 자식과 부모 명령을 멈추고, ready.flag 복구 후에는 검증·패키징·부모 Build를 순서대로 완료합니다.
5. 문제가 생겼다면
tasks.json에 JSON 오류가 표시됩니다
먼저 확인 스마트 따옴표가 섞이지 않았는지, 쉼표·대괄호·중괄호가 빠지지 않았는지, 세 label이 중복되지 않았는지 확인합니다.
복구 Task를 실행하지 말고 이 글의 JSON 전체와 다시 비교합니다. 원문을 임의로 축약하지 않습니다.
재합류 JSON 오류가 0개가 된 뒤 VSC-STEP-003의 label 확인부터 다시 시작합니다.
첫 실행인데 성공해 버립니다
먼저 확인 ready.flag가 이미 있는지, 다른 Workspace를 열었는지, 검증 Task의 exit 7이 바뀌지 않았는지 확인합니다.
복구 필요한 파일을 지우기 전에 경로와 내용을 보존합니다. 원인이 실습 재사용이라면 기존 폴더를 덮어쓰지 말고 새 연습 폴더에서 다시 시작합니다.
재합류 새 폴더로 VSC-STEP-002에 재합류합니다.
실패했는데 package.txt 또는 parent.txt가 있습니다
먼저 확인 파일 수정 시각, dependsOrder: "sequence", dependsOn 배열 순서, 실제 실행한 Build label을 확인합니다.
복구 원인을 UNKNOWN으로 두고 증거 파일을 삭제하지 않습니다. Terminal 원문과 tasks.json을 함께 보존한 뒤 새 폴더에서 최소 예제를 다시 실행합니다.
재합류 실패 직후 세 파일 상태가 기대와 일치할 때 VSC-STEP-005로 재합류합니다.
ready.flag를 만든 뒤에도 종료 코드 7입니다
먼저 확인 Terminal의 현재 위치, Explorer의 Workspace 루트, 파일명이 ready.flag인지 확인합니다. 숨은 확장자로 ready.flag.txt가 되지 않았는지도 봅니다.
복구 잘못된 위치의 파일은 즉시 지우지 말고 경로를 기록합니다. 올바른 Workspace 루트에 정확한 이름으로 새 파일을 만든 뒤 다시 실행합니다.
재합류 Test-Path -LiteralPath .\ready.flag가 True인 상태에서 VSC-STEP-006으로 재합류합니다.
오류 원문이나 종료 코드를 확인하지 못했습니다
먼저 확인 Terminal 목록에서 Child: validate gate 실행 Terminal을 선택하고 스크롤 기록을 확인합니다.
복구 원문을 확인하지 못하면 숫자나 UI 문구를 추측하지 않습니다. 실습 폴더 상태를 보존하고 새 빈 폴더에서 한 번만 재현합니다.
재합류 오류 원문과 후속 파일 부재를 모두 확인한 뒤 VSC-STEP-005로 재합류합니다.
6. 핵심 정리와 공식 자료
- FACT VS Code Stable 1.133.0의 Task 실행 소스는 순차 의존성의 결과 코드가 0이 아니면 다음 의존성 실행을 중단합니다.
- FACT 자식의 nonzero exit code는 부모 Task 결과로 전달되므로 부모의 자체 명령도 실행되지 않습니다.
- PROCEDURE 오류 원문과 종료 코드를 먼저 보존하고, 후속 파일 부재로 중단 범위를 독립 확인합니다.
- EXAMPLE
ready.flag부재와 종료 코드 7은 안전하게 실패·복구 흐름을 관찰하기 위한 로컬 예시입니다. - RECOMMENDATION 실제 Build에서도 검증 → 패키징 → 배포처럼 앞 단계 성공이 필요한 흐름은
sequence로 연결하고 각 명령이 실패 시 nonzero로 끝나는지 확인합니다. - UNCONFIRMED Terminal의 현지화된 보조 문구·아이콘은 설치 언어와 UI 상태에 따라 달라질 수 있어 완료 조건으로 고정하지 않았습니다.
공식 자료
아래 자료는 2026-08-17 Asia/Seoul에 접근했습니다. Stable API와 고정 커밋 소스는 Windows x64 User Stable 1.133.0 기준이며, main 문서와 이후 Release는 접근 시점 뒤 바뀔 수 있습니다.
- VS Code Stable Update API · Microsoft
- Visual Studio Code 1.133 Release Notes source · Microsoft
- Integrate with External Tools via Tasks — Compound tasks · Microsoft
- Tasks Schema Appendix · Microsoft
- VS Code Stable 1.133.0 Task dependency execution source · Microsoft
- VS Code Stable 1.133.0 tasks JSON Schema source · Microsoft
presentation.close를 사용해 성공한 실행은 정리하고 실패한 실행은 오류 확인을 위해 남기는 차이를 검증합니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 20부: VS Code 내부용 자식 Task를 실행 목록에서 숨기기 (0) | 2026.08.19 |
|---|---|
| 커맨드 팔레트 19부: VS Code 성공한 Task Terminal만 자동으로 닫기 (0) | 2026.08.18 |
| 커맨드 팔레트 17부: VS Code 여러 Task를 하나의 Build로 묶기 (0) | 2026.08.16 |
| 커맨드 팔레트 16부: VS Code 기본 Build Task를 한 번에 실행하기 (0) | 2026.08.15 |
| 커맨드 팔레트 15부: VS Code Task Shell을 Windows PowerShell로 고정하기 (0) | 2026.08.14 |