테크·6 min read
개발자를 위한 Linux 서버 기초
프론트엔드/백엔드 개발자 모두 알아야 할 Linux 서버 기본 명령어와 운영 지식을 정리했습니다. SSH 접속부터 배포까지 실무에서 바로 쓰는 내용만 담았습니다.
왜 개발자가 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 ./
서버를 두려워할 필요 없습니다. 위 명령어의 80%만 익혀도 실무에서 막히는 일이 크게 줄어듭니다.