서버 디스크 용량 부족 시 즉시 확인해야 할 6가지
서버 디스크 용량 부족 알림은 언제나 가장 예상치 못한 순간에 찾아옵니다. 특히 트래픽이 몰리는 시간대나, 새벽에 알람이 울리면 심장이 덜컥 내려앉죠. 저 또한 과거에 이 문제로 인해 긴급 새벽 배포를 진행한 쓰라린 경험이 있습니다. 하지만 이런 긴급 상황에서 무작정 파일을 지우는 것은 또 다른 장애를 초래할 수 있습니다.
제가 이 글을 통해 알려드릴 내용은 '즉시 확인해야 할 경로'를 위험도가 낮은 순서로 정리한 체크리스트입니다. 지금 바로 조치하여 서버를 안정화시키고, 나아가 2주 후 재발을 막는 근본적인 설정 변경법까지 순서대로 진행해 봅시다.
1. 서버 디스크 용량 부족, 왜 발생했을까? (근본 원인 분석)
제가 경험한 대부분의 서버 장애는 세 가지 원인 중 하나였습니다. 가장 먼저 df -h 또는 윈도우의 '디스크 관리'를 통해 어떤 파티션이 부족한지 확인하는 것이 첫 단계입니다.
- 자동화된 로그 로테이션 설정 오류: 로그 파일은 매일 생성되지만, 오래된 파일을 지우는 로직(logrotate 등)이 작동하지 않아 쌓이는 경우입니다.
- 캐시 및 임시 파일 폭주: 특정 서비스 업데이트나 급격한 트래픽 증가 시, 불필요한 세션 파일이나 캐시 데이터가 비정상적으로 커집니다.
- 예상치 못한 백업 파일 생성: 개발자가 테스트용으로 백업 스크립트를 실행했으나, 스케줄러를 해제하는 것을 잊어 매 시간 전체 DB 백업이 진행된 경우도 있었습니다.
2. 1차 조치: 긴급 확보를 위한 임시 파일/캐시 경로 확인
서버 안정화를 위해 가장 먼저, 그리고 가장 안전하게 용량을 확보할 수 있는 경로는 임시(Temp) 디렉터리입니다. 긴급 조치 시에는 find [경로] -type f -atime +7 -delete 명령어를 활용해 7일 이상 접근하지 않은 파일을 정리하는 것을 권장합니다.
- 리눅스: /tmp 및 /var/tmp 경로의 파일을 확인합니다. 이 파일들은 보통 단기적으로 사용되는 파일이므로, 현재 사용되지 않는 오래된 파일은 삭제해도 상대적으로 안전합니다.
- 윈도우: C:\Windows\Temp 경로와 사용자별 AppData의 Temp 폴더를 점검합니다.
- 애플리케이션 임시 폴더: Nginx, Apache, PHP 등 웹 서버의 캐시나 세션 파일을 저장하는 특정 경로(예: /var/cache/nginx)를 확인하여 비정상적으로 커진 파일을 제거합니다.
3. 2주 후 용량 부족 재발 방지: 로그 파일 관리 설정 점검
긴급 상황을 넘겼다면, 2주 뒤 새벽에 같은 알람을 받지 않기 위해 로그 파일 관리를 점검해야 합니다. 제 경험상, 대부분의 서버는 이곳에서 용량 문제가 재발합니다.
- Logrotate 설정 확인 (리눅스): /etc/logrotate.d/ 경로에서 주요 서비스의 설정 파일이 정상적으로 작동하는지 확인합니다. rotate 횟수와 압축(compress) 옵션이 활성화되어 있어야 합니다.
- 애플리케이션 자체 로그 설정: Java의 Logback이나 Python의 logging 라이브러리 설정에서 'Rolling File' 기능이 활성화되어 있고, 보관 기간이 적절하게 설정되었는지 검토합니다.
- 대용량 에러 로그 경로 정리: /var/log/messages 또는 애플리케이션의 error.log 파일이 비정상적으로 커졌다면, 즉시 로그 레벨(Level)을 조정하여 불필요한 디버그 메시지 기록을 중단해야 합니다.
4. 고급 확인: 데이터베이스 및 백업 파일 경로 분석
이 단계는 용량 확보 효과가 가장 크지만, 작업 전에는 반드시 이중으로 안전을 확인해야 합니다.
- 데이터베이스 이진 로그 (Binary Logs): MySQL의 경우, binlog 파일이 설정한 보관 기한을 넘어 계속 쌓여 디스크를 잠식하는 경우가 많습니다. 'expire_logs_days' 설정을 확인하거나, 필요 시 'PURGE BINARY LOGS' 명령어로 수동 정리합니다.
- 백업 스토리지 경로: 백업 파일은 스크립트 오류로 인해 메인 디스크 경로(/root 또는 /home)에 중복으로 쌓이고 있을 수 있습니다. 주기적인 백업 파일의 타임스탬프와 용량을 확인하여 불필요한 파일을 제거합니다.
5. 리눅스/윈도우 공통: 디스크 사용량 시각화 도구 활용
단순히 'du -sh *' 명령어로 용량을 확인하는 것보다, 시각화 도구를 사용하면 어떤 디렉터리가 비정상적으로 커졌는지 직관적으로 파악할 수 있습니다.
- 리눅스: ncdu (NCurses Disk Usage) 도구를 설치하고 실행하면, 폴더별 용량을 계층적으로 보며 탐색할 수 있어 매우 유용합니다.
- 윈도우: TreeSize Free나 WinDirStat 같은 프로그램을 사용하면 트리맵 형태로 용량 분포를 한눈에 파악할 수 있습니다.
시각화 도구는 '내가 알지 못했던 경로'에 숨어 있는 대용량 파일을 찾는 데 결정적인 역할을 합니다.
6. 3가지 변화: 안정적인 서버 운영을 위한 장기 전략
저는 새벽 배포의 쓰라린 경험 후, 서버 운영에 세 가지 구체적인 변화를 주었습니다.
- 첫 번째 변화: 임계치 알림을 2단계로 설정했습니다. 기존 90% 알림 외에 70% 도달 시 '관심 필요' 알림을 추가하여 사전 대응 시간을 확보했습니다.
- 두 번째 변화: 모든 로그 파일 로테이션 설정을 '4주 보관 및 압축'으로 표준화하고, 주간 단위로 설정 파일의 유효성을 점검하는 체크리스트를 만들었습니다.
- 세 번째 변화: 모든 데이터베이스 백업 파일을 즉시 S3나 Swift Stack과 같은 외부 스토리지로 전송하도록 스크립트를 변경하여, 내부 디스크의 부담을 원천적으로 제거했습니다.
이러한 변화 덕분에 지난 1년 동안 새벽 3시의 경고 알람은 한 번도 울리지 않았습니다.