개발/Visual Studio Code

커맨드 팔레트 6부: VS Code 폴더를 열 때 Task 자동 실행하기

반응형
커맨드 팔레트 6부 · 초보자

폴더를 열 때
Task 자동 실행하기

folderOpen Task를 안전한 연습 폴더에서 구성하고, 자동 실행의 허용·차단·Workspace Trust 경계를 직접 확인합니다.

이 글에서 할 일 내가 소유한 연습 Workspace에 확인용 Task를 만든 뒤, 폴더를 다시 열었을 때 자동 실행되는지 파일과 Terminal로 확인합니다. 이후 같은 Task를 차단하고 Restricted Mode에서 실행되지 않는 이유까지 구분합니다.

매번 프로젝트를 열자마자 개발 서버, 파일 감시기, 환경 점검 명령을 실행한다면 runOptions.runOn: "folderOpen"이 반복을 줄여 줍니다. 하지만 편리함만 보고 켜면 Workspace 안의 명령이 사용자의 확인보다 먼저 실행될 수 있습니다. 이번 실습은 실제 개발 명령 대신 작은 텍스트 파일 하나만 만드는 안전한 예제로 자동 실행의 조건을 분해합니다.

1. 시작하기 전에

기본 환경은 Windows 11, Windows x64 VS Code Stable 1.131.0, PowerShell입니다. UI 언어가 한국어라면 명령 이름이 번역되어 보일 수 있으므로 Command Palette에서는 Automatic Tasks도 함께 검색하세요. macOS·Linux에서는 설정 구조는 같지만 예제 PowerShell 명령을 그대로 실행할 수 없습니다.

필수 준비 상태

  • 직접 만든 빈 폴더 — 파일 탐색기에서 폴더 내부가 비어 있는지 확인합니다.
  • PowerShell 사용 가능 — VS Code Terminal의 프로필 이름 또는 프롬프트로 확인합니다.
  • 기존 출력 파일 없음 — task-started.txt가 보이면 덮어쓰지 말고 다른 빈 폴더를 사용합니다.
  • Workspace 출처 확인 — 다운로드·압축 해제·Git clone 폴더는 이번 실습에 사용하지 않습니다.
HIGH 위험 · Human Gate Task는 셸 명령과 프로그램을 실행합니다. .vscode/tasks.json뿐 아니라 그 안에서 호출하는 스크립트의 전체 내용을 이해하기 전에는 자동 실행을 허용하지 마세요. 삭제, 외부 다운로드, 권한 상승, 비밀정보 접근·전송, 이해하지 못한 실행 파일이 보이면 즉시 중단합니다.

보호 대상 기존 프로젝트 파일, 계정 정보, 환경 변수, 시스템 설정입니다. Rollback은 자동 Task 차단 → Workspace 신뢰 취소 → 이번 실습에서 새로 만든 파일만 제거하는 순서입니다.

2. 자동 Task가 실행되는 세 조건

runOptions.runOn

Task가 언제 시작되는지를 정합니다. 기본값 default는 사용자가 Run Task 명령으로 직접 실행할 때만 시작합니다. folderOpen은 해당 Task를 포함하는 폴더가 열릴 때 자동 실행 후보로 만듭니다.

task.allowAutomaticTasks

folderOpen 후보를 실제로 자동 실행하도록 허용할지 정합니다. 공식 문서 기준 기본값은 off입니다. 아직 현재 Workspace에서 선택하지 않았다면 VS Code가 한 번 허용 또는 차단을 묻습니다. Command Palette의 Tasks: Manage Automatic Tasks로 언제든 선택을 바꿀 수 있습니다.

Workspace Trust

Workspace가 신뢰 상태인지 확인하는 가장 바깥쪽 안전 경계입니다. Restricted Mode에서는 task.allowAutomaticTasks가 on이어도 자동 Task가 실행되지 않습니다. 수동으로 Task를 나열하거나 실행할 때도 신뢰 확인이 나타날 수 있습니다.

실행 판단식 folderOpen 지정 + 자동 Task 허용 + 신뢰한 Workspace가 모두 충족돼야 합니다. 셋 중 하나라도 충족되지 않으면 자동 실행되지 않는 것이 정상입니다.

3. 안전한 실습 절차

1. 빈 연습 폴더를 연다

목적 기존 파일과 실제 프로젝트를 자동 실행 위험에서 분리합니다.

  1. 파일 탐색기에서 내가 소유한 위치에 folder-open-task-demo 폴더를 만듭니다.
  2. VS Code에서 File > Open Folder...를 선택해 이 폴더를 엽니다.
  3. Explorer 최상위 이름이 정확한지 확인합니다.
정상 결과 Explorer에 빈 folder-open-task-demo 하나만 보입니다.

