앞선 Part 1에서 기본 개발 환경을 구축했다면, 이제 실제 개발에 필요한 프로그래밍 언어들을 설정할 차례입니다. 2025년 현재, 풀스택 개발자가 가장 많이 사용하는 언어는 JavaScript(Node.js), Python, 그리고 Go입니다.
각 언어마다 최적의 버전 관리 도구와 패키지 관리자가 있으며, M3/M4 맥북의 ARM 아키텍처에 최적화된 설정 방법을 소개합니다.
fnm(Fast Node Manager)은 기존 nvm보다 훨씬 빠른 Node.js 버전 관리자입니다.
# fnm 설치
brew install fnm
# fnm 초기화 (zshrc에 추가)
echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc
source ~/.zshrc
# 최신 LTS 버전 설치
fnm install --lts
fnm use lts-latest
# 개발용 최신 버전 설치
fnm install latest
fnm alias latest default
# 버전 목록 확인
fnm list
# 전역 패키지 관리자
npm install -g yarn pnpm bun
# 유용한 CLI 도구들
npm install -g \
typescript \
tsx \
eslint \
prettier \
pm2 \
serve \
http-server \
json-server \
nodemon \
@nestjs/cli \
create-react-app \
next
# 프로젝트 디렉토리에서
fnm install 18.19.0
echo "18.19.0" > .nvmrc # 또는 .node-version
# 자동 버전 전환 설정 확인
cd /your/project
fnm use # .nvmrc 파일을 자동으로 읽어서 버전 적용
uv는 Astral에서 개발한 차세대 Python 패키지 관리자로, pip, virtualenv, pyenv를 모두 대체합니다.
# uv 설치
brew install uv
# Python 최신 버전 설치
uv python install 3.12
# 프로젝트 생성 및 가상환경 설정
mkdir my-python-project
cd my-python-project
# uv로 프로젝트 초기화
uv init --python 3.12
uv venv
# 패키지 설치
uv pip install fastapi uvicorn sqlalchemy pydantic pytest black mypy
# 개발 의존성 따로 관리
uv pip install --dev pytest-cov ruff
# pyproject.toml 파일 생성
cat > pyproject.toml << EOF
[project]
name = “my-project” version = “0.1.0” description = “” authors = [“Your Name <your.email@example.com>”] dependencies = [ “fastapi>=0.100.0”, “uvicorn>=0.24.0”, “sqlalchemy>=2.0.0”, ]
[tool.uv]
dev-dependencies = [ “pytest>=7.4.0”, “black>=23.0.0”, “mypy>=1.5.0”, “ruff>=0.0.290”, ]
[tool.black]
line-length = 88 target-version = [‘py312’]
[tool.ruff]
select = [“E”, “F”, “W”, “I”, “N”] ignore = [] line-length = 88 EOF # 의존성 설치 uv sync
# Jupyter 관련 패키지 설치
uv pip install jupyter jupyterlab notebook ipykernel
# 데이터 분석 라이브러리
uv pip install pandas numpy matplotlib seaborn plotly
# 머신러닝/딥러닝 (M3/M4 최적화)
uv pip install torch torchvision scikit-learn
# Jupyter 커널 등록
uv run python -m ipykernel install --user --name myproject
# Go 설치
brew install go
# Go 환경 변수 설정
echo 'export GOPATH=$HOME/go' >> ~/.zshrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.zshrc
echo 'export GO111MODULE=on' >> ~/.zshrc
source ~/.zshrc
# Go 버전 확인
go version
# Go 모듈 프록시 설정 (한국 최적화)
go env -w GOPROXY=https://proxy.golang.org,direct
go env -w GOSUMDB=sum.golang.org
# 유용한 Go 도구들
go install golang.org/x/tools/cmd/goimports@latest
go install golang.org/x/tools/cmd/godoc@latest
go install golang.org/x/tools/gopls@latest
go install github.com/go-delve/delve/cmd/dlv@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
go install github.com/cosmtrek/air@latest # 핫 리로딩
# 프로젝트 초기화
mkdir my-go-project
cd my-go-project
go mod init github.com/yourusername/my-go-project
# 표준 Go 프로젝트 구조 생성
mkdir -p cmd pkg internal api configs scripts
# main.go 생성
cat > cmd/main.go << 'EOF'
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from Go!")
})
log.Println("Server starting on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
EOF
# Makefile 생성
cat > Makefile << 'EOF'
.PHONY: build run test clean
build:
go build -o bin/app cmd/main.go
run:
air -c .air.toml
test:
go test ./...
clean:
rm -rf bin/
lint:
golangci-lint run
EOF
# 필수 확장들
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension golang.go
code --install-extension ms-python.python
code --install-extension ms-python.vscode-pylance
code --install-extension rust-lang.rust-analyzer
code --install-extension bradlc.vscode-tailwindcss
# 유용한 개발 확장들
code --install-extension eamodio.gitlens
code --install-extension streetsidesoftware.code-spell-checker
code --install-extension gruntfuggly.todo-tree
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-kubernetes-tools.vscode-kubernetes-tools
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.organizeImports": true,
"source.fixAll": true
},
"python.defaultInterpreterPath": "uv",
"python.terminal.activateEnvironment": false,
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "ms-python.python"
},
"[go]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "golang.go"
},
"go.useLanguageServer": true,
"go.formatTool": "goimports",
"typescript.updateImportsOnFileMove.enabled": "always",
"javascript.updateImportsOnFileMove.enabled": "always"
}
#!/bin/bash
# ~/scripts/create-project.sh
project_name=$1
project_type=$2
if [ -z "$project_name" ] || [ -z "$project_type" ]; then
echo "Usage: create-project.sh <project-name> <project-type>"
echo "Types: node, python, go, fullstack"
exit 1
fi
case $project_type in
"node")
mkdir -p $project_name/{src,test,scripts}
cd $project_name
fnm use lts-latest
npm init -y
npm install -D typescript @types/node tsx eslint prettier
;;
"python")
mkdir -p $project_name/{src,tests,scripts}
cd $project_name
uv init --python 3.12
uv venv
uv pip install black pytest mypy ruff
;;
"go")
mkdir -p $project_name/{cmd,pkg,internal,api}
cd $project_name
go mod init github.com/yourusername/$project_name
;;
"fullstack")
mkdir -p $project_name/{frontend,backend,docker}
cd $project_name
# Frontend setup
cd frontend && npx create-react-app . --template typescript
cd ../backend && uv init --python 3.12
;;
esac
# Common files
cat > .gitignore << EOF
.DS_Store
node_modules
.env
*.log
__pycache__
.venv
.mypy_cache
dist/
build/
EOF
git init
git add .
git commit -m "Initial commit"
echo "Project $project_name created successfully!"
# ~/.zshrc에 추가
function dev() {
if [ -f "package.json" ]; then
echo "Node.js project detected"
fnm use
npm install
fi
if [ -f "pyproject.toml" ]; then
echo "Python project detected"
uv sync
fi
if [ -f "go.mod" ]; then
echo "Go project detected"
go mod download
fi
if [ -f "docker-compose.yml" ]; then
echo "Docker Compose project detected"
docker-compose up -d
fi
}
# 프로젝트 디렉토리 진입시 자동 설정
function cd() {
builtin cd "$@"
dev
}
# Node.js 성능 최적화
export NODE_OPTIONS="--max-old-space-size=4096"
# Python 컴파일 최적화
export PYTHONPATH="${PYTHONPATH}:${PWD}"
export PYTHONDONTWRITEBYTECODE=1
# Go 빌드 최적화
export GOOS=darwin
export GOARCH=arm64
export CGO_ENABLED=1
# 프로젝트별 메모리 제한 설정
function node_limit() {
NODE_OPTIONS="--max-old-space-size=$1" "$@"
}
# 사용 예
node_limit 2048 npm start
# Python 메모리 최적화
export PYTHONMALLOC=malloc
# 개발 도구 메모리 최적화
export VSCODE_MEMORY_LIMIT=4096
2025년 풀스택 개발자가 주목해야 할 트렌드는 도구의 통합과 성능 최적화입니다. uv가 Python 생태계를 혁신하고 있듯이, 개발 효율성을 위한 도구들이 빠르게 진화하고 있습니다.
특히 ARM 아키텍처에 최적화된 도구 선택이 중요하며, 각 언어별로 네이티브 성능을 활용하는 설정이 필수가 되었습니다. fnm, uv, 그리고 최신 Go 도구체인은 이러한 트렌드를 반영한 선택입니다.
Part 3에서는 현대 풀스택 개발의 핵심인 컨테이너와 오케스트레이션 도구 설정을 다룹니다: