개발/Visual Studio Code

커맨드 팔레트 29부: VS Code Task의 Problem Matcher 질문을 유형별로 끄기

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

Task 시작 때 Problem Matcher 질문 다시 보지 않기

task.problemMatchers.neverPrompt를 Workspace 범위에서 설정해, process Task의 출력 검사 질문만 끄고 shell Task에는 질문이 남는지 안전하게 비교합니다.

process Task는 질문 없이 실행되고, 같은 Workspace의 shell Task는 여전히 Problem Matcher 선택 질문을 표시하면 완료입니다.

Problem Matcher를 지정하지 않은 Task를 실행할 때마다 출력 검사 방법을 묻는 화면이 반복되면, Task 전체가 아니라 필요한 유형에만 질문 억제를 적용할 수 있습니다.

1. 시작하기 전에

난이도는 기본입니다. JSON 파일 두 개를 수정하고 질문 표시 범위를 비교하지만, 실행 명령은 실습 폴더 안의 작은 텍스트 파일만 만듭니다.

준비할 것

  • Windows 11과 VS Code Stable 1.135.0 — Help: About 또는 PowerShell의 code --version으로 확인합니다.
  • PowerShell을 기본 Terminal로 사용할 수 있는 상태 — Terminal: Create New Terminal에서 $PSVersionTable.PSVersion이 표시되는지 확인합니다.
  • 신뢰할 수 있는 별도 실습 폴더 — 제목 표시줄의 폴더명과 Workspace Trust 상태를 확인합니다. 모르는 저장소나 Restricted Mode에서는 진행하지 않습니다.
  • 기존 .vscode/settings.json과 .vscode/tasks.json의 백업 — 파일이 있으면 첫 수정 전에 .jcos-bak 복사본을 만듭니다.

적용 환경 한국어 초보자 · Windows 11 · VS Code Stable 1.135.0 · PowerShell · 일반 사용자 권한 · 신뢰한 단일 폴더 Workspace

안전하게 시작하기 이 실습은 Workspace 설정과 Task 정의를 바꿉니다. 기존 JSON을 덮어쓰기 전에 백업하고, 회사 정책 파일·공유 저장소·실제 빌드 Task에서는 실행하지 마세요. Human Gate: 현재 파일이 실습 전용인지 직접 확인한 뒤에만 저장합니다. 중단 조건: JSON에 본인이 모르는 명령, 외부 전송, 관리자 권한, 삭제 명령이 있거나 백업을 만들 수 없으면 중단합니다. Rollback: 백업 파일을 원래 이름으로 복원하고 실습 폴더의 .jcos-task-lab만 삭제합니다.

2. 알아둘 핵심 개념

Problem Matcher 질문

Problem Matcher가 지정되지 않은 맞춤 Task를 실행하면 VS Code가 Task 출력에서 어떤 오류와 경고를 찾을지 묻는 Quick Pick을 표시할 수 있습니다. Continue without scanning the task output은 이번 한 번만 검사 없이 계속하고, Never scan the task output for this task는 해당 Task에 빈 problemMatcher를 기록합니다.

task.problemMatchers.neverPrompt

FACT — 이 설정의 기본값은 Boolean false입니다. Boolean true는 모든 Task 유형에서 질문을 끄고, Object는 { "process": true }처럼 Task 유형과 Boolean을 연결해 지정한 유형만 끕니다. 명시되지 않았거나 값이 false인 유형은 질문 대상에 남습니다.

설정 범위와 Task 유형

이 설정은 명시적 scope가 없는 VS Code Window 설정이므로 User 또는 Workspace Settings에서 구성할 수 있습니다. 이 글은 다른 프로젝트에 영향을 주지 않도록 .vscode/settings.json의 Workspace 범위를 사용합니다. process와 shell은 tasks.json의 type 값이며, Object의 Key는 이 Task 유형 문자열과 정확히 같아야 합니다.

질문 억제와 실제 출력 검사는 다릅니다

RECOMMENDATION — 질문을 끄는 것은 Problem Matcher를 자동으로 붙이는 동작이 아닙니다. 오류를 Problems 패널에 모아야 하는 실제 빌드에는 $tsc 같은 검증된 Matcher를 명시하세요. 단순 로그 Task처럼 출력 검사가 필요 없을 때만 질문 억제를 사용합니다.

3. 순서대로 진행하기

각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다. UI 질문 관찰은 자동화가 대신하지 않은 Human Gate입니다.

1. 실습 폴더와 백업을 준비하기

목적 기존 Workspace 설정과 Task를 보호하고, 변경 범위를 실습 폴더로 제한합니다.

  1. 빈 폴더 task-problem-matcher-lab을 VS Code에서 연 뒤, 기존 .vscode/settings.json과 .vscode/tasks.json이 있으면 Explorer에서 각각 .jcos-bak 복사본을 만듭니다.

입력 위치 VS Code Explorer · 열린 실습 폴더의 .vscode

task-problem-matcher-lab/
└─ .vscode/
   ├─ settings.json.jcos-bak   # 원본이 있을 때만
   └─ tasks.json.jcos-bak      # 원본이 있을 때만
정상 결과 제목 표시줄에 실습 폴더명이 보이고, 보호할 원본이 있었다면 같은 폴더에 백업 두 개가 존재합니다.

확인 Explorer에서 열린 루트와 백업 파일명을 다시 읽습니다.

실패 신호 실제 프로젝트가 열려 있거나, 백업 이름이 원본과 구분되지 않거나, Workspace가 Restricted Mode입니다.

주의 실제 프로젝트 파일을 실습용 JSON으로 덮어쓰면 기존 자동화가 사라질 수 있습니다. 되돌리기: 아직 수정하지 말고 올바른 빈 폴더를 다시 연 뒤 이 단계로 재합류합니다.

2. 비교용 process·shell Task 만들기

목적 Task 유형별 질문 범위를 같은 출력 형식으로 비교합니다.

  1. Tasks: Open Workspace Tasks를 실행해 .vscode/tasks.json을 열고, 아래 JSON을 저장합니다.

입력 위치 Command Palette → Tasks: Open Workspace Tasks · .vscode/tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "PM Prompt Lab - process",
      "type": "process",
      "command": "powershell.exe",
      "args": [
        "-NoProfile",
        "-Command",
        "$kind='process'; New-Item -ItemType Directory -Force -Path '.jcos-task-lab' | Out-Null; Set-Content -LiteralPath '.jcos-task-lab\\process.txt' -Value ('TASK_TYPE=' + $kind) -Encoding utf8; Write-Output ('PM_PROMPT_LAB_OK ' + $kind)"
      ],
      "presentation": { "reveal": "always", "panel": "dedicated", "clear": true }
    },
    {
      "label": "PM Prompt Lab - shell",
      "type": "shell",
      "command": "$kind='shell'; New-Item -ItemType Directory -Force -Path '.jcos-task-lab' | Out-Null; Set-Content -LiteralPath '.jcos-task-lab\\shell.txt' -Value ('TASK_TYPE=' + $kind) -Encoding utf8; Write-Output ('PM_PROMPT_LAB_OK ' + $kind)",
      "presentation": { "reveal": "always", "panel": "dedicated", "clear": true }
    }
  ]
}

Placeholder 이 예시는 치환 없이 빈 실습 폴더에서 실행할 수 있습니다. 다른 폴더명을 쓰려면 .jcos-task-lab 두 곳을 동일한 상대 경로로 바꾸고, Workspace 밖 절대 경로는 사용하지 마세요.

정상 결과 Problems에 JSON 오류가 없고, 두 Task 모두 problemMatcher 속성이 없는 상태입니다.

확인 파일 저장 후 Tasks: Run Task 목록에서 두 Label이 보이는지만 확인하고 아직 실행하지 않습니다.

실패 신호 빨간 밑줄, Expected comma, Task가 목록에 없거나 PowerShell 이외의 명령이 섞여 있습니다.

주의 Task는 로컬 프로세스를 실행합니다. 이 예시는 실습 폴더 아래 파일 두 개만 씁니다. 되돌리기: 오류 원문을 보존하고 JSON을 백업본으로 되돌린 뒤 Step 2에 재합류합니다.

3. 기본값 false를 Workspace에 명시하기

목적 질문이 표시되는 비교 기준을 명확하게 만듭니다.

  1. Preferences: Open Workspace Settings (JSON)을 실행해 아래 값을 저장합니다.

입력 위치 Command Palette → Preferences: Open Workspace Settings (JSON) · .vscode/settings.json