Failure Signal 다른 파일이나 프로젝트 폴더가 보임. Recovery 파일을 만들지 말고 File > Close Folder 후 올바른 빈 폴더를 엽니다.

2. 신뢰 여부를 결정한다

목적 자동 코드 실행을 허용하기 전에 출처를 확인합니다.

  1. Restricted Mode 배너나 Workspace Trust 화면을 확인합니다.
  2. 직접 만든 빈 폴더가 맞을 때만 신뢰합니다.
  3. 출처가 조금이라도 불분명하면 Restricted Mode를 유지하고 실습을 중단합니다.
정상 결과 Status Bar에 Restricted Mode 표시가 없고, 현재 폴더가 직접 만든 연습 폴더임을 설명할 수 있습니다.

Rollback Command Palette에서 Workspaces: Manage Workspace Trust를 열어 신뢰를 취소합니다.

3. .vscode/tasks.json을 만든다

목적 부작용이 작은 확인용 Task를 한 개 정의합니다.

  1. Explorer에서 .vscode 폴더를 만듭니다.
  2. 그 안에 tasks.json을 만듭니다.
  3. 아래 JSON을 붙여넣고 Ctrl+S로 저장합니다.
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "폴더 열림 확인 파일 만들기",
      "type": "shell",
      "command": "Set-Content -LiteralPath task-started.txt -Value 'folderOpen task ran'",
      "problemMatcher": [],
      "runOptions": {
        "runOn": "folderOpen"
      },
      "presentation": {
        "reveal": "always",
        "panel": "dedicated"
      }
    }
  ]
}

Artifact Workspace 설정 파일 .vscode/tasks.json. 효과 Workspace 루트의 task-started.txt에 고정 문자열을 씁니다.

덮어쓰기 중단 조건 task-started.txt가 이미 있으면 실행하지 마세요. 예제 출력 이름을 바꾸거나 새 빈 폴더에서 다시 시작합니다.
정상 결과 JSON 괄호나 쉼표에 오류 표시가 없고 파일이 저장됩니다.

Failure Signal 빨간 밑줄, JSON 오류, Task 목록에 label이 없음. Recovery 파일 경로가 정확히 .vscode/tasks.json인지, 따옴표와 쉼표가 같은지 비교합니다.

4. 먼저 수동 실행으로 Task 자체를 검증한다

목적 셸·명령 오류와 자동 실행 정책 오류를 분리합니다.

  1. Command Palette에서 Tasks: Run Task를 실행합니다.
  2. 폴더 열림 확인 파일 만들기를 선택합니다.
  3. Explorer에서 task-started.txt를 엽니다.
정상 결과 파일 내용이 정확히 folderOpen task ran이고 Terminal의 Task가 종료됩니다.

Failure Signal 명령을 찾지 못함, 권한 오류, 파일 미생성. Recovery Terminal의 오류 원문을 복사해 보존하고 PowerShell 프로필, Workspace 루트, 파일 충돌을 확인한 뒤 STEP-03으로 돌아갑니다.

5. 자동 실행을 허용한다

목적 현재 Workspace에 대해 folderOpen Task를 명시적으로 허용합니다.

  1. task-started.txt를 삭제하거나 manual-test.txt로 이름을 바꿉니다.
  2. Command Palette에서 Tasks: Manage Automatic Tasks를 실행합니다.
  3. Allow Automatic Tasks를 선택합니다.
정상 결과 선택이 저장되고 같은 Workspace에서 반복 질문이 나타나지 않습니다.

Failure Signal 명령이 보이지 않거나 Trust 확인이 나타남. Recovery Command Palette에서 Automatic Tasks를 검색하고 STEP-02의 신뢰 상태를 다시 확인합니다.

6. 폴더를 다시 열어 자동 실행을 확인한다

목적 수동 실행이 아닌 folderOpen 이벤트로 Task가 시작됐는지 관찰합니다.

  1. File > Close Folder를 선택합니다.
  2. File > Open Recent에서 같은 연습 폴더를 다시 엽니다.
  3. Terminal과 Explorer를 확인합니다.
정상 결과 Task Terminal이 표시되고 새 task-started.txt가 생성되며 내용이 일치합니다.

Failure Signal 수동 실행은 성공했지만 다시 열 때 파일이 없음. Recovery runOn 철자, Manage Automatic Tasks 선택, Workspace Trust를 이 순서로 검사하고 STEP-05부터 다시 진행합니다.

7. 자동 실행을 차단하고 대조한다

목적 허용과 차단이 실제 결과를 바꾸는지 확인합니다.

  1. Command Palette에서 Tasks: Manage Automatic Tasks를 엽니다.
  2. Disallow Automatic Tasks를 선택합니다.
  3. 확인 파일을 삭제하거나 이름을 바꾼 후 폴더를 닫았다가 다시 엽니다.
