본문 바로가기
파일·백업 자동화

[C# 파일 마스터 02] "언제 다 지워?" 보관기간 지난 파일 1초 만에 자동 정리법

by 일상 과학자 2026. 1. 26.

1. 반복되는 파일 정리 업무, 왜 자동화가 필요할까?

기업의 IT 환경이나 개인의 업무 환경에서 공통적으로 발생하는 고질적인 문제 중 하나는 바로 '데이터 포화'입니다. 시스템 로그, 임시 백업 파일, 그리고 각종 보고서 데이터는 시간이 지남에 따라 기하급수적으로 쌓여갑니다.

처음에는 수동으로 지우는 것이 어렵지 않지만, 관리해야 할 서버가 늘어나거나 바쁜 업무 환경에서는 이를 놓치기 일쑤입니다. 저장 공간이 가득 차면 시스템이 멈추거나 서비스 장애로 이어지는 치명적인 결과를 초래하기도 하죠.

▲ 그림 1. 관리되지 않은 파일로 인해 저장 공간이 부족해진 서버의 모습

"언젠가 정리해야지"라는 생각으로 미루기에는 리스크가 큽니다. 그렇기에 단순히 사람이 '기억'해서 처리하는 것이 아니라, 시스템이 '스스로' 정리하게 만드는 자동화 프로세스가 반드시 필요합니다.

2. 파일 자동 정리 로직의 설계

자동화 프로그램을 제작하기 전, 우리는 세 가지 핵심 단계를 설계해야 합니다.

▲ 그림 2. C# 자동화 도구를 통한 날짜 기반 파일 정리 프로세스 개요

  1. 대상 경로 탐색: 정리가 필요한 폴더의 경로를 지정합니다.
  2. 보관 기준 설정: 파일의 '최종 수정 시간(LastWriteTime)'을 기준으로 현재 시간과 비교하여 며칠이 경과했는지 계산합니다.
  3. 예외 처리 및 삭제: 파일이 사용 중이거나 권한이 없는 경우를 대비한 예외 처리를 적용한 뒤 안전하게 삭제합니다.

이 과정은 복잡한 알고리즘보다는 '정확한 시간 연산''안전한 파일 접근 권한 관리'가 핵심입니다.

3. C# 구현 예제 코드

다음은 특정 폴더 내에서 30일 이상 지난 파일을 찾아 자동으로 삭제하는 C# 콘솔 프로그램의 핵심 코드입니다.

using System;
using System.IO;

namespace FileCleanupAutomation
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 설정: 정리할 폴더 경로와 보관 기간(일)
            string targetFolderPath = @"C:\Logs\DailyBackup";
            int retentionDays = 30;

            Console.WriteLine($"[{DateTime.Now}] 파일 정리 작업을 시작합니다.");

            try
            {
                // 해당 경로가 존재하는지 확인
                if (Directory.Exists(targetFolderPath))
                {
                    DirectoryInfo directory = new DirectoryInfo(targetFolderPath);
                    DateTime threshold = DateTime.Now.AddDays(-retentionDays);

                    int deleteCount = 0;

                    // 폴더 내 모든 파일 탐색
                    foreach (FileInfo file in directory.GetFiles())
                    {
                        // 2. 파일의 최종 수정 시간이 보관 기준보다 이전인지 확인
                        if (file.LastWriteTime < threshold)
                        {
                            Console.WriteLine($"삭제 대상 발견: {file.Name} (마지막 수정: {file.LastWriteTime})");
                            file.Delete(); // 3. 파일 삭제 실행
                            deleteCount++;
                        }
                    }

                    Console.WriteLine($"작업 완료. 총 {deleteCount}개의 파일이 삭제되었습니다.");
                }
                else
                {
                    Console.WriteLine("지정된 경로를 찾을 수 없습니다. 경로 설정을 확인해주세요.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"오류 발생: {ex.Message}");
            }
        }
    }
}

4. 실행 결과 및 실무 활용 시나리오

이 프로그램을 빌드하여 실행하면 콘솔 창에 현재 작업 상황이 실시간으로 출력됩니다. 삭제된 파일의 목록과 총 개수가 표시되어 작업이 정상적으로 수행되었는지 확인할 수 있습니다.

실무 적용 예시:

  • 웹 서버 로그 관리: 매일 생성되는 GB 단위의 IIS 로그 중 14일이 지난 데이터를 자동 삭제하여 디스크 풀(Full) 장애 방지.
  • 임시 다운로드 폴더: 공용 PC나 서버의 Temp 폴더를 주기적으로 비워 쾌적한 환경 유지.
  • 정기 DB 백업본 정리: 최근 7일치 백업본만 유지하고 과거 데이터는 자동 삭제하여 스토리지 비용 절감.

5. 실무자를 위한 개발 및 운영 팁

실무 환경에 적용할 때는 다음 두 가지를 반드시 고려해야 합니다.

  • 로그 기록(Logging): 콘솔 화면 출력에 그치지 않고, 별도의 .log 파일에 작업 이력을 남기는 것이 좋습니다. 그래야 나중에 "왜 이 파일이 없어졌지?"라는 의문에 명확한 근거를 제시할 수 있습니다.
  • 읽기 전용 파일 처리: 간혹 읽기 전용 속성이 걸린 파일은 file.Delete() 명령 시 에러가 발생할 수 있습니다. 삭제 전 속성을 일반(Normal)으로 변경하는 코드를 추가하면 더욱 견고한 프로그램이 됩니다.

6. 마치며

오늘은 C#을 이용해 업무의 효율을 높여주는 파일 자동 정리 콘솔 프로그램을 살펴보았습니다. 아주 복잡한 기술은 아니지만, 이런 작은 자동화 도구들이 모여 업무의 안정성을 높이고 개발자의 시간을 아껴줍니다.