{
  "task.problemMatchers.neverPrompt": false
}

설정 명세 Key: task.problemMatchers.neverPrompt · 자료형: Boolean 또는 Task 유형별 Boolean Object · 현재 값: Boolean false · 범위: Workspace(Window-scoped setting) · 이전 값: 백업한 원래 값 또는 미설정

정상 결과 Workspace 탭에서 설정 값이 false로 보이고 JSON 오류가 없습니다.

확인 Settings UI에서 @modified problem matchers never prompt를 검색해 Workspace 표시를 확인합니다.

실패 신호 User 탭만 바뀌었거나, 값이 문자열 "false"로 입력됐거나, 기존 설정이 사라졌습니다.

주의 기존 settings.json에 다른 Key가 있으면 이 한 줄만 병합해야 합니다. 되돌리기: 백업을 복원하고 기존 Key를 보존한 채 다시 추가해 Step 3으로 재합류합니다.

4. process Task에서 기준 질문 확인하기

목적 설정 변경 전 Problem Matcher 질문이 실제로 나타나는지 확인합니다.

  1. Tasks: Run Task → PM Prompt Lab - process를 선택하고, 질문이 나타나면 Continue without scanning the task output을 한 번 선택합니다.

입력 위치 Command Palette → Tasks: Run Task → Problem Matcher Quick Pick

Select for which kind of errors and warnings to scan the task output
Continue without scanning the task output
정상 결과 질문을 거쳐 Terminal에 PM_PROMPT_LAB_OK process가 표시되고 .jcos-task-lab/process.txt에 TASK_TYPE=process가 기록됩니다.

확인 Terminal 원문과 Explorer의 결과 파일을 각각 확인합니다.

실패 신호 질문이 전혀 보이지 않거나, Never scan… 항목을 선택해 JSON이 자동 변경되거나, Task가 실패합니다.

주의 Continue without…은 이번 실행만 계속합니다. 되돌리기: 실수로 Never scan the task output for this task를 선택했다면 tasks.json에 추가된 "problemMatcher": []를 제거하고 Step 4로 재합류합니다.

5. process 유형만 질문을 끄기

목적 모든 Task가 아닌 process 유형에만 억제 범위를 제한합니다.

  1. .vscode/settings.json의 Boolean 값을 아래 Object로 바꿔 저장합니다.

입력 위치 .vscode/settings.json

{
  "task.problemMatchers.neverPrompt": {
    "process": true
  }
}

설정 명세 Key: task.problemMatchers.neverPrompt · 자료형: Object<TaskType, Boolean> · 새 값: { "process": true } · 범위: Workspace · 이전 값: Boolean false

정상 결과 Settings UI가 Object 값을 받아들이고, process만 true입니다.

확인 JSON의 Key가 Task의 type과 대소문자까지 process로 일치하는지 비교합니다.

실패 신호 Object 대신 배열을 입력했거나, Process처럼 다른 Key를 썼거나, 값이 문자열 "true"입니다.

주의 유형 Key가 틀리면 오류 없이 질문이 계속될 수 있습니다. 되돌리기: 값을 false로 복원하고 정확한 유형을 확인한 뒤 Step 5에 재합류합니다.

6. process Task의 질문 억제 확인하기

목적 Object 설정이 지정한 유형에 적용되는지 관찰합니다.

  1. Tasks: Run Task에서 PM Prompt Lab - process를 다시 실행합니다.

입력 위치 Command Palette → Tasks: Run Task

PM_PROMPT_LAB_OK process
TASK_TYPE=process
정상 결과 Problem Matcher Quick Pick 없이 곧바로 Terminal이 열리고 같은 성공 문구와 결과 파일이 갱신됩니다.

확인 질문 미표시, Terminal 출력, process.txt 세 항목을 모두 확인합니다.

실패 신호 질문이 다시 나타나거나, 결과 파일은 바뀌지 않았는데 이전 Terminal 출력만 남아 있습니다.

주의 질문이 없다는 사실만으로 Task 성공을 판단하지 마세요. 되돌리기: Terminal 오류 원문을 복사하고 Settings와 Task 유형을 다시 확인한 뒤 Step 5로 재합류합니다.

7. shell Task에는 질문이 남는지 확인하기

