WSL 개발환경 설정 스크립트

junyojeo·2026년 1월 23일
post-thumbnail

Windows에서 개발 환경을 구축하는 가장 효율적인 방법은 WSL2를 사용하는 것이다. Linux 환경을 네이티브에 가깝게 실행할 수 있고, Windows 파일 시스템과도 자유롭게 통합된다.

복사-붙여넣기로 바로 실행할 수 있는 스크립트를 모았다.

WSL2 설치

WSL2는 Windows에서 Linux를 네이티브처럼 실행하는 환경이다. PowerShell 관리자 권한에서 한 줄로 설치할 수 있다.

wsl --install

재부팅하면 Ubuntu 22.04가 자동으로 설치된다. VSCode를 함께 사용하려면 터미널 기본 프로필을 'Ubuntu-22.04 (WSL)'로 변경하면 된다.

사용자 계정 확인

WSL을 처음 실행하면 사용자 이름과 비밀번호를 입력하는 화면이 나온다. 이 과정을 마치면 바로 자동 설치 스크립트로 넘어가면 된다.

터미널 프롬프트를 확인한다. $로 끝나면 일반 사용자로 로그인된 것이다. 다음 단계로 넘어간다.

#로 끝나면 root로 접속된 것이다. 이럴 때만 아래 명령어를 실행한다.

# 사용자 생성 (username을 원하는 이름으로 변경)
adduser username

# sudo 권한 부여
usermod -aG sudo username

사용자를 만든 후 WSL을 종료하고 PowerShell에서 기본 사용자를 설정한다.

# Ubuntu의 기본 사용자 변경
ubuntu config --default-user username

다시 Ubuntu를 실행하면 만든 사용자로 로그인된다.

자동 설치 스크립트 (1단계: 기본 환경)

기본 패키지와 Homebrew를 설치한다. 전체를 복사해서 Ubuntu 터미널에 붙여넣으면 된다.

#!/bin/bash
set -e

echo "=== 1단계: 기본 환경 설치 시작 ==="

# 기본 패키지
echo "[1/5] 기본 패키지 설치 중..."
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential zsh git gcc curl vim tk-dev

# Oh My Zsh 설치
echo "[2/5] Oh My Zsh 설치 중..."
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended

# Zsh 플러그인
echo "[3/5] Zsh 플러그인 설치 중..."
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# Powerlevel10k 테마
echo "[4/5] Powerlevel10k 테마 설치 중..."
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# Homebrew 설치
echo "[5/5] Homebrew 설치 중..."
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

# Homebrew 설치 확인
if ! command -v brew &> /dev/null; then
    echo "오류: Homebrew 설치 실패"
    echo "수동으로 설치하려면 아래 단계별 설치를 참고하세요."
    exit 1
fi

# .zshrc 플러그인 및 테마 설정
sed -i 's/^plugins=.*/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/' ~/.zshrc
sed -i 's/^ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/' ~/.zshrc

# Vim 설정
echo "Vim 설정 중..."
mkdir -p ~/.vim/colors
curl -o ~/.vim/colors/jellybeans.vim https://raw.githubusercontent.com/nanotech/jellybeans.vim/master/colors/jellybeans.vim
cat > ~/.vimrc << 'EOF'
set hlsearch
set nu
set autoindent
set scrolloff=2
set wildmode=longest,list
set ts=4
set sts=4
set sw=4
set autowrite
set autoread
set cindent
set bs=eol,start,indent
set history=256
set laststatus=2
set shiftwidth=4
set showmatch
set smartcase
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
set ruler
set incsearch

au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif

if has("syntax")
  syntax on
endif

colorscheme jellybeans
EOF

# 터미널 색상
echo 'export LS_COLORS="ow=01;36;40"' >> ~/.zshrc

echo ""
echo "=== 1단계 완료 ==="
echo "다음: 2단계 스크립트를 실행하세요."

자동 설치 스크립트 (2단계: 개발 도구)

Python, Node.js, GitHub CLI를 설치한다. 1단계 완료 후 바로 실행하면 된다.

#!/bin/bash
set -e

echo "=== 2단계: 개발 도구 설치 시작 ==="

# Homebrew 사용 가능 확인
if ! command -v brew &> /dev/null; then
    echo "오류: Homebrew가 설치되지 않았습니다."
    echo "1단계 스크립트를 먼저 실행하세요."
    exit 1
fi

# Python (pyenv)
echo "[1/4] Python 설치 중..."
brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
pyenv install 3.13.1
pyenv global 3.13.1
echo 'alias python=python3' >> ~/.zshrc

# Node.js + NVM
echo "[2/4] Node.js 설치 중..."
brew install node nvm
mkdir -p ~/.nvm
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh" ] && \. "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh"' >> ~/.zshrc
export NVM_DIR="$HOME/.nvm"
[ -s "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh" ] && \. "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh"
nvm install --lts
nvm use --lts

