서버 운영
로컬에선 작동하는데 서버에서만 터질 때
애플리케이션 버전 차이로 로컬과 운영 환경에서 다르게 작동할 때 확인하는 순서.
"로컬에선 문제가 없는데 서버에서만 계속 오류가 난다"는 상황은 개발할 때 가장 답답한 경우 중 하나다. 이런 문제는 보통 환경 차이 때문인데, 디스크, 권한, 프로세스 포트 등 여러 원인이 있을 수 있다. 어디부터 확인해야 하는지 체계적으로 정리했다.
서버 상태 확인
가장 먼저 서버의 기본 상태를 파악한다.
sudo ss -lntp
df -h
sudo journalctl -n 80
ss -lntp: 현재 리스닝 중인 포트와 프로세스 확인df -h: 디스크 용량 (특히 root 파티션이 가득 찬 경우가 많음)journalctl: 최근 시스템 로그 확인
디스크 용량이 부족하면 애플리케이션이 로그를 쓸 수 없거나 메모리를 할당할 수 없어서 예상 못한 오류가 난다.
권한 확인
애플리케이션 프로세스가 필요한 파일이나 디렉토리에 접근 권한이 있는지 확인한다.
ls -la /path/to/app
특히 로그 디렉토리, 업로드 디렉토리, 데이터베이스 파일 등의 권한이 맞는지 체크한다. 로컬에서는 root로 실행해도 상관없지만, 서버에서는 애플리케이션 유저가 접근할 수 있는 권한이 있어야 한다.
환경 변수 확인
서버에 배포된 .env 파일이 로컬과 다를 수 있다.
- API 엔드포인트
- 데이터베이스 연결 문자열
- 외부 서비스 토큰
이런 설정 중 하나라도 빠지거나 잘못되면, 로컬에서 테스트한 것과 완전히 다른 결과가 나온다.
프로세스와 포트
같은 포트를 사용하는 다른 프로세스가 있는지 확인한다. 또는 애플리케이션이 실제로 실행 중인지 확인한다.
sudo ps aux | grep <app-name>
최종 확인
- 서버에서 같은 오류가 반복되는지 확인
- 로그에서 구체적인 오류 메시지 찾기
- 공개 URL이나 실제 화면에서 문제가 해결되었는지 테스트
문제를 찾았으면, 그 원인이 앞으로도 반복되지 않도록 자동화나 모니터링을 설정해두는 것이 좋다.