도입부: 줄어드는 디스크 용량, "언제까지 수동으로 압축하시겠습니까?"
시스템 운영자나 데이터 관리자라면 한 번쯤 "디스크 여유 공간 부족" 알림에 가슴이 철렁했던 경험이 있을 것입니다. 특히 매일 생성되는 로그 파일이나 분석용 로우 데이터(Raw Data)는 텍스트 형식이 많아 용량을 많이 차지하지만, 정작 압축하면 그 크기가 1/10 수준으로 줄어들기도 합니다.
하지만 매일 퇴근 전 폴더를 열어 파일을 하나하나 ZIP으로 묶는 것은 매우 비효율적입니다. "왜 이 단순한 작업이 자동화되지 않고 매번 수동으로 반복될까요?" 이는 명확한 규칙(Retention Policy)에 따라 작동하는 자동화 도구가 없기 때문입니다.

해결 접근 방식: 효율적인 압축 알고리즘 구성
단순히 '전체 압축'을 하는 것이 아니라, 실무에서 바로 쓸 수 있는 스마트한 로직을 구성합니다.
- 필터링: 대상 폴더 내에서 특정 확장자(.log, .txt 등)와 특정 날짜가 지난 파일만 선별합니다.
- 스트림 처리: 대용량 파일인 경우 메모리 부족을 방지하기 위해 System.IO.Compression 라이브러리를 활용한 스트림 방식으로 압축합니다.
- 검증 및 삭제: 압축 파일이 정상적으로 생성되었는지 확인한 후, 원본 파일을 삭제하여 용량을 확보합니다.
- 로그 기록: 언제, 어떤 파일이 압축되었는지 별도의 로그 파일로 남깁니다.
C# 콘솔 프로그램
이 코드는 .NET에서 기본 제공하는 ZipFile 클래스를 활용하여 간단하면서도 강력하게 작동합니다.
using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
namespace AutoArchiveTool
{
class Program
{
static void Main(string[] args)
{
// 설정: 압축할 폴더 경로 및 보관 기준일
string sourcePath = @"C:\Logs";
string archivePath = @"C:\Archive";
int daysOld = 7; // 7일 지난 파일 대상
Console.WriteLine($"[정보] {DateTime.Now} 압축 자동화 작업을 시작합니다.");
try
{
// 보관 폴더가 없으면 생성
if (!Directory.Exists(archivePath)) Directory.CreateDirectory(archivePath);
var directory = new DirectoryInfo(sourcePath);
// 기준 날짜보다 오래된 파일만 선별
var filesToArchive = directory.GetFiles("*.*")
.Where(f => f.LastWriteTime < DateTime.Now.AddDays(-daysOld));
foreach (var file in filesToArchive)
{
string zipFileName = Path.Combine(archivePath, $"{file.Name}_{DateTime.Now:yyyyMMdd}.zip");
Console.Write($"[진행] {file.Name} 압축 중...");
using (FileStream zipToOpen = new FileStream(zipFileName, FileMode.Create))
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
archive.CreateEntryFromFile(file.FullName, file.Name);
}
// 압축 성공 후 원본 삭제 (필요시 선택)
file.Delete();
Console.WriteLine(" -> 완료 및 원본 삭제");
}
Console.WriteLine("\n[완료] 모든 작업을 성공적으로 마쳤습니다.");
}
catch (Exception ex)
{
Console.WriteLine($"\n[오류 발생] {ex.Message}");
}
}
}
}
실행 결과 및 활용 시나리오
프로그램을 실행하면 어떤 파일이 대상이 되었고, 압축 및 원본 삭제가 어떻게 진행되었는지 콘솔창에 일목요연하게 출력됩니다.
실무 활용 예시:
- 웹 서버 로그 관리: 수 기가바이트씩 쌓이는 IIS 로그를 매주 월요일 새벽에 자동으로 압축하여 서버 가용성을 유지합니다.
- DB 백업본 정리: 매일 생성되는 데이터베이스 덤프(.sql) 파일을 일주일 단위로 압축 보관하여 스토리지 비용을 절감합니다.
- 프로젝트 아카이빙: 오랫동안 수정되지 않은 작업 문서들을 자동으로 분류하여 별도의 백업 드라이브로 이동시킵니다.

주의사항 및 실무 팁
- 파일 잠금(File Lock) 체크: 로그 파일이 현재 다른 프로그램(예: 웹 서버)에 의해 사용 중인 경우 압축 오류가 발생할 수 있습니다. try-catch로 예외 처리를 철저히 해야 합니다.
- 압축률 vs 속도: ZipArchive 사용 시 압축 수준(CompressionLevel)을 설정할 수 있습니다. 서버 성능이 중요하다면 Fastest를, 용량이 중요하다면 Optimal을 선택하세요.
- 작업 스케줄러 등록: 프로그램 작성이 끝나면 '윈도우 작업 스케줄러'에 등록하여 사용자 로그인 여부와 관계없이 실행되도록 설정하는 것이 자동화의 완성입니다.
마무리하며
자동화는 거창한 인공지능이 아니라, 오늘 만든 코드처럼 반복되는 불편함을 코드로 해결하는 것에서 시작됩니다. 대용량 파일 자동 압축 도구를 통해 여러분의 서버와 PC 환경이 한층 더 쾌적해지길 바랍니다.
'파일·백업 자동화' 카테고리의 다른 글
| [C# 파일 마스터 09] 프로젝트 끝! 잡동사니 파일 한 번에 솎아내는 정리 도구 (0) | 2026.01.30 |
|---|---|
| [C# 파일 마스터 08] 재택 필수! 네트워크 드라이브 원격 백업 자동화 시스템 (0) | 2026.01.29 |
| [C# 파일 마스터 06] 메일 전송 한계 돌파! 대용량 파일 내 마음대로 조각내기 (0) | 2026.01.28 |
| [C# 파일 마스터 05] 수천 개 파일명 변경? C# 코드 몇 줄로 밤샘 업무 끝내기 (0) | 2026.01.28 |
| [C# 파일 마스터 04] 바탕화면 지옥 탈출! 확장자별 파일 자동 분류 프로그램 (0) | 2026.01.27 |