# GitHub CLI
echo "[3/4] GitHub CLI 설치 중..."
brew install gh

# Git 기본 설정
echo "[4/4] Git 설정 중..."
git config --global core.editor vim
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm 'commit -m'

echo ""
echo "=== 2단계 완료 ==="
echo ""
echo "추가 작업 필요:"
echo "1. chsh -s \$(which zsh) 실행 후 재로그인"
echo "2. 폰트 설치: https://github.com/romkatv/powerlevel10k#fonts"
echo "3. git config --global user.name 'Your Name'"
echo "4. git config --global user.email 'your@email.com'"
echo "5. gh auth login (GitHub CLI 로그인)"
echo ""
echo "터미널 재시작 후 Powerlevel10k 설정 마법사가 실행됩니다."

자동 설치 스크립트로 오류가 생기면 아래 단계별 수동 설치를 따라가면 된다.


기본 패키지

개발에 필요한 컴파일러와 도구들을 먼저 설치한다. build-essential은 C/C++ 컴파일에 필요하고, gcc는 다양한 언어의 기본 컴파일러다.

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential zsh git gcc curl vim tk-dev

이제 쉘 환경을 개선할 차례다.

Zsh 기본 쉘로 변경

bash 대신 zsh를 기본 쉘로 사용한다. zsh는 더 강력한 자동완성과 플러그인 시스템을 제공한다.

chsh -s $(which zsh)

터미널을 종료하고 재접속하면 zsh가 기본 쉘이 된다.

Oh My Zsh

zsh 설정을 쉽게 관리하려면 Oh My Zsh가 필요하다. 수백 개의 플러그인과 테마를 제공해서 생산성이 크게 올라간다.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Zsh 플러그인

Oh My Zsh를 설치했으니 필수 플러그인 두 개를 추가한다. syntax-highlighting은 명령어를 입력할 때 실시간으로 문법을 체크해준다. 잘못된 명령어는 빨간색으로 표시되어서 실수를 줄일 수 있다.

autosuggestions는 이전에 입력했던 명령어를 자동으로 제안한다. 몇 글자만 입력하면 전체 명령어를 회색으로 보여주고, 오른쪽 화살표로 바로 완성할 수 있다.

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

플러그인을 설치한 후에는 활성화해야 한다. ~/.zshrc 파일을 열어서 plugins 항목을 찾아 다음과 같이 수정한다:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Homebrew

Homebrew는 원래 macOS용인데 Linux에서도 쓸 수 있다. brew 명령어로 Python, Node.js 같은 개발 도구를 쉽게 설치하고 관리할 수 있다. apt보다 최신 버전을 제공하고, 여러 버전을 동시에 관리하기도 편하다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Homebrew가 설치되면 이제부터 brew로 대부분의 도구를 설치한다.

Powerlevel10k

터미널 테마를 바꿔서 더 보기 좋고 정보가 많은 프롬프트를 만든다. Powerlevel10k는 git 상태, 실행 시간, 에러 코드를 한눈에 보여준다.

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

테마를 설치한 후 ~/.zshrc에서 테마를 변경한다:

ZSH_THEME="powerlevel10k/powerlevel10k"

터미널을 재시작하면 설정 마법사가 실행된다. 화살표로 스타일을 선택하면 된다.

폰트 설치

Powerlevel10k의 아이콘이 제대로 보이려면 전용 폰트가 필요하다. MesloLGS NF 다운로드 링크에서 4개 파일을 모두 다운로드한다.

각 파일을 더블클릭해서 설치한 후, VSCode와 Windows 터미널의 폰트를 'MesloLGS NF'로 변경한다.

Python (pyenv)

Python 버전 관리를 위해 pyenv를 사용한다. 시스템 Python을 건드리지 않고 프로젝트마다 다른 버전을 쓸 수 있다.

프로젝트 A는 3.12, 프로젝트 B는 3.13을 쓰는 상황을 생각해보자. pyenv 없이는 매번 수동으로 전환해야 하지만, pyenv는 디렉토리별로 자동 전환해준다.

brew install pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

source ~/.zshrc

pyenv install 3.13.1
pyenv global 3.13.1

echo 'alias python=python3' >> ~/.zshrc
source ~/.zshrc

Python 가상환경 사용법

프로젝트마다 독립적인 패키지 환경을 만들 수 있다. 가상환경을 만들고, 활성화하고, 작업이 끝나면 비활성화한다.

# 생성
python -m venv ./env

# 활성화
source env/bin/activate

# 비활성화
deactivate

Node.js

JavaScript 개발을 위해 Node.js를 설치한다. 기본 버전은 brew로 바로 설치할 수 있다.

