개발/Visual Studio Code

커맨드 팔레트 20부: VS Code 내부용 자식 Task를 실행 목록에서 숨기기

반응형
VS CODE 초보자 시리즈 · 커맨드 팔레트 20부

내부용 자식 Task를 실행 목록에서 숨기기

hide: true와 dependsOn을 함께 사용해 사용자는 부모 Task 하나만 고르고, 내부 준비 Task는 의존성으로 실행되게 정리합니다.

Tasks: Run Task 목록에는 공개 부모 Task만 보이지만, 부모를 실행하면 숨긴 자식 Task가 먼저 실행되어 결과 파일 두 개가 만들어지는 것을 확인합니다.

복합 Task를 만들면 보조 Task까지 실행 목록에 늘어날 수 있습니다. hide는 목록을 정리하는 표시 제어이며, 실행 권한이나 보안 경계가 아닙니다.

1. 시작하기 전에

난이도: 초급. JSON 파일 하나에 부모·자식 Task 두 개를 작성합니다. Task가 현재 Workspace에 텍스트 파일을 만들므로 빈 실습 폴더에서만 진행합니다.

준비할 것

  • 직접 만든 빈 실습 폴더 — File > Open Folder...로 열고 Explorer 최상단의 경로를 확인합니다.
  • Windows 11과 VS Code Stable — 2026-08-19 최신 배포는 1.134.0이며, 로컬 검증 설치본은 1.133.0입니다. PowerShell에서 code --version으로 자신의 버전을 확인합니다.
  • Windows PowerShell — Integrated Terminal에서 powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion.ToString()"이 종료 코드 0으로 끝나는지 확인합니다.
  • 기존 .vscode/tasks.json 보호 — 이미 있으면 덮어쓰지 말고 새 빈 폴더를 사용하거나 먼저 복사본을 만듭니다.

적용 환경 2026-08-19 확인 · Windows 11 · VS Code Stable 1.134.0 공식 소스 · 로컬 실행 검증 1.133.0 · Windows PowerShell 5.1 계열

안전하게 시작하기 예제는 internal-stage.txt와 public-result.txt를 현재 Workspace에 새로 씁니다. 빈 폴더이고 두 파일이 없는지 확인한 뒤에만 실행하는 Human Gate입니다. 중단 조건: Workspace 출처를 모르거나, 같은 이름의 파일이 이미 있거나, Task 명령을 이해하지 못하면 실행하지 않습니다.

2. 알아둘 핵심 개념

hide

FACT. Task 객체에 넣는 Boolean 속성입니다. true로 지정한 Task는 Tasks: Run Task Quick Pick에서 숨겨집니다. 문자열 "true"가 아니라 JSON Boolean true를 사용합니다.

dependsOn

FACT. 부모 Task가 먼저 실행해야 할 다른 Task의 label을 문자열 또는 배열로 참조합니다. 숨긴 Task도 의존성으로 참조할 수 있습니다. 이 예제는 dependsOrder: "sequence"로 자식을 끝낸 뒤 부모 명령을 실행합니다.

숨김은 보안 기능이 아닙니다

RECOMMENDATION. hide: true는 Run Task 목록만 정리합니다. 자식 Task 정의와 명령은 tasks.json에 그대로 보이고 부모 의존성 등 다른 경로에서 실행될 수 있으므로 비밀값 저장, 권한 차단, 위험 명령 보호에 사용하면 안 됩니다.

관찰 가능한 완료 상태

EXAMPLE. 목록에서는 Demo: run public build만 보이고, 이를 한 번 실행한 뒤 internal-stage.txt가 INTERNAL_STAGE_OK, public-result.txt가 PUBLIC_BUILD_OK: INTERNAL_STAGE_OK를 담으면 완료입니다.

3. 순서대로 진행하기

각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다. <실습폴더>는 직접 만든 빈 폴더의 실제 경로로 바꿉니다.

1. 빈 실습 폴더를 Workspace로 열기

목적 예제가 만드는 파일을 기존 프로젝트와 분리합니다.

  1. File > Open Folder...에서 직접 만든 <실습폴더>를 엽니다. Workspace Trust 안내가 나오면 본인이 만든 빈 폴더인지 확인한 뒤에만 신뢰합니다.

입력 위치 VS Code File 메뉴와 폴더 선택 창

<실습폴더>
└─ 아직 파일 없음
정상 결과 Explorer 최상단에 실습 폴더 하나가 표시됩니다.

확인 Terminal > New Terminal에서 Get-Location을 실행해 마지막 경로가 <실습폴더>인지 확인합니다.

실패 신호 단일 파일만 열렸거나 Terminal 경로가 다른 프로젝트입니다.

주의 출처를 모르는 폴더는 신뢰하지 않습니다. 되돌리기: File > Close Folder로 닫고 새 빈 폴더를 열어 S01에 재합류합니다.

2. 덮어쓸 파일이 없는지 확인하기

목적 기존 Task 설정과 결과 파일을 보호합니다.

  1. Integrated Terminal에서 아래 읽기 전용 명령을 실행합니다.

입력 위치 Integrated Terminal · Shell: PowerShell · 실행 위치: <실습폴더>

@(
  '.\.vscode\tasks.json',
  '.\internal-stage.txt',
  '.\public-result.txt'
) | ForEach-Object { "$_=$((Test-Path -LiteralPath $_))" }
정상 결과 세 경로가 모두 False입니다.

확인 출력 세 줄을 원문 그대로 비교합니다.

실패 신호 하나라도 True이거나 접근 오류가 납니다.

주의 기존 파일을 삭제하거나 덮어쓰지 않습니다. 되돌리기: 새 빈 실습 폴더를 만들어 S01부터 다시 시작합니다.

3. 숨긴 자식과 공개 부모 Task 작성하기

목적 내부 준비 단계는 목록에서 숨기고 부모만 사용자가 선택하게 합니다.

  1. Explorer에서 .vscode 폴더와 그 안의 tasks.json을 새로 만들고 아래 전체 내용을 저장합니다.

입력 위치 <실습폴더>\.vscode\tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Internal: prepare build input",
      "type": "process",
      "command": "powershell.exe",
      "args": [
        "-NoLogo",
        "-NoProfile",
        "-Command",
        "Set-Content -LiteralPath 'internal-stage.txt' -Value 'INTERNAL_STAGE_OK' -NoNewline; Write-Output 'INTERNAL_STAGE_OK'"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": [],
      "hide": true
    },
    {
      "label": "Demo: run public build",
      "type": "process",
      "command": "powershell.exe",
      "args": [
        "-NoLogo",
        "-NoProfile",
        "-Command",
        "$stage = Get-Content -Raw -LiteralPath 'internal-stage.txt'; $result = 'PUBLIC_BUILD_OK: ' + $stage.Trim(); Set-Content -LiteralPath 'public-result.txt' -Value $result -NoNewline; Write-Output $result"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": [],
      "dependsOrder": "sequence",
      "dependsOn": [
        "Internal: prepare build input"
      ]
    }
  ]
}
정상 결과 VS Code가 JSON 오류 표시 없이 저장합니다.

확인 첫 Task의 hide가 Boolean true이고, 둘째 Task의 dependsOn 문자열이 첫 Task label과 글자까지 같은지 확인합니다.

실패 신호 빨간 물결선, Incorrect type, 쉼표 오류, 또는 저장되지 않음 표시가 남습니다.

주의 두 명령이 현재 폴더의 실습 파일 두 개만 쓰는지 읽고 승인하는 Human Gate입니다. 되돌리기: 새로 만든 실습 파일만 닫고 S03 원문과 비교한 뒤 재합류합니다.

4. 설정 자료형과 참조를 실행 전에 검증하기

목적 숨김 값, 부모·자식 연결, 결과 파일 부재를 독립적으로 확인합니다.

  1. 새 PowerShell Terminal에서 아래 읽기 전용 검증을 실행합니다.

입력 위치 Integrated Terminal · Shell: PowerShell · 실행 위치: <실습폴더>

$config = Get-Content -Raw -LiteralPath '.\.vscode\tasks.json' | ConvertFrom-Json
$child = $config.tasks | Where-Object label -eq 'Internal: prepare build input'
$parent = $config.tasks | Where-Object label -eq 'Demo: run public build'
[pscustomobject]@{
  Hide = $child.hide
  HideType = $child.hide.GetType().Name
  ParentReferencesChild = $parent.dependsOn -contains $child.label
  OutputFilesAbsent = -not (Test-Path '.\internal-stage.txt') -and -not (Test-Path '.\public-result.txt')
}
정상 결과 Hide=True, HideType=Boolean, ParentReferencesChild=True, OutputFilesAbsent=True입니다.

확인 네 값이 모두 정확한지 확인합니다.

실패 신호 JSON 파싱 오류, String, 참조 False, 또는 결과 파일이 이미 존재합니다.

주의 기존 결과 파일이 있으면 삭제하지 않습니다. 되돌리기: S03과 비교해 JSON만 고치거나 새 빈 폴더로 돌아가 S01부터 재합류합니다.

5. Run Task 목록에서 숨김 확인하기

