로그 파일 관리 때문에 고민이시군요.
정말 많은 분들이 공감하는, 하지만 생각보다 골치 아픈 문제예요.
저도 예전에 여러 테스트 환경이나 로컬 개발 환경에서 로그가 쌓이다가 디스크가 터지는 경험을 몇 번 했습니다.
특히 서비스가 여러 개 돌아가거나, 디버깅 과정에서 로그 레벨을 높게 잡고 테스트하다 보면 정말 순식간에 몇 GB씩 사라지더라고요.
말씀하신 것처럼 '복잡하지 않으면서' '지속 가능한' 관리가 핵심인 것 같습니다.
어떤 접근 방식이 가장 좋을지는 '로그의 중요도'와 '관리할 로그의 종류'에 따라 달라지는데, 제가 경험했던 방법들과 몇 가지 툴 사용 시나리오를 섞어서 말씀드릴게요.
--- ### 1.
가장 기본적이고 가벼운 접근: OS 네이티브 기능 활용 (스크립트 기반) 만약 지금 당장 외부 툴 설치가 부담스럽고, 간단하게 '크기 제한'이나 '기간 제한'만 걸고 싶다면, OS에서 제공하는 기본 기능을 활용하는 게 가장 가볍습니다.
A.
Linux/macOS 환경이라면: logrotate 사용 이게 사실 표준이고 가장 강력한 방법입니다.
운영체제 레벨에서 로그 관리를 해주기 때문에, 애플리케이션 코드나 별도의 스케줄러에 의존하지 않아도 된다는 장점이 있어요.
원리적으로 logrotate는 지정된 로그 파일을 주기적으로 처리해 줍니다.
예를 들어, 7일치 로그만 남기고 나머지는 압축해서 아카이브(tar.gz 등)하고, 그 아카이브도 일정 개수(예: 10개) 이상이 되면 가장 오래된 것부터 삭제하도록 설정할 수 있어요.
실무 팁: 로그 파일을 직접 수정하는 게 아니라, /etc/logrotate.d/ 같은 디렉토리에 설정 파일을 생성해서 넣는 방식입니다.
이게 가장 '설정'이 필요해 보이지만, 일단 세팅이 끝나면 가장 관리가 쉬운 구조가 됩니다.
왜냐하면 시스템 레벨에서 처리해주기 때문에, "오늘 스크립트 돌려야지" 하는 기억의 부담 자체가 사라지거든요.
️ 주의점: 설정 파일(.conf)의 문법을 알아야 합니다.
초보자 입장에서는 처음 접할 때 '어?
이걸 내가 직접 써야 돼?' 싶을 수 있어요.
하지만, 기본적인 daily, rotate N, size K 같은 키워드 몇 개만 익히면 되니, 이걸로 시작해보시는 걸 추천합니다.
B.
Windows 환경이라면: 작업 스케줄러 + 배치/파이썬 스크립트 Windows에서는 logrotate 같은 전용 툴이 없기 때문에, 작업 스케줄러(Task Scheduler)에 주기적으로 실행될 배치(.bat) 파일이나 파이썬 스크립트를 등록하는 게 일반적입니다.
스크립트 자체는 '파일 목록 가져오기 -> 크기 체크 -> 오래된 파일 삭제/압축' 로직만 담으면 돼요.
파이썬을 사용하면 os 모듈과 datetime 모듈만으로도 충분히 강력하게 구현 가능합니다.
초보자를 위한 추천 시나리오: 만약 개발 환경이고, 정말 '최소한의 노력'을 원하신다면, 일단 파이썬 스크립트를 작성해서 '현재 디렉토리의 로그 파일 중, 오늘 날짜가 아닌 것들'을 찾아 압축 후, 30일이 지난 파일은 삭제하는 방식으로 시작해보세요.
그리고 이 스크립트를 Windows 작업 스케줄러에 '매일 새벽 3시'에 실행하도록 등록만 해두면 됩니다.
이게 가장 직관적이고 제어하기 쉬운 시작점일 수 있습니다.
--- ### 2.
중앙 집중식 로깅 시스템 도입 (장기적 관점) 만약 지금 당장의 로컬 환경 문제가 아니라, "앞으로도 계속 여러 앱을 돌릴 예정이고, 로그 분석까지 고려한다"라는 관점이라면, 처음부터 로컬 파일 관리에 매달리기보다 중앙 로깅 시스템을 도입하는 게 궁극적으로 가장 효율적입니다.
이건 스크립트나 툴의 영역을 넘어서 아키텍처의 문제입니다.
추천 아키텍처: 애플리케이션(A, B, C) $\rightarrow$ 로깅 에이전트 (Filebeat, Fluentd 등) $\rightarrow$ 중앙 수집기 (Logstash 등) $\rightarrow$ 저장소 (Elasticsearch)
장점: 1.
관리 용이성: 로그가 로컬 디스크에 쌓이지 않고, 전문 데이터베이스에 쌓이므로 디스크 공간 걱정이 사라집니다.
2.
검색 용이성: "지난주에 X 앱에서 발생한 에러 코드 500 로그를 보여줘" 같은 쿼리가 1초 만에 나옵니다.
(이게 가장 체감되는 변화예요.) 3.
자동화: 전문 에이전트들이 로그 수집, 파싱, 전송을 알아서 해주기 때문에 유지보수 부담이 적습니다.
️ 언제 고려해야 할까요? * 현재 운영 중인 앱이 2개 이상이고, * 개발자/운영자가 로그를 보고 "이거 언제 일어났지?"를 자주 물어본다면.
이건 설정 난이도가 높기 때문에, 일단 로컬 파일 정리부터 안정화시킨 후에 점진적으로 고려하시는 걸 추천합니다.
--- ### 3.
파일 관리 시 유의사항 및 흔한 실수 어떤 방법을 쓰든, 다음 몇 가지는 꼭 염두에 두셔야 합니다.
1.
로그 레벨 관리의 중요성 (가장 중요): 로그가 커지는 주범은 '디버그(DEBUG)' 레벨 로그입니다.
개발 단계에서는 디버그 레벨로 상세하게 남기는 게 좋지만, 운영 환경에 배포할 때는 최소한 'INFO' 또는 'WARN' 레벨로 제한하는 게 필수입니다.
어떤 앱이 어떤 레벨로 로깅할지, 애플리케이션 코드 레벨에서 제어하는 것이 파일 관리의 첫 번째 방어선입니다.
2.
압축과 삭제의 순서: 단순히 오래된 파일을 지우는 것보다, '압축(Compress)' $\rightarrow$ '이동(Archive)' $\rightarrow$ '삭제(Delete)' 순서로 작업하는 것이 좋습니다.
- 압축: 디스크 공간을 가장 효율적으로 줄여줍니다.
(예: .tar.gz) * 이동: 원본 로그 디렉토리를 깨끗하게 유지하면서, 보관용으로 별도 영역에 둡니다.
- 삭제: 일정 기간(예: 6개월)이 지나면 완전히 삭제합니다.
3.
원본 파일 무결성 유지: 삭제 스크립트를 돌릴 때, '정말로 삭제해도 되는 로그'만 대상으로 지정해야 합니다.
만약 로그 파일 이름에 날짜 패턴이 없다면, 스크립트가 실수로 운영 중인 다른 중요한 파일까지 건드릴 위험이 있습니다.
반드시 로그 파일만의 패턴(예: appname_YYYYMMDD.log)을 지정하세요.
--- ###
최종 요약 및 제안 질문자님의 니즈가 **"가장 유지하기 쉬우면서도 효과적인 구조"**에 초점을 맞추고 있으니, 저는 [1.
OS 네이티브 기능 활용] 중 Python + 작업 스케줄러 조합으로 시작하시는 걸 가장 추천합니다.
1단계 (즉시 적용): 모든 앱의 로깅 설정을 확인해서, 운영 환경에서는 DEBUG 레벨 출력을 막으세요.
2.
2단계 (자동화): 파이썬으로 '로그 파일 압축 및 30일 이상 파일 삭제' 로직을 구현하세요.
3.
3단계 (지속 가능성): 이 스크립트를 OS 작업 스케줄러에 등록하고, **'이 스크립트가 돌았으니 오늘은 안심'**하는 루틴을 만드세요.
이 방식은 초기 설정 시간(스크립트 작성)은 들지만, 일단 시스템에 녹아들면 매일 신경 쓸 필요가 없고, 가장 직관적으로 제어할 수 있다는 장점이 있습니다.
너무 어려운 전문 툴에 매몰되기보다, 이 기본 원칙을 가진 스크립트를 돌려보시면서, "이 로그는 아예 DB에 저장해야겠다" 싶은 영역이 생기면 그때 전문 로깅 시스템(ELK/Grafana Stack 등)을 도입하는 것이 자원 낭비를 막는 길일 겁니다.
궁금증이 좀 풀리셨으면 좋겠네요.
로그 관리는 한 번 세팅해두면 개발 생산성을 엄청나게 높여주는 '숨은 인프라' 작업이거든요.
화이팅입니다!