개발자를 위한 Linux 서버 기초 2026 — SSH부터 배포까지 실무 가이드
프론트엔드·백엔드 개발자 모두 알아야 할 Linux 서버 기본 명령어와 운영 지식을 정리했습니다. SSH 접속, 파일 권한, PM2 배포, Nginx 설정, 트러블슈팅까지 실무에서 바로 쓰는 내용만 담았습니다.
왜 개발자가 Linux를 알아야 하는가
대부분의 서버는 Linux에서 돌아갑니다. AWS EC2, GCP, 사내 서버 모두 Linux 기반이죠. 배포, 디버깅, 로그 확인 등 실무에서 Linux 명령어를 모르면 막히는 순간이 반드시 옵니다.
SSH 접속
서버에 접속하는 가장 기본적인 방법입니다.
# 기본 접속
ssh username@서버IP
# 키 파일로 접속 (AWS 등)
ssh -i ~/.ssh/my-key.pem ubuntu@123.456.789.0
# 포트 지정
ssh -p 2222 username@서버IP
SSH 설정 파일로 편하게 접속
# ~/.ssh/config
Host my-server
HostName 123.456.789.0
User ubuntu
IdentityFile ~/.ssh/my-key.pem
Port 22
설정 후에는 ssh my-server만 입력하면 됩니다.
파일 시스템 기본
자주 쓰는 명령어
# 현재 위치 확인
pwd
# 파일 목록 (상세 정보 포함)
ls -la
# 디렉토리 이동
cd /var/www/app
# 파일 내용 보기
cat config.json # 전체 출력
head -20 app.log # 처음 20줄
tail -50 app.log # 마지막 50줄
tail -f app.log # 실시간 로그 추적
# 파일 찾기
find /var/www -name "*.log"
# 텍스트 검색
grep "error" app.log
grep -r "TODO" ./src/ # 하위 디렉토리 포함
파일 권한 이해
# ls -la 출력 예시
-rwxr-xr-- 1 ubuntu ubuntu 1234 Apr 5 12:00 script.sh
| 위치 | 의미 |
|---|---|
| rwx | 소유자: 읽기/쓰기/실행 |
| r-x | 그룹: 읽기/실행 |
| r-- | 기타: 읽기만 |
# 권한 변경
chmod 755 script.sh # rwxr-xr-x
chmod +x deploy.sh # 실행 권한 추가
프로세스 관리
# 실행 중인 프로세스 확인
ps aux | grep node
# 포트 사용 중인 프로세스 확인
lsof -i :3000
netstat -tlnp | grep 3000
# 프로세스 종료
kill 12345 # 정상 종료 (SIGTERM)
kill -9 12345 # 강제 종료 (SIGKILL)
# 리소스 모니터링
top # CPU/메모리 사용량
htop # 더 보기 좋은 버전 (설치 필요)
df -h # 디스크 용량
free -h # 메모리 사용량
서비스 관리 (systemd)
대부분의 현대 Linux 배포판은 systemd를 사용합니다.
# 서비스 상태 확인
sudo systemctl status nginx
# 서비스 시작/중지/재시작
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 부팅 시 자동 시작
sudo systemctl enable nginx
# 로그 확인
sudo journalctl -u nginx -f # 실시간 로그
sudo journalctl -u nginx --since "1 hour ago"
네트워크 기본
# 네트워크 인터페이스 확인
ip addr
# 포트 열림 확인
curl -I http://localhost:3000
# DNS 조회
nslookup example.com
dig example.com
# 방화벽 (UFW)
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
실전: Node.js 앱 배포 흐름
# 1. 서버 접속
ssh my-server
# 2. 코드 가져오기
cd /var/www
git clone https://github.com/user/app.git
cd app
# 3. 의존성 설치
npm install --production
# 4. 환경변수 설정
cp .env.example .env
nano .env
# 5. PM2로 프로세스 관리
npm install -g pm2
pm2 start npm --name "my-app" -- start
pm2 save
pm2 startup # 부팅 시 자동 시작
# 6. Nginx 리버스 프록시 설정
sudo nano /etc/nginx/sites-available/my-app
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
자주 겪는 트러블슈팅
"Permission denied"
# 파일 권한 확인
ls -la 문제파일
# 소유자 변경
sudo chown ubuntu:ubuntu 문제파일
"Address already in use"
# 해당 포트 사용 프로세스 찾기
lsof -i :3000
# 프로세스 종료
kill -9 프로세스ID
디스크 용량 부족
# 큰 파일/디렉토리 찾기
du -sh /* | sort -rh | head -10
# 로그 파일 정리
sudo journalctl --vacuum-size=100M
알아두면 좋은 팁
tmux사용: SSH 연결이 끊겨도 작업이 유지됩니다alias등록: 자주 쓰는 긴 명령어를 단축어로 등록crontab: 정기 작업 스케줄링 (로그 정리, 백업 등)scp/rsync: 로컬 ↔ 서버 간 파일 전송
# 로컬 → 서버 파일 전송
scp ./build.zip my-server:/var/www/
# 서버 → 로컬 파일 가져오기
scp my-server:/var/log/app.log ./
Nginx 리버스 프록시 설정
Node.js 앱 앞에 Nginx를 두는 것이 표준 패턴입니다.
# /etc/nginx/sites-available/my-app
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
# 설정 활성화
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
sudo nginx -t # 설정 문법 검증
sudo systemctl reload nginx
SSL (HTTPS) 설정 — Let's Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
# 자동으로 Nginx 설정에 SSL 추가 + 90일마다 자동 갱신
tmux — SSH 연결이 끊겨도 작업 유지
# 세션 생성
tmux new -s deploy
# 세션 분리 (연결 끊겨도 작업 유지)
Ctrl+B, D
# 세션 재연결
tmux attach -t deploy
# 세션 목록
tmux ls
실무 치트시트
# 빠른 서버 상태 확인
uptime # 서버 가동 시간, 부하
free -h # 메모리 사용량
df -h # 디스크 사용량
top -bn1 | head -20 # CPU 사용량 스냅샷
# 앱 로그 실시간 확인
tail -f /var/log/nginx/access.log # Nginx 접근 로그
pm2 logs my-app --lines 100 # PM2 앱 로그
sudo journalctl -u my-service -f # systemd 서비스 로그
# 빠른 파일 편집
nano .env # 간단한 편집
vim /etc/nginx/nginx.conf # 고급 편집 (i:입력모드, Esc, :wq:저장종료)
서버를 두려워할 필요 없습니다. 위 명령어의 80%만 익혀도 실무에서 막히는 일이 크게 줄어듭니다.
관련 글: Docker 입문 완전 가이드 · GitHub Actions CI/CD 설정법 · Vercel 무료 배포 완전 가이드
관련 글
AWS 비용 최적화 완전 가이드 2026 — EC2, S3, RDS 비용 절감 실전
AWS 비용이 예상보다 많이 나오는 개발자를 위한 최적화 가이드. EC2 Reserved Instance vs Savings Plans, S3 스토리지 클래스, RDS 비용 절감, 무료 티어 한도, 비용 모니터링 설정까지 실전 방법을 정리했습니다.
Kubernetes 입문 2026 — 개발자가 알아야 할 쿠버네티스 핵심 개념과 실전
개발자를 위한 Kubernetes(쿠버네티스) 입문 가이드. Pod, Deployment, Service, Ingress 핵심 개념부터 kubectl 명령어, 로컬 개발 환경(minikube/kind), 실전 배포까지 정리했습니다.
GitHub Actions CI/CD 완전 가이드 2026 — Next.js 자동 배포 파이프라인 구축
GitHub Actions로 Next.js 프로젝트의 CI/CD 파이프라인을 구축하는 실전 가이드. lint·타입체크·빌드 자동화, Vercel 배포, 캐싱 전략, 시크릿 관리, 비용 최적화까지 정리했습니다.