본문 바로가기
IT

[리눅스 기초 #40] 서버의 '무한 증식'을 막아라: logrotate로 로그 다이어트와 용량 확보하기

by sunyjiny 2026. 2. 10.
반응형

리눅스 기초 시리즈의 드디어 40번째 시간입니다! 지난 시간에는 Certbot을 이용해 우리 서버에 보안의 옷(HTTPS)을 입혀주었습니다. 이제 서비스는 안전하고, 모니터링 체계도 갖췄으니 모든 게 완벽해 보입니다. 하지만 여러분의 서버 안에서는 지금 이 순간에도 '조용한 암살자'가 몸집을 불리고 있습니다.

그 정체는 바로 로그(Log) 파일입니다. 서비스가 활발해질수록 로그는 기하급수적으로 쌓이고, 어느 날 갑자기 서버 용량을 가득 채워 시스템을 멈춰 세우기도 하죠. 오늘은 리눅스 서버 운영의 화룡점정이자 디스크 관리의 핵심 도구인 logrotate 활용기를 정리해 보겠습니다.


1. 나의 경험담: "새벽 2시의 비명, 용량 0%의 공포"

몇 달 전, 제 개인 블로그 sunyjini.com 서버가 갑자기 응답을 멈췄습니다. SSH 접속조차 되지 않아 강제 재부팅을 하고 원인을 파악해 보니, 범인은 다름 아닌 Nginx의 access.log 파일이었습니다. 수 기가바이트(GB)에 달하는 텍스트 파일이 디스크의 마지막 1KB까지 갉아먹고 있었던 것이죠.

로그는 문제가 생겼을 때 우리를 도와주는 고마운 존재지만, 적절히 관리하지 않으면 리눅스 시스템 전체를 무너뜨리는 흉기가 됩니다. 이때 저를 구원해 준 것이 바로 logrotate였습니다. 이 도구를 설정한 이후로는 로그가 알아서 쪼개지고, 압축되고, 오래된 것은 삭제되어 더 이상 '용량 부족' 메시지를 볼 일이 없게 되었습니다. 진정한 자동화의 위력을 실감한 순간이었죠.


2. Before: "비대해진 로그와의 끝없는 사투"

로그 순환 설정을 하기 전에는 관리자가 직접 로그 파일을 비우거나 백업해야 했습니다. 파일 하나가 10GB를 넘어가면 cat이나 vim으로 열기조차 불가능해져 디버깅 자체가 고문이 됩니다.

문제점 확인 코드:

Terminal
# 현재 가장 큰 로그 파일 TOP 5 찾기 sudo du -h /var/log | sort -hr | head -n 5

결과가 GB 단위라면 이미 위험 신호입니다!

(▲ Before: 로그 관리가 안 된 서버는 마치 쓰레기통을 비우지 않은 방과 같습니다. 나중에는 쓰레기(로그) 때문에 발 디딜 틈(디스크 공간)이 없어지죠.)


3. Action: logrotate로 자동 다이어트 설정하기

이제 나만의 서비스(예: Flutter API 서버)를 위한 logrotate 규칙을 만들어 보겠습니다. 리눅스는 보통 /etc/logrotate.d/ 폴더에 설정 파일을 넣어두면 알아서 실행합니다.

로그 순환 설정 코드 (/etc/logrotate.d/my-app):

Logrotate Config
/home/user/app/logs/*.log { daily # 매일 순환 rotate 7 # 최대 7개까지만 보관 (일주일치) compress # 지난 로그는 압축해서 용량 절약 delaycompress # 최근 1개는 압축하지 않음 (읽기 편하게) missingok # 파일 없어도 에러 무시 notifempty # 파일 내용 없으면 순환 안 함 create 0640 user user # 새 로그 파일 권한 설정 } 

(▲ Action: 이렇게 설정해 두면 리눅스가 매일 새벽, 비대해진 로그를 '오늘치'와 '어제치'로 나누고, 오래된 것들은 착실하게 압축해 줍니다. 디스크 공간은 항상 일정하게 유지되죠.)


4. After: 쾌적하고 예측 가능한 서버 환경

logrotate를 적용한 뒤 제 서버 환경은 놀라울 정도로 정갈해졌습니다. 이제 어떤 파일이 언제 생성되었는지 한눈에 알 수 있고, 대용량 로그 검색도 훨씬 수월해졌습니다.

달라진 점들:

  • 디스크 용량 고정: 로그가 무한대로 커지지 않으므로 '갑작스러운 서버 다운' 위험이 사라졌습니다.
  • 효율적인 분석: 날짜별로 쪼개진 로그 덕분에 특정 시점의 에러를 찾는 속도가 비약적으로 빨라졌습니다.
  • 백업 용이성: 압축된(.gz) 로그 파일은 용량이 매우 작아 클라우드 스토리지로 옮기기에도 최적입니다.

5. 실험 요약 및 핵심 옵션

옵션 의미 비유
daily / weekly 로그를 쪼개는 주기 달력 넘기기
rotate 7 유지할 파일의 개수 오래된 서류 파쇄하기
compress 백업된 로그 압축 여부 서류 묶어서 압축팩에 넣기
size 100M 특정 용량 초과 시 즉시 순환 컵이 넘치기 전에 비우기

6. 마치며: 최신 엔진으로 달릴 준비가 되었나요?

리눅스 기초 40단계를 거치며 우리는 이제 시스템을 구축하고, 지키고, 감시하고, 이제는 스스로 정화하는(Cleaning) 방법까지 터득했습니다. 좋은 서버 관리자는 사고가 났을 때 잘 해결하는 사람이 아니라, 사고가 날 여지를 미리 없애는 사람입니다. logrotate는 바로 그 '무사고'를 가능하게 하는 성실한 비서입니다.

오늘의 인사이트: "시스템이 남긴 흔적(로그)이 시스템을 죽이지 않도록 길을 터주어라."


40번째 이야기를 끝으로 이번 리눅스 기초 시리즈의 핵심 챕터를 마무리합니다. 이제 여러분은 단순한 사용자를 넘어, 한 대의 리눅스 서버를 완벽하게 통제할 수 있는 주니어 시스템 엔지니어의 발판을 마련하셨습니다.

이 시리즈가 여러분의 개발 인생에 든든한 무기가 되었나요? 혹시 logrotate 설정 후 제대로 작동하는지 미리 테스트해보고 싶으신가요?

실제 파일을 건드리지 않고 시뮬레이션만 해보는 '디버그 모드(logrotate -d)' 활용법을 다음 부록 포스팅으로 준비해 드릴까요? 여러분의 성장을 항상 응원합니다!

반응형