언어별 확장과 조합별 Profile 설치
언어별 확장 선택, 추천 목록·Pack·Profile의 설치 범위와 Bash·PowerShell 예제
언어 조합으로 설치할 수 있나요?
가능합니다. 이 가이드는 프로젝트의 언어 조합별로 하나의 Profile에 필요한 확장을 모으는 방법을 사용합니다. Web·Python Profile 두 개를 동시에 합성하는 방식은 아닙니다. 한 창에서 사용하는 조합을 Web + Python처럼 명시하고, 별도 프로젝트는 다른 Profile이나 창에서 엽니다.
무엇이 함께 설치되는가
| 방법 | 설치 동작 | 적합한 용도 |
|---|---|---|
.vscode/extensions.json | 추천만 표시; 사용자가 개별 또는 일괄 설치 | 저장소의 권장 구성 공유 |
| Extension Pack | Pack에 나열된 확장들을 함께 설치 | 배포 가능한 설치 묶음 |
code --install-extension | 지정 ID와 필요한 종속 확장 설치 | 선택한 조합의 명시적 설치 |
| Profile 가져오기 | 선택한 설정·키맵·확장 구성을 가져옴 | 개인 작업 환경 전환·공유 |
extensions.json을 커밋하거나 .py 파일을 여는 것만으로 모든 추천이 자동 설치되지는 않습니다. 반대로 Pack을 설치하면 이름에 적힌 언어 기능 하나만 생기는 것이 아니라 포함된 확장도 설치됩니다. 확장 관리
설치됨, 사용하도록 설정됨(enabled), 실제 실행됨(activated)은 다릅니다. 확장은 언어 파일·명령·디버깅·시작 이벤트 등에 반응하므로 모든 설치 확장이 항상 실행되는 것도, 현재 파일의 언어 확장만 실행되는 것도 아닙니다. Developer: Show Running Extensions로 확인합니다. 활성화 이벤트
언어별 시작 구성과 추가 조건
여기서 시작 구성은 아래 개발 작업에 필요한 선택입니다. 문법 색상만 보거나 CLI로 작업하는 사람에게 모든 항목이 필수라는 뜻은 아닙니다. 확장 ID 링크에서 게시자와 현재 포함 항목을 확인합니다.
| 언어·작업 | 시작 구성 | 필요할 때 추가·외부 도구 |
|---|---|---|
| JS·TS·React | 언어 지원·JS 디버거는 내장; Oxfmt/Oxlint 프로젝트는 Oxc | Node·프로젝트 TypeScript·lint 패키지는 별도. React 스니펫 확장은 선택 |
| Vue·Svelte·Tailwind | 위 Web 구성 | 해당 프로젝트에서만 Vue.volar, svelte.svelte-vscode, bradlc.vscode-tailwindcss |
| Java | vscjava.vscode-java-pack | JDK·빌드 wrapper 준비; Spring은 vmware.vscode-boot-dev-pack |
| Go | golang.Go | Go SDK, gopls, 디버깅용 Delve 확인; 별도 gofmt 확장은 불필요 |
| Python | ms-python.python, charliermarsh.ruff | Python·가상환경·pytest 별도; 노트북에만 ms-toolsai.jupyter 추가 |
| YAML | redhat.vscode-yaml | yamllint는 별도 CLI·Task; Oxfmt를 쓰면 YAML 확장의 formatter와 역할 조정 |
| Shell | foxundermoon.shell-format, timonwong.shellcheck | shfmt·ShellCheck 실행 파일 경로 확인 |
| 공통 텍스트 규칙 | EditorConfig.EditorConfig | 저장소 .editorconfig 작성 |
Java Pack은 확인일 기준 언어 지원·디버거·테스트·Maven·Gradle·프로젝트 관리 확장을 포함합니다. 이 중 일부만 원하면 Pack 대신 redhat.java, vscjava.vscode-java-debug, vscjava.vscode-java-test처럼 필요한 ID를 개별 설치합니다. Spring Pack은 별도 선택입니다. Java Pack 구성
Python 확장은 기본적으로 Pylance, Python Debugger, Python Environments를 추가 설치합니다. 따라서 위 표의 두 ID를 설치한 결과가 정확히 두 개일 필요는 없습니다. 이들은 선택적 의존성이며 사용 여부를 조정할 수 있습니다. Ruff는 별도 선택입니다. Python의 추가 설치 항목
확장 설치만으로 Node·JDK·Go·Python과 프로젝트 의존성이 모두 준비되지는 않습니다. 일부 확장이 보조 도구를 내려받더라도 CLI·CI 환경은 별도로 재현해야 합니다. 내장 TypeScript 언어 지원과 프로젝트 compiler도 구분합니다. TypeScript 공식 안내
저장소에 추천 목록을 둔다
Web + Python 저장소의 .vscode/extensions.json 예시입니다. 기존 목록에는 필요한 ID만 병합합니다. Extensions 화면에서 @recommended로 확인하고 원하는 항목을 설치합니다.
{
"recommendations": [
"EditorConfig.EditorConfig",
"oxc.oxc-vscode",
"ms-python.python",
"charliermarsh.ruff"
]
}전체 목록 설치를 선택하면 목록의 다른 언어 확장도 함께 설치될 수 있습니다. 모노레포 전체 추천과 개인의 작업 범위가 다르면 아래 Profile 설치로 좁힙니다. 이 파일은 버전 lockfile이나 설치 강제 정책이 아닙니다.
Profile을 지정해 설치한다
VS Code Desktop의 code CLI가 PATH에 있어야 합니다. macOS는 Command Palette의 Shell Command: Install 'code' command in PATH를 사용합니다. 먼저 Profiles에서 이름이 Web + Python인 Empty Profile을 만듭니다. 또는 code . --profile "Web + Python"으로 창을 열고 Profile 생성이 완료됐는지 확인한 다음 아래 설치 명령을 실행합니다. CLI 옵션
창 열기와 확장 설치의 Profile 처리는 다릅니다. --install-extension --profile ...은 기존 Profile을 찾으므로 없는 이름이면 실패할 수 있습니다. 설치 명령이 Profile도 만든다고 가정하지 않습니다. VS Code CLI 구현
code --profile "Web + Python" --install-extension EditorConfig.EditorConfig
code --profile "Web + Python" --install-extension oxc.oxc-vscode
code --profile "Web + Python" --install-extension ms-python.python
code --profile "Web + Python" --install-extension charliermarsh.ruff
code --profile "Web + Python" --list-extensions --show-versions
code . --profile "Web + Python"이 명령은 설치를 추가하며 기존 불필요한 확장을 제거하지 않습니다. 결과 목록을 확인하고 Profile을 프로젝트에 연결합니다. 일반적인 Profile은 확장 버전과 파일을 완전히 격리한 컨테이너가 아닙니다. Apply Extension to all Profiles로 지정한 확장도 확인합니다. Profile 관리
조합 선택 스크립트
다음 내용을 학습 프로젝트의 install-vscode-extensions.sh로 저장합니다. Bash가 있는 macOS·Linux·WSL에서 실행하며, 이 스크립트는 선택한 case만 설치합니다. 실행 전에 선택한 Profile 이름(Web + Python, Web + Java, Go + Infra)으로 빈 Profile을 생성해 둡니다. 세 조합을 모두 실행하면 각 Profile에 해당 조합이 추가됩니다.
#!/usr/bin/env bash
set -euo pipefail
choice="${1:-web-python}"
case "$choice" in
web-python)
profile="Web + Python"
extensions=(oxc.oxc-vscode ms-python.python charliermarsh.ruff)
;;
web-java)
profile="Web + Java"
extensions=(oxc.oxc-vscode vscjava.vscode-java-pack)
;;
go-infra)
profile="Go + Infra"
extensions=(golang.Go redhat.vscode-yaml foxundermoon.shell-format timonwong.shellcheck)
;;
*)
printf 'Usage: %s {web-python|web-java|go-infra}\n' "$0" >&2
exit 2
;;
esac
command -v code >/dev/null
for extension_id in EditorConfig.EditorConfig "${extensions[@]}"; do
code --profile "$profile" --install-extension "$extension_id"
done
code --profile "$profile" --list-extensions --show-versionsbash install-vscode-extensions.sh web-python
code . --profile "Web + Python"Java와 Web을 함께 쓰면 인수를 web-java, Go·운영 파일을 다루면 go-infra로 바꿉니다. Spring·Jupyter·Vue는 실제 프로젝트가 요구할 때 해당 배열에 추가합니다. ESLint·Prettier 프로젝트라면 Oxc ID를 그 프로젝트의 구성으로 바꾸고 포맷 충돌 해결을 따릅니다.
Windows PowerShell에서는 같은 Web + Python 목록을 다음과 같이 설치할 수 있습니다.
$profileName = "Web + Python"
$extensionIds = @(
"EditorConfig.EditorConfig",
"oxc.oxc-vscode",
"ms-python.python",
"charliermarsh.ruff"
)
foreach ($extensionId in $extensionIds) {
code --profile $profileName --install-extension $extensionId
if ($LASTEXITCODE -ne 0) { throw "Extension install failed: $extensionId" }
}
code --profile $profileName --list-extensions --show-versions중간 설치에 실패하면 이미 설치한 항목은 남습니다. 원인을 해결한 뒤 재실행하고 목록을 확인합니다. 설치 목록은 도구 버전 잠금이나 원자적 배포를 제공하지 않습니다.
자체 Extension Pack이 필요한 시점
여러 저장소에서 같은 설치 묶음을 배포하고 담당자가 갱신할 때 고려합니다. 몇 개의 조합이면 위 ID 목록으로 시작할 수 있습니다. Pack의 package.json 예시는 다음과 같으며 게시자 ID는 실제 배포 계정에 맞춰야 합니다.
{
"name": "team-web-python",
"displayName": "Team Web + Python",
"publisher": "your-publisher-id",
"version": "0.0.1",
"engines": { "vscode": "^1.85.0" },
"categories": ["Extension Packs"],
"extensionPack": [
"EditorConfig.EditorConfig",
"oxc.oxc-vscode",
"ms-python.python",
"charliermarsh.ruff"
]
}extensionPack은 함께 설치할 ID 목록이고, extensionDependencies는 확장 실행에 필요한 의존성을 선언합니다. 단순 추천 파일을 Pack으로 해석하지 않습니다. 이 manifest만 저장소에 두어서는 설치되지 않으며 VSIX 패키징·설치 또는 Marketplace 배포가 필요합니다. Pack도 JDK·Python·npm 패키지를 설치하는 환경 관리자는 아닙니다. 확장 manifest
방법 선택: 프로젝트 추천부터 시작하기
팀 저장소에는 추천 목록을 두고, 개인 환경은 실제 담당하는 언어 조합의 Profile로 관리하는 구성을 권합니다. 신규 Java 개발자에게 여러 기능을 한 번에 준비해야 한다면 Java Pack을 선택합니다. 모든 언어의 확장을 먼저 모으기보다 아래 완료 기준으로 필요한 범위를 정합니다.
| 상황 | 실행할 방법 | 완료 기준 |
|---|---|---|
| 기존 팀 저장소에 합류 | 추천 목록에서 필요한 항목 설치 | 프로젝트 설정의 formatter를 사용할 수 있음 |
| Java 개발 환경을 처음 구성 | Java Pack 설치 | 프로젝트 import·테스트·디버깅 가능 |
| Web과 Python을 함께 담당 | 빈 Web + Python Profile에 조합 설치 | 두 언어를 검사하고 다른 업무의 확장은 분리 |
| 같은 환경을 다른 PC에서 사용 | Profile 파일 내보내기·가져오기 | 확장 목록 비교와 SDK 확인 완료 |
추천 목록을 화면에서 설치하기
- 저장소 루트를 열고 위 예시의
.vscode/extensions.json을 작성하거나 기존 내용을 확인합니다. - Extensions를 엽니다. Windows·Linux는
Ctrl+Shift+X, macOS는Cmd+Shift+X입니다. - 검색창에
@recommended를 입력하고 Workspace Recommendations의 목록을 확인합니다. 다른 추천 영역과 구분합니다. - 확장의 게시자·ID를 확인한 뒤 필요한 항목의 Install을 누릅니다. 해당 영역의 일괄 설치를 선택하면 현재 담당하지 않는 언어까지 포함될 수 있습니다.
- 같은 창에서
.ts나.py파일을 열고 Format Document로 예상 formatter를 선택할 수 있는지 확인합니다.
추천 목록을 수정하거나 항목을 삭제해도 이미 설치한 확장은 제거되지 않습니다. 설치 결과는 Extensions의 @installed로 확인합니다. 추천과 확장 관리
Java Pack을 화면과 CLI에서 설치하기
- Extensions 검색창에
@id:vscjava.vscode-java-pack을 입력합니다. - 상세 화면의 Extension Pack 영역에서 함께 설치되는 항목을 읽습니다. Maven만 사용하더라도 Pack에 포함된 Gradle 확장이 설치될 수 있습니다.
- Install을 누른 다음
@installed에서 Pack뿐 아니라 Java 언어 지원·Debugger·Test Runner도 확인합니다. - Java 가이드에 따라 JDK와 빌드 wrapper를 준비하고 프로젝트를 가져옵니다.
CLI를 사용한다면 먼저 이름이 Web + Java인 Profile을 생성한 뒤 다음 명령을 실행합니다. 아래의 두 번째 명령은 실제 Spring 프로젝트일 때만 실행합니다.
code --profile "Web + Java" --install-extension vscjava.vscode-java-packcode --profile "Web + Java" --install-extension vmware.vscode-boot-dev-packcode --profile "Web + Java" --list-extensions --show-versions이 예제는 Java 관련 확장을 추가합니다. 같은 Profile의 Web 도구까지 구성하려면 위 web-java 조합을 사용합니다. 설치 개수보다 Java 파일의 진단·JUnit 실행·breakpoint 동작으로 완료 여부를 판단합니다. Java Pack, Spring Pack
Profile을 만들고 프로젝트에 연결하기
- Manage의 Profiles에서 New Profile을 선택합니다.
- 이름을
Web + Python으로 정하고 복사 원본은 Empty Profile로 선택한 다음 Create로 생성합니다. - 사용할 프로젝트 폴더를 열고
Profiles: Switch Profile에서 해당 Profile을 선택합니다. - 현재 Profile 이름을 확인한 뒤 위 CLI 또는
web-python스크립트로 확장을 설치합니다. - 다른 폴더로 이동했다가 프로젝트를 다시 열어 같은 Profile이 선택되는지 확인합니다.
한 창에서 Web Profile과 Python Profile을 동시에 켜는 방식은 사용하지 않습니다. 한 모노레포 창에서 두 언어를 다룬다면 조합 Profile을 사용하고, 업무를 따로 열고 싶으면 창을 나눕니다. Profile 생성·전환·폴더 연결
다른 PC로 Profile을 옮기기
Profiles에서 내보낼 Profile의 Export를 선택하고 필요한 항목만 포함해 로컬 .code-profile 파일로 저장합니다. 대상 PC의 Profiles에서 Import Profile로 파일을 가져온 뒤 해당 Profile을 선택합니다. 이 절차에서는 온라인 공개나 계정 동기화가 필요하지 않습니다.
가져오기 전후에 code --profile "Web + Python" --list-extensions --show-versions로 결과를 비교합니다. 내보낸 설정의 로컬 경로는 대상 PC에 맞게 조정하고, Node·JDK·Python·Go와 프로젝트 의존성은 별도로 준비합니다. 같은 테마가 보인다는 이유만으로 개발 환경이 복제됐다고 판단하지 않습니다. Profile 공유
과하게 설치했을 때 정리하기
Extensions에서 해당 항목의 Manage 메뉴를 열어 **Disable (Workspace)**로 현재 프로젝트에서만 꺼 봅니다. 코드 진단·테스트·포맷이 유지되면 그 작업에는 필요하지 않은지 판단할 수 있습니다. 다시 쓰려면 Enable (Workspace)로 복구합니다.
Profile에서 제거할 항목이 확실하다면 해당 Profile을 지정해 제거하고 목록을 다시 확인합니다. 아래는 Web + Python Profile에 실수로 넣은 Java Pack을 정리하는 예시입니다.
code --profile "Web + Python" --uninstall-extension vscjava.vscode-java-pack
code --profile "Web + Python" --list-extensions --show-versionsPack 제거와 포함 확장 제거를 같은 작업으로 단정하지 말고, 제거 UI가 제시하는 범위와 남은 설치 목록을 확인합니다. 포함 확장은 다른 작업에서도 쓸 수 있습니다. Apply Extension to all Profiles로 지정한 공통 확장도 확인합니다. 확장 비활성화·제거
막혔을 때 확인할 지점
| 증상 | 먼저 확인할 내용 |
|---|---|
| 추천 파일을 넣었지만 확장이 없음 | 추천은 설치 요청이 아님. Workspace Recommendations에서 설치 |
Profile ... not found | 같은 이름으로 Profile 생성이 끝났는지 확인 |
| 예상보다 많이 설치됨 | Pack 구성과 Python의 선택적 종속 확장을 확인 |
| 설치됐는데 정의 이동이 안 됨 | 언어 모드·활성 Profile·언어 서버의 프로젝트 인식 확인 |
| 로컬에서는 되지만 SSH에서 안 됨 | 원격 쪽 확장 설치와 SDK 경로 확인 |
| 저장과 CLI의 결과가 다름 | formatter·설정·버전·실행 위치를 같은 기준으로 맞춤 |
설치 완료 확인
Profile의 설치 목록을 기록한 뒤 해당 파일에서 정의 이동·Rename·테스트 디버깅·포맷을 한 번씩 수행합니다. 단축키 표를 사용하고 Java, TypeScript, Go, Python의 SDK 확인 절차를 따릅니다.
SSH·WSL·Dev Container에서는 언어 확장이 실행될 위치도 확인합니다. 로컬에 설치한 목록이 원격에 자동으로 동일 적용된다고 가정하지 말고 Extensions의 Local/원격 구분과 Install in ...를 확인합니다. Remote SSH 확장 관리
자료 확인일은 2026-09-06입니다. Bash 스크립트의 분기·인수·실패 처리는 모의 CLI로 검사했습니다. PowerShell 예제는 실행 검증하지 않았으며, 실제 Marketplace 설치·GUI 활성화는 독자의 환경에서 위 절차로 확인합니다.