목적 Object 설정이 지정하지 않은 유형까지 넓게 적용되지 않았음을 검증합니다.

  1. Tasks: Run Task → PM Prompt Lab - shell을 선택하고, 질문이 보이면 Continue without scanning the task output을 선택합니다.

입력 위치 Command Palette → Tasks: Run Task → Problem Matcher Quick Pick

PM_PROMPT_LAB_OK shell
TASK_TYPE=shell
정상 결과 shell 유형에는 질문이 나타난 뒤 Task가 실행되고 .jcos-task-lab/shell.txt가 생성됩니다.

확인 질문 표시와 결과 파일을 함께 확인해 process와 다른 동작을 증명합니다.

실패 신호 shell에도 질문이 없거나, Task가 다른 기본 Shell에서 문법 오류로 실패합니다.

주의 기본 자동화 Shell이 PowerShell이 아니면 이 실습의 shell 명령은 실패할 수 있습니다. 되돌리기: 오류 원문을 보존하고 Terminal Profile을 PowerShell로 확인한 뒤 Step 7에 재합류합니다.

8. Boolean true의 전체 범위를 선택적으로 비교하기

목적 Object와 Boolean 값의 범위 차이를 직접 확인합니다.

  1. 비교가 필요할 때만 Settings 값을 아래 Boolean true로 바꾸고 PM Prompt Lab - shell을 한 번 다시 실행합니다.

입력 위치 .vscode/settings.json · Tasks: Run Task

{
  "task.problemMatchers.neverPrompt": true
}

설정 명세 Key: task.problemMatchers.neverPrompt · 자료형: Boolean · 새 값: true · 범위: Workspace · 이전 값: { "process": true }

정상 결과 이번에는 shell Task도 질문 없이 실행됩니다. 이는 모든 Task 유형에 적용한 결과입니다.

확인 Step 7의 질문 표시와 Step 8의 질문 미표시를 비교합니다.

실패 신호 true인데도 질문이 보이거나, 실제로 필요한 빌드 Task의 Matcher 선택까지 사라집니다.

주의 전체 억제는 필요한 오류 검사 설정 기회를 숨길 수 있어 권장 기본값이 아닙니다. 되돌리기: 목표가 유형별 억제라면 즉시 { "process": true }로 되돌리고 Step 7의 범위를 다시 확인합니다.

9. 결과를 보존하고 원래 상태로 복구하기

목적 관찰 Evidence를 남긴 뒤 실습 변경이 다른 작업에 영향을 주지 않게 합니다.

  1. Terminal 출력과 두 결과 파일을 확인한 뒤, 백업이 있으면 원래 JSON을 복원하고 없으면 실습용 settings.json·tasks.json과 .jcos-task-lab을 Explorer에서 삭제합니다.

입력 위치 VS Code Explorer · 실습 폴더 안의 .vscode와 .jcos-task-lab

복구 전 보존할 Evidence
- process: 질문 없음 · PM_PROMPT_LAB_OK process
- shell(Object): 질문 있음 · PM_PROMPT_LAB_OK shell
- shell(Boolean true): 질문 없음 (선택 비교)
- settings.json 원래 값
정상 결과 백업을 복원한 경우 원래 JSON이 돌아오고, 새 실습 폴더였다면 실습 파일만 제거됩니다.

확인 Tasks: Run Task와 Workspace Settings에서 실습 Label·설정이 사라졌는지 확인합니다.

실패 신호 다른 프로젝트 Task가 사라졌거나, 백업과 현재 파일의 내용이 다르거나, 삭제 대상 경로가 Workspace 밖입니다.

주의 넓은 삭제 명령이나 재귀 삭제를 쓰지 말고 Explorer에서 정확한 실습 파일만 지웁니다. 되돌리기: 삭제를 중단하고 백업 원문을 비교한 뒤 Step 1의 보호 대상 확인으로 재합류합니다.

4. 완료 확인하기

설정을 입력한 화면과 독립된 Terminal·결과 파일을 함께 확인합니다.

  • 범위 확인 { "process": true }에서 process 질문은 없고 shell 질문은 있습니다.
  • 실행 확인 Terminal에 PM_PROMPT_LAB_OK process와 PM_PROMPT_LAB_OK shell이 각각 표시됩니다.
  • 파일 확인 process.txt와 shell.txt의 값이 각 Task 유형과 일치합니다.
  • 비교 확인 선택적으로 Boolean true를 적용하면 shell 질문도 사라집니다.
  • 회귀 확인 복구 뒤 실습 설정과 Task만 제거되고 원래 Workspace 파일은 보존됩니다.