정상 결과 새 task-started.txt가 생성되지 않습니다.

Failure Signal 파일이 다시 생성됨. Recovery User·Workspace Settings에서 task.allowAutomaticTasks를 검색합니다. 조직 정책으로 강제된 값은 임의로 우회하지 말고 관리자에게 확인합니다.

8. Restricted Mode의 최종 차단을 확인한다

목적 자동 Task 허용보다 Workspace Trust가 우선함을 확인합니다.

  1. Workspaces: Manage Workspace Trust에서 연습 폴더의 신뢰를 취소합니다.
  2. Restricted Mode 표시를 확인합니다.
  3. 자동 Task를 허용했던 상태와 관계없이 폴더를 다시 엽니다.
정상 결과 자동 Task가 실행되지 않습니다. Task를 수동으로 나열하거나 실행하면 Trust 확인이 나타날 수 있습니다.

Recovery/Rejoin 실습을 계속하려면 폴더 내용과 Task를 다시 검토한 후에만 STEP-02에서 신뢰 여부를 새로 결정합니다.

4. 완료 상태 검증

설정 파일이 존재하는 것만으로는 완료가 아닙니다. 서로 다른 네 관찰 결과를 대조합니다.

  1. Task 정의 — runOptions.runOn 값이 folderOpen이다.
  2. 수동 기준선 — Run Task로 실행하면 확인 파일이 만들어진다.
  3. 정책 차이 — Allow에서는 재열기 후 생성되고 Disallow에서는 생성되지 않는다.
  4. 신뢰 경계 — Restricted Mode에서는 허용 설정과 무관하게 자동 실행되지 않는다.
완료 기준 “Task 자체 실패”, “자동 실행 차단”, “Workspace Trust 차단”을 관찰 결과로 구분할 수 있고, 자동 실행을 다시 Disallow 상태로 돌려놓았습니다.

정리 Rollback task-started.txt와 이번 실습에서 만든 .vscode/tasks.json만 제거합니다. 기존 .vscode 폴더가 실습 전에 존재했다면 폴더 전체를 삭제하지 않습니다.

5. 문제 해결

Task가 목록에 나타나지 않는다

먼저 확인 Explorer 경로가 .vscode/tasks.json인지, JSON 오류가 없는지 확인합니다. 복구 STEP-03 예제와 괄호·쉼표를 비교하고 저장합니다. 재합류 STEP-04.

수동 실행부터 실패한다

먼저 확인 Terminal의 전체 오류 문장, 기본 셸, 현재 Workspace 루트, 기존 출력 파일을 확인합니다. 복구 PowerShell이 아니면 이 예제를 그대로 사용하지 말고 PowerShell 프로필로 새 Terminal을 연 뒤 다시 실행합니다. 재합류 STEP-04.

수동 실행은 되지만 자동 실행되지 않는다

먼저 확인 folderOpen 철자 → Manage Automatic Tasks 선택 → Workspace Trust 순서로 확인합니다. 복구 원인을 한 번에 여러 개 바꾸지 말고 하나씩 수정합니다. 재합류 STEP-05.

허용 여부를 묻는 창을 놓쳤다

먼저 확인 Command Palette에서 Tasks: Manage Automatic Tasks를 검색합니다. 복구 Allow 또는 Disallow를 명시적으로 다시 선택합니다. 재합류 STEP-06 또는 STEP-07.

Restricted Mode에서 Task가 실행되지 않는다

정상 보호 동작입니다. 설정을 우회하지 마세요. 폴더 출처와 Task가 호출하는 모든 파일을 검토할 수 없다면 Restricted Mode를 유지합니다.

6. 핵심 정리와 공식 자료

  • folderOpen은 자동 실행 후보를 만들 뿐, 혼자서 실행을 보장하지 않습니다.
  • task.allowAutomaticTasks는 신뢰한 Workspace에서 허용·차단을 제어합니다.
  • Restricted Mode에서는 설정이 on이어도 자동 Task가 실행되지 않습니다.
  • 문제가 생기면 수동 실행 → 자동 정책 → Workspace Trust 순서로 원인을 분리합니다.
  • 실제 프로젝트에서는 Task가 호출하는 스크립트까지 검토한 뒤 허용합니다.

공식 자료

아래 자료는 2026년 8월 5일에 확인했습니다. 로컬 환경은 Windows x64 VS Code Stable 1.131.0이며 UI 언어와 이후 버전에 따라 메뉴 문구가 달라질 수 있습니다.

다음 편 예고

커맨드 팔레트 7부 — Task 입력값으로 재사용 가능한 명령 만들기: inputs, ${input:...}, promptString, pickString, 민감정보를 입력값에 저장하지 않는 방법을 다룹니다.

반응형
이 글이 유용했다면 링크를 공유해 보세요.