brew install node

하지만 여러 버전을 관리하려면 nvm이 더 편하다.

NVM

nvm은 Node.js 버전 관리자다. pyenv와 비슷하게 프로젝트마다 다른 Node.js 버전을 사용할 수 있다. 레거시 프로젝트는 14 버전, 새 프로젝트는 20 버전을 쓰는 식으로 자유롭게 전환할 수 있다.

brew install nvm

mkdir -p ~/.nvm
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh" ] && \. "/home/linuxbrew/.linuxbrew/opt/nvm/nvm.sh"' >> ~/.zshrc

source ~/.zshrc

nvm install --lts
nvm use --lts

Git 설정

Git을 사용하기 전에 사용자 정보를 설정한다. 커밋할 때 이 정보가 기록된다.

git config --global user.name "Your Name"
git config --global user.email "your@email.com"
git config --global core.editor vim

Git 편의 alias

자주 쓰는 명령어를 짧게 줄인다. git status 대신 git st, git commit -m 대신 git cm으로 쓸 수 있다.

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm 'commit -m'

GitHub CLI

GitHub를 터미널에서 바로 사용할 수 있다. PR 만들기, 이슈 확인, 저장소 클론까지 모두 gh 명령어로 할 수 있다.

brew install gh
gh auth login

로그인하면 브라우저가 열리고 인증 과정을 진행한다.

Vim 설정

터미널에서 파일을 편집할 때 vim을 사용한다. 기본 설정을 개선해서 더 편하게 만든다. 줄 번호, 문법 강조, 자동 들여쓰기 같은 기능을 추가한다.

mkdir -p ~/.vim/colors
curl -o ~/.vim/colors/jellybeans.vim https://raw.githubusercontent.com/nanotech/jellybeans.vim/master/colors/jellybeans.vim

cat > ~/.vimrc << 'EOF'
set hlsearch
set nu
set autoindent
set scrolloff=2
set wildmode=longest,list
set ts=4
set sts=4
set sw=4
set autowrite
set autoread
set cindent
set bs=eol,start,indent
set history=256
set laststatus=2
set shiftwidth=4
set showmatch
set smartcase
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
set ruler
set incsearch

au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif

if has("syntax")
  syntax on
endif

colorscheme jellybeans
EOF

터미널 색상

디렉토리 색상을 개선해서 가독성을 높인다. 기본 설정은 일부 폴더가 어두워서 보기 어렵다.

echo 'export LS_COLORS="ow=01;36;40"' >> ~/.zshrc
source ~/.zshrc

PostgreSQL (선택)

데이터베이스가 필요한 프로젝트를 위해 PostgreSQL을 설치할 수 있다. 백그라운드 서비스로 실행되고, createdb 명령어로 데이터베이스를 만든다.

brew install postgresql@14
brew services start postgresql@14

echo 'export PATH="/home/linuxbrew/.linuxbrew/opt/postgresql@14/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

createdb mydb
psql mydb

VSCode 확장

WSL에서 개발하려면 Remote - WSL 확장이 필수다. VSCode가 WSL 내부에서 직접 실행되어서 파일 접근이 빠르고 터미널 통합도 완벽하다.

ESLint와 Prettier는 코드 품질 관리에 필요하다. ESLint가 문법 오류를 잡아주고, Prettier가 코드 포맷을 자동으로 맞춰준다.

필수:

  • Remote - WSL
  • ESLint
  • Prettier

선택:

  • GitLens (git 히스토리)
  • Python (자동완성, 디버깅)
  • Docker
  • GitHub Copilot

설치 확인

모든 도구가 제대로 설치되었는지 확인한다. 각 명령어는 설치된 버전을 출력한다.

zsh --version
brew --version
python --version
node --version
npm --version
git --version
gh --version

MSYS2용 스크립트

WSL 대신 MSYS2를 사용하는 경우 이 스크립트를 사용한다. pacman 패키지 관리자를 사용하고 일부 설정이 다르다.

# 기본 패키지
pacman -Syu --noconfirm
pacman -S --noconfirm base-devel mingw-w64-ucrt-x86_64-toolchain
pacman -S --noconfirm zsh git vim gcc

# Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended

# 플러그인
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# Vim
mkdir -p ~/.vim/colors
curl -o ~/.vim/colors/jellybeans.vim https://raw.githubusercontent.com/nanotech/jellybeans.vim/master/colors/jellybeans.vim

cat > ~/.vimrc << 'EOF'
set hlsearch
set nu
set autoindent
set scrolloff=2
set ts=4
set sw=4
set smartindent
set ruler
syntax on
colorscheme jellybeans
EOF

# Git
git config --global core.editor vim
profile
치킨강정

0개의 댓글