완료 기준 유형별 Object 값에서 process Task만 질문 없이 실행되고 shell Task는 질문을 유지하며, 두 Task의 출력과 결과 파일이 모두 성공을 증명하고 원래 상태로 복구할 수 있습니다.

5. 문제가 생겼다면

process Task에서도 질문이 계속 나타납니다

먼저 확인 오류 원문과 현재 settings.json을 보존하고, Key 철자·Object Key process·Boolean 값·Workspace 탭을 확인합니다. 원인은 확인 전 UNKNOWN입니다.

복구 { "process": true }를 정확히 저장하고 Task의 type이 process인지 비교합니다.

재합류 Step 5 → Step 6

shell Task에도 질문이 나타나지 않습니다

먼저 확인 User Settings에 Boolean true가 남았는지, 해당 Task에 "problemMatcher": []가 자동 기록됐는지 확인합니다.

복구 User·Workspace 우선순위를 확인하고, 실습 Task에만 추가된 빈 Matcher를 제거한 뒤 Workspace Object를 다시 저장합니다.

재합류 Step 5 → Step 7

Task가 실행되지만 Problems 패널에 오류가 없습니다

먼저 확인 질문 억제를 오류 검사 기능으로 오해하지 않았는지, 실제 빌드 Task에 명시적 problemMatcher가 있는지 확인합니다.

복구 공식 Tasks 문서에서 사용하는 도구에 맞는 Matcher를 선택해 Task에 명시합니다. 확인되지 않은 Matcher 이름을 만들지 않습니다.

재합류 이 글의 단순 로그 실습과 실제 빌드 Task를 분리한 뒤 Step 2

shell Task가 PowerShell 문법 오류로 실패합니다

먼저 확인 Terminal의 오류 원문과 기본 자동화 Profile을 보존합니다. 다른 Shell이 선택됐는지 확인합니다.

복구 실습 환경을 PowerShell로 맞추거나 process Task 비교까지만 수행합니다. 환경을 추정해 명령을 바꾸지 않습니다.

재합류 Step 7

설정 복구 뒤 원래 Task가 사라졌습니다

먼저 확인 삭제를 중단하고 .jcos-bak과 현재 JSON을 읽기 전용으로 비교합니다.

복구 백업 파일을 원래 이름으로 복사한 뒤 VS Code에서 JSON 오류와 Task 목록을 다시 확인합니다.

재합류 Step 9의 회귀 확인

핵심 판단 질문 미표시, Task 성공, Problem Matcher에 의한 오류 수집은 서로 다른 상태입니다. 원인을 확인하지 못하면 UNKNOWN을 유지하고 오류 원문·설정 값·Task 정의를 보존한 채 임의 변경 없이 중단합니다.

6. 핵심 정리와 공식 자료

  • FACT — 기본값 false는 Problem Matcher가 없는 적격 Task에서 질문을 허용합니다.
  • FACT — Boolean true는 모든 유형, Object의 type: true는 해당 Task 유형의 질문만 끕니다.
  • FACT — Never scan the task output for this task는 Task 자체에 빈 Matcher를 기록하는 별도 경로입니다.
  • RECOMMENDATION — Workspace Object로 필요한 유형만 제한하고, 실제 오류 수집 Task에는 명시적 Matcher를 유지합니다.

공식 자료

아래 자료는 2026-08-28 Asia/Seoul에 접근해 VS Code Stable 1.135.0과 commit 08d4889f9ec4a1685d257b9b95de036c8e1ce1e5 기준으로 확인했습니다. Stable 이후 Insiders 변경과 확장 기능이 기여한 Task 유형은 이 글의 검증 범위 밖입니다.

다음 편 예고 커맨드 팔레트 30부 — 느린 Task 공급자 경고를 유형별로 줄이기. task.slowProviderWarning의 Boolean 또는 Task 유형 문자열 배열, 기본값 true, 경고 범위와 Rollback을 다룹니다.
반응형
이 글이 유용했다면 링크를 공유해 보세요.