Task 오류일 때만 Problems 패널 열기
정상 실행은 편집 화면을 유지하고, Problem Matcher가 오류를 찾은 실행만 Problems 패널로 전환합니다.
이번 편의 핵심
성공 Task는 REVEAL_PROBLEMS_OK로 끝나며 Problems 패널이 자동으로 열리지 않고, 실패 Task는 JCOS001 오류 1개를 등록하며 Problems 패널을 자동으로 엽니다.
presentation.revealProblems: "onProblem"과 사용자 정의 Problem Matcher를 함께 적용해 필요한 순간에만 진단 화면을 표시합니다.
1. 시작하기 전에
난이도는 초급입니다. 다만 .vscode/tasks.json을 바꾸고 실패 종료 코드를 의도적으로 만들므로, 기존 설정 백업과 격리된 실습 폴더가 먼저 필요합니다.
준비할 것
- Windows 11에서 폴더를 연 VS Code Stable — Help: About 또는
code --version으로 1.135.0을 확인합니다. - PowerShell — 시작 메뉴에서 PowerShell을 열어
$PSVersionTable.PSVersion이 표시되는지 확인합니다. - 삭제해도 되는
jcos-reveal-problems-lab폴더 — Explorer의 최상위 폴더명이 맞는지 확인합니다. - 기존
.vscode/tasks.json백업 — 파일이 있으면tasks.before-reveal-problems.json으로 복사하고 크기가 0보다 큰지 확인합니다.
적용 환경 한국어 초보자 · Windows 11 · VS Code Stable 1.135.0 · Windows PowerShell
tasks.json이 있는데 백업이 없거나, 현재 폴더가 실습 전용인지 확신할 수 없으면 변경 전에 중단하세요. 되돌리기: 백업 파일을 원래 이름으로 복원하거나 실습 전용 폴더 전체를 확인 후 제거합니다.2. 알아둘 핵심 개념
FACT — presentation.revealProblems
Task별 presentation 안에 쓰는 문자열 속성입니다. 값은 always, onProblem, never이며 기본값은 never입니다. onProblem은 Problem Matcher가 문제를 찾은 실행에서 Problems 패널을 엽니다.
FACT — reveal보다 높은 우선순위
공식 Tasks 문서는 revealProblems가 Terminal 공개 여부를 정하는 reveal보다 우선한다고 설명합니다. 이 글은 reveal: "never"와 revealProblems: "onProblem"을 함께 사용합니다.
FACT — Problem Matcher
Task 출력의 특정 형식을 파일·줄·열·심각도·코드·메시지로 해석해 Problems 항목을 만듭니다. 종료 코드가 1이라는 사실만으로 사용자 정의 Matcher의 문제 항목이 생기는 것은 아닙니다.
RECOMMENDATION — 먼저 onProblem
always는 오류가 없는 실행에서도 Problems를 열 수 있습니다. 평소 편집 화면을 유지하고 진단이 필요할 때만 전환하려면 onProblem부터 적용하세요.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 실습 폴더를 열고 환경 확인하기
목적 실제 프로젝트와 분리된 안전한 Workspace를 확보합니다.
- 새
jcos-reveal-problems-lab폴더를 만든 뒤 VS Code의 File > Open Folder...에서 엽니다. 낯선 내용이 있다면 신뢰 여부를 먼저 검토합니다.
입력 위치 Windows 파일 탐색기와 VS Code Explorer
jcos-reveal-problems-lab/
└─ (아직 비어 있음)
정상 결과 Explorer 최상위에 jcos-reveal-problems-lab만 보입니다.
확인 통합 Terminal에서 Get-Location을 실행해 경로 끝이 폴더명과 같은지 확인합니다.
실패 신호 업무 파일이나 기존 프로젝트 설정이 보입니다.
2. 기존 Task 설정 보호하기
목적 덮어쓰기 전에 원본을 보존합니다.
.vscode/tasks.json이 있으면 Explorer에서tasks.before-reveal-problems.json으로 복사합니다. 없으면 다음 단계로 이동합니다.
입력 위치 Workspace의 .vscode 폴더
.vscode/
├─ tasks.json
└─ tasks.before-reveal-problems.json
정상 결과 기존 파일이 있던 경우 두 파일의 초기 내용과 크기가 같습니다.
확인 두 파일을 열어 첫 줄과 마지막 줄을 비교합니다.
실패 신호 복사본이 비어 있거나 쓰기 권한 오류가 납니다.
3. 오류가 연결될 실습 파일 만들기
목적 Problems 항목이 실제 파일 위치로 이동할 대상을 만듭니다.
- Workspace 루트에
demo.txt를 만들고revealProblems practice한 줄을 저장합니다.
입력 위치 Explorer의 Workspace 루트
revealProblems practice
정상 결과 demo.txt 1행에 문구가 보이고 저장 표시가 사라집니다.
확인 상태 표시줄에서 커서 위치가 Ln 1, Col 1로 이동하는지 확인합니다.
실패 신호 파일이 .vscode 안에 만들어졌거나 저장되지 않습니다.
4. 성공·실패 Task와 Matcher 저장하기
목적 같은 Matcher를 공유하면서 문제 유무만 다른 두 실행 경로를 만듭니다.
.vscode/tasks.json을 열고 아래 JSON 전체를 저장합니다.${workspaceFolder}는 실제 실습 폴더로 VS Code가 치환합니다.
입력 위치 jcos-reveal-problems-lab/.vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Problems demo - success",
"type": "process",
"command": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"args": ["-NoProfile", "-Command", "Write-Output 'REVEAL_PROBLEMS_OK'; exit 0"],
"problemMatcher": {
"owner": "jcos-reveal-problems",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^(.*)\\((\\d+),(\\d+)\\):\\s+(error|warning)\\s+([A-Z]+\\d+):\\s+(.*)$",
"file": 1, "line": 2, "column": 3, "severity": 4, "code": 5, "message": 6
}
},
"presentation": {"reveal": "never", "revealProblems": "onProblem", "panel": "dedicated", "clear": true}
},
{
"label": "Problems demo - failure",
"type": "process",
"command": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"args": ["-NoProfile", "-Command", "Write-Output 'demo.txt(1,1): error JCOS001: simulated failure'; exit 1"],
"problemMatcher": {
"owner": "jcos-reveal-problems",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^(.*)\\((\\d+),(\\d+)\\):\\s+(error|warning)\\s+([A-Z]+\\d+):\\s+(.*)$",
"file": 1, "line": 2, "column": 3, "severity": 4, "code": 5, "message": 6
}
},
"presentation": {"reveal": "never", "revealProblems": "onProblem", "panel": "dedicated", "clear": true}
}
]
}
정상 결과 빨간 JSON 구문 오류가 없고 tasks 배열에 두 Task가 표시됩니다.
확인 Ctrl+Shift+P → Tasks: Run Task에서 두 label을 확인합니다.
실패 신호 “Error: The task configuration is missing…” 또는 JSON 밑줄이 표시됩니다.
5. 성공 경로에서 편집 화면 유지 확인하기
목적 문제가 없는 실행에서는 Problems가 자동 공개되지 않음을 확인합니다.
- Problems 패널을 닫고 Tasks: Run Task에서
Problems demo - success를 실행합니다.
입력 위치 Command Palette → Tasks: Run Task
REVEAL_PROBLEMS_OK
정상 결과 편집 화면이 유지되고 Problems 패널은 자동으로 열리지 않습니다. Task Terminal을 직접 열면 원문과 종료 코드 0을 확인할 수 있습니다.
확인 Ctrl+`로 Terminal을 열어 출력 원문을 확인한 뒤 다시 닫습니다.
실패 신호 Problems가 열리거나 다른 오류 항목이 새로 생깁니다.
6. 실패 경로에서 Problems 자동 공개 확인하기
목적 Matcher가 오류를 찾을 때만 진단 패널이 열리는지 확인합니다.
- Problems 패널을 닫고 Tasks: Run Task에서
Problems demo - failure를 실행합니다.
입력 위치 Command Palette → Tasks: Run Task
demo.txt(1,1): error JCOS001: simulated failure
정상 결과 Problems 패널이 자동으로 열리고 오류 1개가 표시됩니다. 실패 종료 코드는 이 실습에서 의도한 결과입니다.
확인 문제 항목에 simulated failure, JCOS001, demo.txt가 모두 보이는지 확인합니다.
실패 신호 Terminal만 열리거나 Problems에 새 항목이 없습니다.
7. 문제 항목의 파일 위치 교차 확인하기
목적 단순 패널 공개를 넘어 Matcher의 파일·행·열 연결을 검증합니다.
- Problems의
simulated failure항목을 선택하고demo.txt1행 1열로 이동하는지 확인합니다.
입력 위치 Problems 패널의 오류 항목
demo.txt:1:1 · error · JCOS001 · simulated failure
정상 결과 demo.txt가 열리고 커서가 1행 1열에 놓입니다.
확인 상태 표시줄의 Ln 1, Col 1과 Problems 오류 수 1을 함께 확인합니다.
실패 신호 “Unable to open…”이 표시되거나 다른 파일로 이동합니다.
fileLocation은 Workspace 루트 기준입니다. 되돌리기: demo.txt 위치와 ${workspaceFolder} 치환 범위를 고친 뒤 Step 6부터 재합류합니다.8. 원래 Task 설정으로 복원하기
목적 실습용 Task와 오류 항목을 남기지 않습니다.
- 백업이 있으면 그 내용을
.vscode/tasks.json으로 복원하고, 백업이 없으면 실습용tasks.json을 삭제합니다.demo.txt와 빈 폴더도 확인 후 제거합니다.
입력 위치 Explorer의 .vscode와 Workspace 루트
복원 후 Tasks: Run Task
→ Problems demo - success 없음
→ Problems demo - failure 없음
정상 결과 실습 Task 두 개가 목록에서 사라지고 기존 Task만 남습니다.
확인 Tasks: Run Task 목록과 Ctrl+Shift+M Problems 패널을 다시 확인합니다.
실패 신호 실습 Task가 계속 보이거나 백업 내용이 다릅니다.
4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
tasks.json구조 — Task 2개, 고유 label 2개, 두revealProblems값이 모두onProblem입니다.- 성공 경로 —
REVEAL_PROBLEMS_OK, 종료 코드 0, 새 Matcher 항목 0, Problems 자동 공개 없음입니다. - 실패 경로 — 오류 원문 보존, 종료 코드 1, Problems 오류 1개,
demo.txt:1:1이동입니다. - 독립 확인 —
Ctrl+Shift+M으로 Problems를 직접 열어 오류 수·코드·파일 위치를 재확인합니다. - Human Gate — 자동화는 JSON·명령·정규식과 Stable 소스 분기를 검증했지만 사용자의 VS Code UI를 바꾸지 않았습니다. 자동 공개 여부는 독자가 직접 관찰합니다.
완료 기준 성공 Task는 편집 흐름을 유지하고, 실패 Task에서만 Problems가 열리며JCOS001오류 1개가demo.txt1행 1열에 연결됩니다.
5. 문제가 생겼다면
Problems 패널이 열리지 않습니다
먼저 확인 출력 원문의 괄호·쉼표·콜론, 정규식의 이중 역슬래시, revealProblems: "onProblem"을 확인합니다.
복구 세 항목을 예제와 같게 복원하고 실패 Task를 다시 실행합니다.
재합류 RP-STEP-06
Terminal이 먼저 열립니다
먼저 확인 Task 내부 reveal이 never인지와 상위 전역 presentation을 확인합니다.
복구 Task 내부 값을 원본대로 두고 성공·실패 경로를 다시 비교합니다.
재합류 RP-STEP-05
Problems는 열리지만 파일로 이동하지 못합니다
먼저 확인 demo.txt가 Workspace 루트에 있는지와 fileLocation의 ${workspaceFolder}를 확인합니다.
복구 파일을 루트로 옮기고 실패 Task를 다시 실행합니다.
재합류 RP-STEP-06
성공 Task에서도 이전 오류가 보입니다
먼저 확인 Problems에 남은 항목의 소유자와 마지막 실행 시점을 확인합니다.
복구 실습 오류를 정리하고 패널을 닫은 뒤 성공 Task만 다시 실행해 자동 공개 여부를 구분합니다.
재합류 RP-STEP-05
원인을 확인하지 못했습니다
먼저 확인 Task 출력 원문과 Problems 항목을 복사해 Evidence로 보존합니다.
복구 임의 변경을 멈추고 백업을 복원한 뒤 JSON 전체를 다시 적용합니다.
재합류 RP-STEP-04
6. 핵심 정리와 공식 자료
revealProblems는always | onProblem | never문자열이며 기본값은never입니다.onProblem은 Problem Matcher가 문제를 찾은 실행에서만 Problems를 엽니다.reveal: "never"와 함께 쓰면 정상 실행은 편집 흐름을 유지하고 진단 실행만 Problems로 전환할 수 있습니다.- 완료 확인은 성공/실패 출력, Matcher 오류 수, 파일 위치 이동, Rollback까지 포함합니다.
공식 자료
아래 자료는 2026-08-31 KST에 확인했습니다. Stable API와 고정 commit 소스는 Windows x64 User Stable 1.135.0 범위이며, 이후 버전에서 UI 문구나 구현이 바뀔 수 있습니다.
- VS Code Stable Update API · Microsoft
- Integrate with External Tools via Tasks — Output behavior · Microsoft
- Stable taskConfiguration.ts · Microsoft
- Stable terminalTaskSystem.ts · Microsoft
- Stable tasks.ts · Microsoft
presentation.focus의 Boolean 자료형과 기본값 false, reveal과의 관계, 편집기 포커스 유지 확인과 Rollback을 다룹니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 33부: VS Code Task 실행 명령만 숨기고 출력은 그대로 보기 (0) | 2026.09.01 |
|---|---|
| 커맨드 팔레트 32부: VS Code Task Terminal을 보여도 편집기 포커스 유지하기 (0) | 2026.09.01 |
| 커맨드 팔레트 30부: VS Code Task 목록을 빠르게 여는 공급자 설정 (0) | 2026.08.30 |
| 커맨드 팔레트 29부: VS Code Task의 Problem Matcher 질문을 유형별로 끄기 (0) | 2026.08.28 |
| 커맨드 팔레트 28부: VS Code 창 Reload 뒤 실행 중 Task에 다시 연결하기 (0) | 2026.08.27 |