DevFinance
테크·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

알아두면 좋은 팁

  1. tmux 사용: SSH 연결이 끊겨도 작업이 유지됩니다
  2. alias 등록: 자주 쓰는 긴 명령어를 단축어로 등록
  3. crontab: 정기 작업 스케줄링 (로그 정리, 백업 등)
  4. scp/rsync: 로컬 ↔ 서버 간 파일 전송
# 로컬 → 서버 파일 전송
scp ./build.zip my-server:/var/www/

# 서버 → 로컬 파일 가져오기
scp my-server:/var/log/app.log ./

서버를 두려워할 필요 없습니다. 위 명령어의 80%만 익혀도 실무에서 막히는 일이 크게 줄어듭니다.