목적 사용자가 고를 진입점이 부모 Task 하나로 정리됐는지 관찰합니다.

  1. Ctrl+Shift+P를 누르고 Tasks: Run Task를 실행합니다. 목록에 Demo: run public build가 있고 Internal: prepare build input은 없는지 확인합니다. 아직 선택하지 않습니다.

입력 위치 Command Palette와 Run Task Quick Pick

보임: Demo: run public build
숨김: Internal: prepare build input
정상 결과 공개 부모 Task만 선택 목록에 보입니다.

확인 검색란에 Internal을 입력해도 숨긴 Task가 나타나지 않는지 확인하고 Esc로 닫습니다.

실패 신호 자식 Task가 보이거나 부모 Task도 보이지 않습니다.

주의 목록 숨김은 접근 통제가 아닙니다. 되돌리기: hide의 위치와 Boolean 자료형을 S04에서 다시 확인한 뒤 S05로 재합류합니다.

6. 공개 부모 Task 실행하기

목적 목록에 없는 자식 Task도 부모 의존성으로 먼저 실행되는지 확인합니다.

  1. S04 값과 명령을 다시 확인하는 Human Gate를 통과한 뒤 Tasks: Run Task에서 Demo: run public build를 선택합니다.

입력 위치 Command Palette와 Task 선택 목록

INTERNAL_STAGE_OK
PUBLIC_BUILD_OK: INTERNAL_STAGE_OK
정상 결과 자식 출력 다음에 부모 출력이 나타나고 두 Task가 종료 코드 0으로 끝납니다.

확인 Terminal에서 두 문구의 순서를 확인합니다. Terminal 표시 방식에 따라 탭이 나뉠 수 있으므로 각 Task의 출력을 함께 확인합니다.

실패 신호 internal-stage.txt 없음 오류, 부모만 실행됨, 순서 역전, 또는 0이 아닌 종료 코드입니다.

주의 오류 원문과 종료 코드를 먼저 보존하고 원인을 단정하지 않습니다. 되돌리기: 실행 중이면 Tasks: Terminate Task로 멈추고 S04의 참조를 확인한 뒤 S06으로 재합류합니다.

7. 두 결과 파일로 실행을 교차 검증하기

목적 UI 목록과 독립된 파일 상태로 자식·부모 실행을 증명합니다.

  1. 일반 PowerShell Terminal에서 아래 읽기 전용 명령을 실행합니다.

입력 위치 Integrated Terminal · Shell: PowerShell · 실행 위치: <실습폴더>

[pscustomobject]@{
  Internal = Get-Content -Raw -LiteralPath '.\internal-stage.txt'
  Public = Get-Content -Raw -LiteralPath '.\public-result.txt'
}
정상 결과 Internal은 INTERNAL_STAGE_OK, Public은 PUBLIC_BUILD_OK: INTERNAL_STAGE_OK입니다.

확인 두 값과 S05의 목록 상태를 함께 확인합니다.

실패 신호 파일이 없거나 내용이 다르거나, 숨긴 Task가 Run Task 목록에 보입니다.

주의 원인을 확인하지 못하면 tasks.json, Terminal 원문, 두 파일을 보존합니다. 되돌리기: S03 명령을 임의로 바꾸지 말고 S04부터 재검증해 S07에 재합류합니다.

8. 완료 조건 확인하고 선택적으로 정리하기

목적 숨김의 범위와 실습 결과를 최종 확인하고 원상 복구 경로를 남깁니다.

  1. 완료 조건을 확인합니다. 실습을 끝낼 때만 아래 두 결과 파일이 이 실습에서 만들어진 것이 맞는지 Human Gate로 확인한 뒤 삭제합니다.

입력 위치 일반 PowerShell Terminal · 실행 위치: <실습폴더>

Remove-Item -LiteralPath '.\internal-stage.txt', '.\public-result.txt'
정상 결과 완료 시점에는 부모만 목록에 보이고 두 결과가 정확합니다. 선택 정리 뒤에는 두 결과 파일만 사라집니다.

확인 Test-Path로 정리 대상만 False가 되었는지 확인합니다. tasks.json은 학습 기록으로 남겨도 됩니다.

실패 신호 삭제 대상의 출처를 확신할 수 없거나 다른 파일까지 선택했습니다.

주의 삭제는 선택 사항이며 복구가 어려울 수 있습니다. 되돌리기: 삭제 전이라면 중단하고, 삭제 후 다시 필요하면 S06을 실행해 두 파일을 재생성한 뒤 완료 조건을 다시 확인합니다.

4. 완료 확인하기

Quick Pick 관찰, JSON 자료형, 파일 내용을 서로 독립적으로 확인합니다.

  • 목록 가시성 — Demo: run public build는 보이고 Internal: prepare build input은 보이지 않습니다.
  • 설정 무결성 — 자식 hide는 값 True, 자료형 Boolean이며 부모가 정확한 자식 label을 참조합니다.
  • 의존성 실행 — 부모를 한 번 선택하면 자식 출력 뒤 부모 출력이 나오고 둘 다 종료 코드 0입니다.
  • 파일 상태 — internal-stage.txt와 public-result.txt가 각각 약속된 정확한 값을 담습니다.
  • 보안 범위 — 숨긴 Task가 실행 불가능하거나 보호되었다고 해석하지 않습니다.
완료 기준 Run Task 목록에는 부모만 보이면서 부모 실행으로 숨긴 자식과 부모가 순서대로 완료되고 두 결과 파일의 정확한 값까지 확인하면 완료입니다.

5. 문제가 생겼다면

Tasks: Run Task가 보이지 않습니다

먼저 확인 단일 파일이 아니라 폴더를 열었는지, 경로가 .vscode/tasks.json인지 확인합니다.

복구 File > Open Folder...로 실습 폴더를 다시 열고 JSON 오류를 보존해 확인합니다.

재합류 S01

숨긴 자식 Task가 목록에 보입니다

먼저 확인 hide가 자식 Task 객체의 최상위에 있고 Boolean true인지 확인합니다.

복구 문자열 "true"를 사용했다면 Boolean으로 고치고 파일을 저장한 뒤 Quick Pick을 다시 엽니다.

재합류 S04

부모 Task도 목록에 없습니다

먼저 확인 부모 객체에 실수로 hide: true를 넣지 않았는지, JSON이 저장됐는지 확인합니다.

복구 부모에서 의도하지 않은 hide를 제거하고 S03 예제와 두 label을 비교합니다.

재합류 S05

부모 실행에서 internal-stage.txt 없음 오류가 납니다

먼저 확인 dependsOn 값과 자식 label이 대소문자·공백까지 같은지, dependsOrder가 sequence인지 확인합니다.

복구 오류 원문을 보존하고 S03의 정확한 label과 참조를 복원합니다.

재합류 S04

숨김을 실행 차단으로 사용하고 싶습니다

먼저 확인 목표가 단순한 목록 정리인지 실제 권한·보안 통제인지 구분합니다.

복구 위험 명령이나 비밀값을 Task에 넣지 말고 운영체제 권한, 별도 승인 절차, 안전한 자격 증명 저장소처럼 목적에 맞는 통제를 설계합니다. 이 글의 hide로 대체하지 않습니다.

재합류 S03

파일 내용이 예상과 다릅니다

먼저 확인 Terminal의 정확한 오류 원문, 종료 코드, 현재 경로와 두 파일의 수정 시각을 보존합니다.

복구 원인이 UNKNOWN이면 임의 수정 없이 중단합니다. 현재 폴더가 맞고 S03 명령이 정확한지 확인한 뒤 다시 실행합니다.

재합류 S06

핵심 판단 원인을 확인하지 못하면 오류 원문, 종료 코드, tasks.json, 두 결과 파일을 보존하고 임의 변경 없이 중단합니다.

6. 핵심 정리와 공식 자료

  • FACT: hide: true는 해당 Task를 Run Task Quick Pick에서 숨깁니다.
  • FACT: dependsOn은 숨긴 자식 Task도 label로 참조해 부모 실행 흐름에 포함할 수 있습니다.
  • PROCEDURE: 목록 상태, Boolean 자료형, 부모 실행, 결과 파일을 순서대로 교차 검증합니다.
  • EXAMPLE: 두 텍스트 파일과 출력 문구는 이 실습의 안전한 관찰값이며 실제 빌드 도구의 규칙이 아닙니다.
  • RECOMMENDATION: hide를 권한·보안 기능으로 취급하지 않습니다.
  • UNCONFIRMED: 확장 제공 Task, 원격·컨테이너·WSL 환경의 추가 UI는 이 로컬 Windows 실행에서 확인하지 않았습니다.

공식 자료

아래 자료는 2026-08-19 Asia/Seoul에 접근했습니다. Microsoft Stable API와 1.134 Release Notes는 최신 Stable 1.134.0, commit 110a328ea54b42367b803ec53ee0bf52ef26b419을 확인했습니다. 로컬 명령 실행은 업데이트 전 설치본 1.133.0에서 수행했으며, 원격·컨테이너·WSL과 확장 제공 Task는 범위 밖입니다.

다음 편 예고 커맨드 팔레트 21부 — 동시에 실행할 Task 수를 제한하기. runOptions.instanceLimit와 instancePolicy로 두 번째 실행 요청의 동작을 확인합니다.
반응형
이 글이 유용했다면 링크를 공유해 보세요.