여러 Task를 하나의 Build로 묶고 실행 순서 확인하기
dependsOn으로 자식 Task를 연결하고, dependsOrder의 병렬·순차 차이를 결과 파일로 확인한 뒤 순차 묶음을 기본 Build Task로 완성합니다.
이번 편의 핵심
Ctrl+Shift+B를 한 번 눌러 준비 Task와 확인 Task를 정해진 순서로 실행하고, sequence-order.txt에서 PREPARE → VERIFY_AFTER_PREPARE를 확인합니다.
빌드 전에 준비·검사·생성 명령을 매번 따로 실행하면 누락과 순서 오류가 생기기 쉽습니다. Compound Task는 여러 작은 Task의 관계를 한 곳에 기록해 한 번의 Build 실행으로 재현할 수 있게 합니다.
1. 시작하기 전에
난이도는 초급입니다. JSON 파일 하나를 만들고 Command Palette에서 Task를 선택할 수 있으면 됩니다. 다만 병렬 실행은 완료 순서를 보장하지 않는다는 점과, 순차 실행은 dependsOn 배열의 순서를 따른다는 점을 먼저 구분해야 합니다.
준비할 것
- VS Code Stable이 설치되어 있어야 합니다. — 확인: VS Code의 통합 Terminal에서
code --version을 실행해 첫 줄이 버전 번호인지 확인합니다. - 새 연습 폴더를 Folder 또는 Workspace로 열어야 합니다. — 확인: Explorer 맨 위에 폴더 이름이 보이고 단일 파일만 연 상태가 아닌지 확인합니다.
- Windows PowerShell 5.1의
powershell.exe를 사용할 수 있어야 합니다. — 확인: 통합 Terminal에서powershell.exe -NoProfile -Command "$PSVersionTable.PSEdition"을 실행해Desktop을 확인합니다. - 기존
.vscode/tasks.json이 없어야 합니다. — 확인: Explorer의.vscode폴더를 확인하고, 파일이 있으면 이번 실습을 중단한 뒤 다른 새 폴더를 사용합니다.
적용 환경 한국어 초보자 · Windows 11 · VS Code Stable 1.133.0 · Windows PowerShell 5.1
.vscode/tasks.json, parallel-order.txt, sequence-order.txt만 만들거나 다시 씁니다. 실제 프로젝트, 빌드 산출물, 배포 스크립트에는 붙여 넣지 마세요. 기존 파일이 하나라도 있으면 보호 대상이므로 새 폴더를 사용하고, 실행 전에는 저장되지 않은 편집 내용을 저장합니다. 중단 조건: 연습 폴더가 아닌 경로가 열렸거나 동일 이름 파일에 필요한 내용이 있거나, Task가 외부 전송·설치·관리자 권한을 요구하면 실행하지 않습니다.2. 알아둘 핵심 개념
Compound Task와 dependsOn
Compound Task는 다른 Task를 자식으로 참조하는 묶음 Task입니다. dependsOn에는 자식 Task의 label 문자열 하나 또는 여러 개의 배열을 넣습니다. 배열의 각 이름은 같은 tasks.json에서 실제 Task label과 정확히 일치해야 합니다.
dependsOrder: "parallel"
여러 의존 Task는 기본적으로 병렬 실행됩니다. 현재 공식 스키마의 기본값도 parallel입니다. 병렬은 서로 독립적인 작업에 적합하지만, 목록에 먼저 적었다는 이유만으로 먼저 끝나지는 않습니다.
dependsOrder: "sequence"
sequence를 지정하면 자식 Task가 dependsOn 배열에 적힌 순서대로 실행됩니다. 앞 Task가 끝난 뒤 다음 Task가 시작되어야 하는 준비→검사 흐름에 사용합니다. Background 또는 Watch Task를 순차 의존성으로 쓸 때는 완료 시점을 판단하는 Background Problem Matcher가 필요합니다.
이번 실습의 관찰 방식
병렬 묶음에서는 느린 준비 Task와 즉시 기록하는 확인 Task를 함께 시작해 VERIFY_BEFORE_PREPARE가 먼저 기록되는 예를 봅니다. 순차 묶음에서는 준비 완료 뒤 확인 Task가 시작되어 PREPARE, VERIFY_AFTER_PREPARE가 차례로 기록됩니다. 병렬의 일반적인 완료 순서는 보장되지 않으며, 4초 지연은 차이를 관찰하기 위한 예제 장치입니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. VS Code 버전과 열린 폴더 확인하기
목적 Task를 지원하는 Folder Workspace와 검증 기준 버전을 첫 변경 전에 확인합니다.
- VS Code 통합 Terminal을 열고 아래 명령을 실행한 뒤, Explorer 맨 위에 연습 폴더 이름이 보이는지 확인합니다.
입력 위치 VS Code 통합 Terminal · Shell: PowerShell · 실행 위치: 어느 폴더든 가능
code --version
powershell.exe -NoProfile -Command "$PSVersionTable.PSEdition"
정상 결과 첫 명령의 첫 줄에1.133.0, 두 번째 명령에Desktop이 표시되고 Explorer에는 열린 폴더가 있습니다.
확인 출력 원문을 그대로 남겨 버전과 Shell edition을 확인합니다. 이후 버전에서는 기능이 유지될 수 있지만 이 글의 확인 기준 시점과 분리합니다.
실패 신호 code 또는 powershell.exe를 찾지 못하거나 Explorer에 폴더가 없습니다.
2. 비어 있는 연습 폴더 만들기
목적 기존 프로젝트 파일을 건드리지 않는 독립 Workspace를 준비합니다.
- 아래 명령을 한 번 실행합니다. Documents 안에
vscode-task-chain-lab이 이미 있으면 명령이 중단되므로 다른 이름을 정해<연습폴더명>을 치환합니다.
입력 위치 PowerShell Terminal · 실행 위치: 어느 폴더든 가능 · Placeholder: <연습폴더명>은 충돌 없는 새 폴더 이름으로 치환
$PracticeRoot = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'vscode-task-chain-lab'
if (Test-Path -LiteralPath $PracticeRoot) { throw "중단: 이미 존재함 - $PracticeRoot" }
New-Item -ItemType Directory -Path $PracticeRoot | Out-Null
code $PracticeRoot
정상 결과 새 VS Code 창 또는 현재 창에 빈 연습 폴더가 열립니다.
확인 Explorer에서 파일이 없는지, 경로가 Documents 아래의 새 연습 폴더인지 확인합니다.
실패 신호 중단: 이미 존재함, 권한 오류, 또는 실제 프로젝트가 열린 상태입니다.
3. 자식 Task와 두 묶음 Build Task 작성하기
목적 병렬 비교용 자식 2개와 순차 검증용 자식 2개를 각각 하나의 부모 Build Task로 연결합니다.
- Explorer에서
.vscode/tasks.json을 새로 만들고 아래 JSON 전체를 붙여 넣은 뒤 저장합니다.
입력 위치 연습 Workspace의 .vscode/tasks.json · Artifact: JSON Object · 설정 범위: 현재 Workspace Folder
{
"version": "2.0.0",
"tasks": [
{
"label": "Parallel child: delayed prepare",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"Start-Sleep -Seconds 4; Add-Content -LiteralPath (Join-Path '${workspaceFolder}' 'parallel-order.txt') -Value 'PREPARE' -Encoding utf8; Write-Output 'PREPARE'"
],
"problemMatcher": []
},
{
"label": "Parallel child: inspect immediately",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"Set-Content -LiteralPath (Join-Path '${workspaceFolder}' 'parallel-order.txt') -Value 'VERIFY_BEFORE_PREPARE' -Encoding utf8; Write-Output 'VERIFY_BEFORE_PREPARE'"
],
"problemMatcher": []
},
{
"label": "Build: parallel comparison",
"type": "process",
"command": "powershell.exe",
"args": ["-NoLogo", "-NoProfile", "-Command", "Write-Output 'PARALLEL_DONE'"],
"dependsOn": [
"Parallel child: delayed prepare",
"Parallel child: inspect immediately"
],
"dependsOrder": "parallel",
"group": "build",
"problemMatcher": []
},
{
"label": "Sequence child: prepare",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"Set-Content -LiteralPath (Join-Path '${workspaceFolder}' 'sequence-order.txt') -Value 'PREPARE' -Encoding utf8; Write-Output 'PREPARE'"
],
"problemMatcher": []
},
{
"label": "Sequence child: verify",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"$p = Join-Path '${workspaceFolder}' 'sequence-order.txt'; $first = Get-Content -LiteralPath $p -First 1; if ($first -ne 'PREPARE') { throw \"예상 밖 첫 줄: $first\" }; Add-Content -LiteralPath $p -Value 'VERIFY_AFTER_PREPARE' -Encoding utf8; Write-Output 'VERIFY_AFTER_PREPARE'"
],
"problemMatcher": []
},
{
"label": "Build: sequence verified",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"$p = Join-Path '${workspaceFolder}' 'sequence-order.txt'; $lines = @(Get-Content -LiteralPath $p); if (($lines.Count -eq 2) -and ($lines[0] -eq 'PREPARE') -and ($lines[1] -eq 'VERIFY_AFTER_PREPARE')) { Write-Output 'BUILD_SEQUENCE_OK' } else { throw \"예상 밖 순서: $($lines -join ' > ')\" }"
],
"dependsOn": [
"Sequence child: prepare",
"Sequence child: verify"
],
"dependsOrder": "sequence",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}
정상 결과 Problems에 JSON 구문 오류가 없고, dependsOn의 네 label이 실제 자식 Task label과 글자 단위로 일치합니다.
확인 dependsOrder 두 값의 자료형이 String이고 각각 parallel, sequence인지 확인합니다. 기본 Build의 group.isDefault는 Boolean true여야 합니다.
실패 신호 빨간 밑줄, JSON 끝 쉼표 오류, dependsOn label 불일치, 또는 기존 tasks.json 내용이 사라졌습니다.
tasks.json이 있으면 덮어쓰지 말고 중단합니다. 예제는 정확히 두 결과 파일을 다시 쓰며 외부 전송·설치·관리자 권한은 사용하지 않습니다. 되돌리기: 새 연습 폴더에서는 .vscode/tasks.json을 닫고 삭제하면 변경 전 빈 상태로 돌아갑니다. 실제 프로젝트였다면 저장하지 말고 닫아 원본을 보존합니다.4. 병렬 묶음 Task 실행하기
목적 여러 자식 Task가 목록 순서와 무관하게 함께 시작되는 병렬 동작을 관찰합니다.
- Command Palette를 열어
Tasks: Run Task를 실행하고Build: parallel comparison을 선택합니다. 종료될 때까지 약 4초 기다립니다.
입력 위치 VS Code Command Palette · Artifact: parallel-order.txt
Tasks: Run Task
→ Build: parallel comparison
정상 결과 자식 Task 두 개가 함께 시작되고 부모 Task가 마지막에 PARALLEL_DONE을 출력합니다.
확인 Running Tasks 알림 또는 Terminal 목록에서 두 자식 Task가 처리된 뒤 부모가 완료됐는지 확인합니다. 표시 문구의 한국어 번역은 버전에 따라 달라질 수 있습니다.
실패 신호 Task를 찾지 못함, 한 자식만 실행됨, 또는 빨간 종료 코드가 표시됩니다.
5. 병렬 결과 파일 확인하기
목적 Terminal 표시 순서가 아니라 파일 내용으로 병렬 완료 순서를 독립 검증합니다.
- Explorer에서
parallel-order.txt를 열거나 아래 명령으로 정확한 두 줄을 읽습니다.
입력 위치 연습 Workspace의 PowerShell Terminal · 실행 위치: 연습 폴더
Get-Content -LiteralPath .\parallel-order.txt
정상 결과 첫 줄은VERIFY_BEFORE_PREPARE, 둘째 줄은PREPARE입니다.
확인 두 줄의 순서를 그대로 비교합니다. 이 예제는 준비 Task에만 4초 지연을 넣어 관찰 결과를 만들었으며, 일반적인 병렬 Task의 완료 순서를 보장한다는 뜻은 아닙니다.
실패 신호 파일 없음, 한 줄만 존재, 두 줄이 반대 순서, 또는 오래된 추가 줄이 있습니다.
6. 순차 묶음을 기본 Build로 실행하기
목적 한 번의 Build 명령으로 준비→확인→부모 검증을 정해진 순서로 실행합니다.
- Ctrl+Shift+B를 누르거나 Command Palette에서
Tasks: Run Build Task를 실행합니다.
입력 위치 VS Code 전역 키보드 또는 Command Palette · Artifact: sequence-order.txt
Ctrl+Shift+B
# 또는 Command Palette → Tasks: Run Build Task
정상 결과 기본 Build인Build: sequence verified가 직접 실행되고,Sequence child: prepare다음Sequence child: verify가 실행된 뒤 부모가BUILD_SEQUENCE_OK를 출력합니다.
확인 Task 선택 창이 뜬다면 group.kind, isDefault: true의 위치와 자료형을 다시 확인합니다.
실패 신호 Build Task 선택 창이 매번 나타남, verify Task에서 예상 밖 첫 줄, 또는 부모에서 예상 밖 순서 오류가 보입니다.
dependsOn 배열을 prepare→verify 순서로 복구한 뒤 저장하여 이 단계로 돌아옵니다.7. 순차 완료 조건 교차 확인하기
목적 Task UI와 독립된 PowerShell 읽기로 최종 순서를 확인합니다.
- 연습 폴더의 통합 Terminal에서 아래 명령을 실행합니다.
입력 위치 PowerShell Terminal · 실행 위치: 연습 Workspace root · Artifact: sequence-order.txt
$Sequence = @(Get-Content -LiteralPath .\sequence-order.txt)
$Sequence
if (($Sequence.Count -ne 2) -or ($Sequence[0] -ne 'PREPARE') -or ($Sequence[1] -ne 'VERIFY_AFTER_PREPARE')) {
throw "완료 조건 불일치: $($Sequence -join ' > ')"
}
'INDEPENDENT_VERIFY_OK'
정상 결과PREPARE,VERIFY_AFTER_PREPARE,INDEPENDENT_VERIFY_OK가 차례로 표시됩니다.
확인 Terminal의 부모 출력 BUILD_SEQUENCE_OK와 독립 검증 INDEPENDENT_VERIFY_OK가 모두 있어야 완료입니다.
실패 신호 파일 없음, 줄 수가 2가 아님, 순서 불일치, 또는 예외 원문이 표시됩니다.
tasks.json label과 순서를 확인하고 6단계를 다시 실행한 뒤 이 단계로 재합류합니다. 실습 전체를 취소하려면 새 연습 폴더만 닫고 보존하거나, 경로를 확인한 후 수동으로 삭제합니다.4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
tasks.jsonJSON 구문을 다시 확인합니다. — Task 6개, 부모 Task 2개, 자식 label 참조 4개가 모두 유효합니다.parallel-order.txt를 읽습니다. — 지연 예제에서VERIFY_BEFORE_PREPARE가PREPARE보다 먼저 기록됩니다.sequence-order.txt를 PowerShell로 읽습니다. — 정확히PREPARE,VERIFY_AFTER_PREPARE두 줄입니다.- Task Terminal 원문을 확인합니다. — 부모 순차 Build에
BUILD_SEQUENCE_OK가 있고 실패 예외가 없습니다. - Ctrl+Shift+B를 다시 실행합니다. — 별도 선택 없이 같은 순차 부모 Build가 실행되고 같은 완료 조건을 재현합니다.
완료 기준dependsOn으로 참조한 준비·확인 Task가dependsOrder: "sequence"에 따라 순서대로 실행되고, 한 번의 기본 Build 실행과 독립 파일 검증이 모두PREPARE → VERIFY_AFTER_PREPARE를 확인합니다.
5. 문제가 생겼다면
dependsOn Task를 찾을 수 없다는 오류
먼저 확인 부모의 네 문자열을 자식 label과 글자·공백·콜론까지 비교합니다. 원인을 확인하지 못하면 UNKNOWN으로 기록합니다.
복구 자식 label을 기준으로 부모 문자열만 수정하고 JSON을 저장합니다.
재합류 VSC-STEP-004
순차 Task가 다음 단계로 넘어가지 않음
먼저 확인 사용자가 예제를 Background/Watch Task로 바꾸었는지, 앞 Task가 실제로 종료됐는지 확인합니다. 공식 문서는 순차 의존성의 Background Task에 완료 시점을 추적하는 Problem Matcher가 필요하다고 설명합니다.
복구 이 글의 비-background process Task로 되돌립니다. Background Task 적용은 완료 Matcher를 별도로 검증할 때만 진행합니다.
재합류 VSC-STEP-003
Ctrl+Shift+B에서 선택 창이 나타남
먼저 확인 Build: sequence verified의 group이 Object이고 kind가 String build, isDefault가 Boolean true인지 확인합니다.
복구 기본 Build는 하나만 유지하고 파일을 저장한 뒤 다시 실행합니다.
재합류 VSC-STEP-006
parallel-order.txt가 예상과 다름
먼저 확인 두 자식 Task가 모두 종료됐는지, delayed Task의 4초 지연과 inspect Task의 Set-Content가 그대로인지 확인합니다. 병렬의 일반 완료 순서는 보장되지 않습니다.
복구 실행 중인 Task를 모두 끝낸 뒤 예제 원문으로 복구하고 병렬 부모를 다시 실행합니다. 파일을 손으로 편집해 통과시키지 않습니다.
재합류 VSC-STEP-004
예상 밖 첫 줄 또는 예상 밖 순서
먼저 확인 순차 부모의 dependsOn 배열이 prepare 다음 verify인지, 두 자식이 동일한 sequence-order.txt 경로를 쓰는지 확인합니다.
복구 배열과 파일명을 원문으로 복구하고 순차 부모 전체를 다시 실행합니다. verify 자식만 단독 실행하지 않습니다.
재합류 VSC-STEP-006
6. 핵심 정리와 공식 자료
- FACT 여러
dependsOnTask는 기본적으로 병렬 실행되며, 현재 공식 스키마의dependsOrder기본값도parallel입니다. - FACT
dependsOrder: "sequence"는dependsOn배열의 순서대로 자식 Task를 실행합니다. - PROCEDURE 준비·확인 자식을 하나의 기본 Build에 묶고 Ctrl+Shift+B로 실행했습니다.
- EXAMPLE 4초 지연과 두 결과 파일은 병렬·순차 차이를 안전하게 관찰하기 위한 연습용이며 실제 빌드 도구가 아닙니다.
- RECOMMENDATION 서로 독립적인 작업만 병렬로 두고, 앞 결과가 다음 입력인 흐름은 순차로 명시한 뒤 결과 파일이나 테스트로 순서를 검증합니다.
- UNCONFIRMED Command Palette와 종료 알림의 정확한 한국어 번역은 표시 언어와 후속 버전에 따라 달라질 수 있어 고정하지 않았습니다.
공식 자료
아래 자료는 2026-08-16 Asia/Seoul에 확인했습니다. Stable API와 로컬 설치는 Windows x64 Stable 1.133.0에 적용되며, GitHub main 스키마는 확인 시점 이후 바뀔 수 있습니다.
- 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 tasks JSON Schema source · Microsoft
'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 19부: VS Code 성공한 Task Terminal만 자동으로 닫기 (0) | 2026.08.18 |
|---|---|
| 커맨드 팔레트 18부: VS Code 실패한 자식 Task에서 순차 Build 멈추기 (0) | 2026.08.17 |
| 커맨드 팔레트 16부: VS Code 기본 Build Task를 한 번에 실행하기 (0) | 2026.08.15 |
| 커맨드 팔레트 15부: VS Code Task Shell을 Windows PowerShell로 고정하기 (0) | 2026.08.14 |
| 커맨드 팔레트 14부: VS Code Task를 windows·osx·linux로 나눠 실행하기 (0) | 2026.08.13 |