Windows에서 개발 환경을 구축하는 가장 효율적인 방법은 WSL2를 사용하는 것이다. Linux 환경을 네이티브에 가깝게 실행할 수 있고, Windows 파일 시스템과도 자유롭게 통합된다.
복사-붙여넣기로 바로 실행할 수 있는 스크립트를 모았다.
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를 실행하면 만든 사용자로 로그인된다.
기본 패키지와 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단계 스크립트를 실행하세요."
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
이제 쉘 환경을 개선할 차례다.
bash 대신 zsh를 기본 쉘로 사용한다. zsh는 더 강력한 자동완성과 플러그인 시스템을 제공한다.
chsh -s $(which zsh)
터미널을 종료하고 재접속하면 zsh가 기본 쉘이 된다.
zsh 설정을 쉽게 관리하려면 Oh My Zsh가 필요하다. 수백 개의 플러그인과 테마를 제공해서 생산성이 크게 올라간다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
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는 원래 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는 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을 건드리지 않고 프로젝트마다 다른 버전을 쓸 수 있다.
프로젝트 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 -m venv ./env
# 활성화
source env/bin/activate
# 비활성화
deactivate
JavaScript 개발을 위해 Node.js를 설치한다. 기본 버전은 brew로 바로 설치할 수 있다.
brew install node
하지만 여러 버전을 관리하려면 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 config --global user.name "Your Name"
git config --global user.email "your@email.com"
git config --global core.editor vim
자주 쓰는 명령어를 짧게 줄인다. 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를 터미널에서 바로 사용할 수 있다. PR 만들기, 이슈 확인, 저장소 클론까지 모두 gh 명령어로 할 수 있다.
brew install gh
gh auth login
로그인하면 브라우저가 열리고 인증 과정을 진행한다.
터미널에서 파일을 편집할 때 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을 설치할 수 있다. 백그라운드 서비스로 실행되고, 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
WSL에서 개발하려면 Remote - WSL 확장이 필수다. VSCode가 WSL 내부에서 직접 실행되어서 파일 접근이 빠르고 터미널 통합도 완벽하다.
ESLint와 Prettier는 코드 품질 관리에 필요하다. ESLint가 문법 오류를 잡아주고, Prettier가 코드 포맷을 자동으로 맞춰준다.
필수:
선택:
모든 도구가 제대로 설치되었는지 확인한다. 각 명령어는 설치된 버전을 출력한다.
zsh --version
brew --version
python --version
node --version
npm --version
git --version
gh --version
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