직장인이나 개발자라면 누구나 공감할 만한 상황이 있습니다. 매일 쏟아지는 수많은 문서와 데이터 파일들 사이에서 특정 확장자(예: .xlsx, .pdf, .sql)의 최신본만 따로 추출하여 백업해야 하는 업무입니다.
처음 한두 번은 수동으로 복사해서 붙여넣는 것이 어렵지 않습니다. 하지만 업무가 바빠지거나 관리해야 할 폴더가 늘어나면 상황은 달라집니다. 사람이 직접 하다 보면 실수로 파일을 누락하거나, 덮어쓰기 오류로 소중한 데이터를 날려버리는 사고가 발생하기도 합니다.
"단순히 특정 폴더의 파일들을 안전한 곳으로 옮겨주는 믿음직한 조수가 있다면 어떨까?" 이 질문이 바로 오늘 다룰 콘솔 자동화 프로그램의 시작점입니다.

1. 효율적인 자동 백업을 위한 접근 방식
단순히 전체 복사를 수행하는 것이 아니라, 우리가 필요한 '특정 확장자'만 골라내는 필터링 로직이 핵심입니다. 프로그램의 전체 흐름은 다음과 같습니다.
- 경로 정의: 원본 소스 폴더와 백업이 저장될 타겟 폴더를 지정합니다.
- 확장자 필터링: 백업할 확장자 리스트(예: .docx, .zip)를 설정합니다.
- 날짜별 폴더 생성: 백업 시점의 날짜로 폴더를 생성하여 이력을 관리합니다.
- 파일 복사 및 로그 기록: 파일을 복사하면서 처리 결과를 콘솔 화면에 기록합니다.
2. C# 실무 예제 코드 (Program.cs)
아래 코드는 .NET 환경에서 바로 실행 가능한 C# 콘솔 프로그램 예시입니다. 복잡한 라이브러리 설치 없이 기본 System.IO 네임스페이스만으로 구현하였습니다.
using System;
using System.IO;
using System.Linq;
namespace FileBackupAutomation
{
class Program
{
static void Main(string[] args)
{
// 1. 설정: 원본 경로, 대상 경로, 대상 확장자
string sourceDirectory = @"C:\Work\Projects";
string targetBaseDirectory = @"D:\Backup\DailyBackup";
string[] extensionsToBackup = { ".xlsx", ".pdf", ".zip" };
// 2. 오늘 날짜로 백업 폴더명 생성
string today = DateTime.Now.ToString("yyyy-MM-dd_HHmm");
string targetDirectory = Path.Combine(targetBaseDirectory, today);
try
{
Console.WriteLine("=== 자동 백업 프로세스를 시작합니다 ===");
if (!Directory.Exists(sourceDirectory))
{
Console.WriteLine("오류: 원본 경로를 찾을 수 없습니다.");
return;
}
// 백업 폴더가 없으면 생성
if (!Directory.Exists(targetDirectory))
{
Directory.CreateDirectory(targetDirectory);
}
// 3. 파일 필터링 및 복사
var files = Directory.GetFiles(sourceDirectory, "*.*", SearchOption.AllDirectories)
.Where(f => extensionsToBackup.Contains(Path.GetExtension(f).ToLower()));
int count = 0;
foreach (var file in files)
{
string fileName = Path.GetFileName(file);
string destFile = Path.Combine(targetDirectory, fileName);
// 파일 복사 (이미 존재할 경우 덮어쓰기)
File.Copy(file, destFile, true);
Console.WriteLine($"[성공] {fileName} 복사 완료");
count++;
}
Console.WriteLine("---------------------------------------");
Console.WriteLine($"작업 완료: 총 {count}개의 파일이 백업되었습니다.");
}
catch (Exception ex)
{
Console.WriteLine($"예외 발생: {ex.Message}");
}
Console.WriteLine("아무 키나 누르면 종료합니다...");
Console.ReadKey();
}
}
}
3. 실행 결과 및 활용 시나리오
위 코드를 실행하면 지정된 경로에 2024-05-20_1430과 같은 형식의 폴더가 생성되며, 설정한 확장자 파일들만 깔끔하게 수집됩니다.

활용 시나리오
- 시나리오 A (문서 관리): 매일 작성하는 엑셀 보고서(.xlsx)만 따로 모아 매주 금요일 퇴근 전 자동으로 외장 하드에 백업합니다.
- 시나리오 B (개발 데이터): 로그 파일(.log) 중 특정 날짜 이전의 파일만 추출하여 아카이빙 폴더로 이동시킵니다.
- 시나리오 C (협업 준비): 여러 폴더에 흩어진 결과물 파일들을 하나의 폴더로 취합하여 공유하기 직전 단계에 활용합니다.
4. 주의사항 및 실무 팁
프로그램을 실제 운영 환경에 적용하기 전에 반드시 고려해야 할 사항들이 있습니다.
- 파일 권한 문제: 백업 대상 파일이 다른 프로그램(예: 엑셀)에서 열려 있는 경우 '프로세스가 파일을 사용 중'이라는 오류가 발생할 수 있습니다. 이를 방지하려면 예외 처리를 강화하거나 복사 전 파일 잠금 상태를 체크해야 합니다.
- 저장 공간 관리: 매일 백업을 수행하면 하드 디스크 용량이 부족해질 수 있습니다. 일정 기간(예: 30일)이 지난 백업 폴더는 자동으로 삭제하는 로직을 추가하는 것이 좋습니다.
- 상대 경로 활용: 고정된 절대 경로(C:\...)보다는 설정 파일(App.config 또는 JSON)을 통해 경로를 동적으로 변경할 수 있게 설계하면 유연성이 높아집니다.
마무리하며
오늘은 C# 콘솔을 이용해 특정 확장자 파일을 자동으로 백업하는 도구를 만들어 보았습니다. 거창한 시스템이 아니더라도, 이처럼 작고 단단한 도구 하나가 업무의 실수를 줄이고 생산성을 비약적으로 높여줍니다.
콘솔 자동화의 매력은 여기서 끝이 아닙니다. 다음 포스팅에서는 "오래된 로그 파일을 자동으로 삭제하여 디스크 용량을 확보하는 자동 관리 스크립트"에 대해 알아보겠습니다. 작지만 강력한 자동화의 세계, 여러분의 업무에도 적용해 보시길 바랍니다.
'파일·백업 자동화' 카테고리의 다른 글
| [C# 파일 마스터 06] 메일 전송 한계 돌파! 대용량 파일 내 마음대로 조각내기 (0) | 2026.01.28 |
|---|---|
| [C# 파일 마스터 05] 수천 개 파일명 변경? C# 코드 몇 줄로 밤샘 업무 끝내기 (0) | 2026.01.28 |
| [C# 파일 마스터 04] 바탕화면 지옥 탈출! 확장자별 파일 자동 분류 프로그램 (0) | 2026.01.27 |
| [C# 파일 마스터 02] "언제 다 지워?" 보관기간 지난 파일 1초 만에 자동 정리법 (0) | 2026.01.26 |
| [C# 파일 마스터 01]서버 용량 부족 끝! 1분마다 로그 청소하는 자동 비서 만들기 (0) | 2026.01.26 |