서버 운영
서버에서만 터질 때 로그 확인 순서
로컬에서는 잘 되는데 서버에서만 빌드가 실패한다면 포트, 권한, 디스크부터 확인하자. 환경 차이를 체계적으로 좁혀야 한다.
배포했는데 서버에서 빌드 중 에러가 난다. 로컬에서는 아무 문제 없는데. 이럴 때 대부분 세 가지가 원인이다: 포트 충돌, 권한 문제, 디스크 부족.
포트 충돌 확인
서버에서 특정 포트를 사용하려는데 이미 다른 프로세스가 쓰고 있을 수 있다:
sudo ss -lntp
-l: 리스닝 상태의 소켓만
-n: 도메인 이름 대신 숫자로 (포트 번호)
-t: TCP 소켓만
-p: 프로세스 정보 함께 표시
원하는 포트가 이미 사용 중이면 그 프로세스를 종료하거나 포트 번호를 바꿔야 한다.
디스크 상태 확인
빌드 중 디스크가 가득 찬 경우도 많다:
df -h
특히 /, /home, /var 파티션을 확인하자. 사용률이 90% 이상이면 정리해야 한다.
du -sh . 명령으로 현재 디렉토리의 크기를 보거나, du -sh /*로 루트 아래 각 디렉토리 크기를 비교해 뭐가 큰지 찾을 수 있다.
최근 에러 로그 보기
시스템 로그에서 최근 에러를 확인하자:
sudo journalctl -n 80
-n 80: 최근 80줄
-f: 실시간으로 따라가기
-u 서비스이름: 특정 서비스만 보기
Permission denied, Out of memory, Segmentation fault 같은 메시지가 있는지 확인하자.
권한 확인
배포 스크립트가 실행되는 사용자의 권한이 충분한지 확인:
ls -la /app # 배포 디렉토리 확인
whoami # 현재 사용자 확인
node_modules 디렉토리 생성, 파일 쓰기 같은 작업에 권한이 필요할 수 있다.
하나씩 제거하며 테스트
포트 → 디스크 → 권한 → 로그 순서로 각각 확인하고 한 번에 하나씩만 바꿔본다.
여러 개를 동시에 수정하면 뭐가 원인인지 알 수 없다. 예를 들어 디스크를 정리했는데 여전히 안 되면 권한이 문제일 가능성이 높다.
배운 점
로컬 개발 환경과 서버의 차이를 이해하는 것이 중요하다. 로컬에서는 sudo나 특별한 권한 없이 다 되지만, 서버에서는 프로세스 격리, 권한 제한, 리소스 한계 같은 요소가 있다.
작은 로그 메시지 하나가 다음 문제를 훨씬 빨리 해결할 수 있게 해준다.