서버 시작 시 bind: address already in use 또는 EADDRINUSE 오류가 뜨면 해당 포트를 다른 프로세스가 이미 점유 중입니다.
점유 프로세스 찾기
ss (권장 — 대부분 기본 설치)
# 특정 포트(예: 3000) 점유 확인
sudo ss -tlnp | grep :3000
# 출력 예
# LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=12345,fd=22))
# ↑ 프로세스명 ↑ PID# 모든 LISTEN 포트 + 프로세스 한번에 보기
sudo ss -tlnplsof
sudo lsof -i :3000
# 출력 예
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# node 12345 deploy 22u IPv4 123456 0t0 TCP *:3000 (LISTEN)fuser
sudo fuser 3000/tcp
# 출력: 3000/tcp: 12345 ← PID프로세스 확인 후 처리
# PID로 어떤 프로세스인지 확인
ps -p 12345 -o pid,ppid,user,comm,args
# 실행 경로 확인
ls -la /proc/12345/exe방법 1: 서비스로 관리 중인 경우
# 서비스명 확인
sudo systemctl status 12345 # PID로 찾기 어려울 때
# 또는
cat /proc/12345/comm # 프로세스 이름
# 서비스 재시작
sudo systemctl restart myapp
# 또는 완전 중지 후 재시작
sudo systemctl stop myapp
sudo systemctl start myapp방법 2: 좀비 프로세스 종료
# 정상 종료 (SIGTERM)
sudo kill 12345
# 3초 대기 후도 남아있으면 강제 종료
sleep 3 && sudo kill -9 12345
# 특정 이름의 프로세스 전체 종료
sudo pkill -f "node server.js"방법 3: 포트를 변경 (프로세스를 죽이지 않고)
# 앱 설정에서 포트 변경 예시 (Node.js)
# PORT=3001 node server.js
# 또는 환경변수 파일 수정
# .env: PORT=3001
# Nginx/Apache 설정 변경
sudo nano /etc/nginx/sites-available/mysite
# listen 3001; ← 변경 후 reload
sudo nginx -t && sudo systemctl reload nginxTIME_WAIT 상태로 포트가 점유된 경우
프로세스를 죽였는데도 포트가 열리지 않는 경우입니다.
# TIME_WAIT 상태 확인
sudo ss -tn | grep TIME-WAIT | grep :3000
# 대기 시간 확인 (기본 60초)
cat /proc/sys/net/ipv4/tcp_fin_timeout빠른 해결 — SO_REUSEADDR 옵션 사용 (앱 코드에서):
Node.js 예:
server.listen({ port: 3000, host: '0.0.0.0' }, () => {});
// server 옵션에 reuseAddr: true 추가 (net 모듈)빠른 해결 — 커널 TIME_WAIT 단축:
# 즉시 적용 (재부팅 후 초기화됨)
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
# 영구 적용
echo "net.ipv4.tcp_fin_timeout = 15" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p정리
| 상황 | 명령어 |
|---|---|
| 점유 프로세스 찾기 | `sudo ss -tlnp |
| PID로 프로세스 확인 | ps -p PID -o comm,args |
| 정상 종료 | sudo kill PID |
| 강제 종료 | sudo kill -9 PID |
| TIME_WAIT 대기 | sudo sysctl -w net.ipv4.tcp_fin_timeout=15 |
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.