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

[C# 파일 마스터 08] 재택 필수! 네트워크 드라이브 원격 백업 자동화 시스템

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

"설마 내 PC가?" 데이터 손실의 공포와 수동 백업의 한계

업무용 PC에 저장된 중요한 문서나 소스 코드가 하드웨어 고장이나 랜섬웨어로 인해 한순간에 사라진다면 어떻게 될까요? 이러한 불상사를 막기 위해 우리는 보통 네트워크 드라이브(NAS, 서버 공유 폴더)를 백업 저장소로 활용합니다.

하지만 업무에 집중하다 보면 '오늘 백업했나?' 하는 의문이 들 때가 많습니다. 마우스로 폴더를 복사하고 붙여넣는 과정은 단순하지만, 파일 용량이 클수록 PC가 느려지거나 복사 도중 네트워크 연결이 끊겨 작업이 중단되는 불편함이 따릅니다. "왜 우리는 매일 같은 복사 작업을 수동으로 확인해야 할까요?"라는 질문에서 이 자동화 도구는 탄생했습니다.

로컬 PC의 파일이 네트워크 서버로 안전하게 복사되는 과정을 시각화한 인포그래픽

효율적인 백업 알고리즘

무조건 모든 파일을 복사하는 것은 네트워크 대역폭 낭비입니다. 우리는 다음과 같은 효율적인 방식을 채택합니다.

  1. 네트워크 드라이브 체크: 대상 경로가 연결되어 있는지(Mapping 확인) 먼저 검사합니다.
  2. 파일 비교: 소스(Source)와 타겟(Target) 폴더의 파일 목록을 비교합니다.
  3. 조건부 복사: 타겟에 파일이 없거나, 소스의 파일 수정 날짜가 더 최신인 경우에만 복사를 진행합니다.
  4. 결과 보고: 백업 성공 여부와 복사된 파일 개수를 로그로 남깁니다.

C# 콘솔 프로그램

아래 코드는 네트워크 드라이브 연결 상태를 확인하고 최신 파일만 골라 백업하는 핵심 로직입니다.

using System;
using System.IO;

namespace NetworkBackupAutomation
{
    class Program
    {
        static void Main(string[] args)
        {
            // 백업 설정 (실제 경로로 수정 필요)
            string localFolder = @"C:\Work\ImportantDocs";
            string networkDrive = @"Z:\Backup\Daily_Backup"; // 연결된 네트워크 드라이브

            Console.WriteLine($"[로그] {DateTime.Now:yyyy-MM-dd HH:mm:ss} 백업 시작");

            if (!Directory.Exists(networkDrive))
            {
                Console.WriteLine("[오류] 네트워크 드라이브가 연결되어 있지 않습니다. 경로를 확인하세요.");
                return;
            }

            try
            {
                // 타겟 폴더가 없으면 생성
                if (!Directory.Exists(networkDrive)) Directory.CreateDirectory(networkDrive);

                string[] files = Directory.GetFiles(localFolder, "*.*", SearchOption.AllDirectories);
                int successCount = 0;

                foreach (string file in files)
                {
                    string fileName = Path.GetFileName(file);
                    string destFile = Path.Combine(networkDrive, fileName);

                    FileInfo sourceInfo = new FileInfo(file);
                    FileInfo destInfo = new FileInfo(destFile);

                    // 파일이 없거나 소스가 더 최신인 경우에만 복사
                    if (!destInfo.Exists || sourceInfo.LastWriteTime > destInfo.LastWriteTime)
                    {
                        File.Copy(file, destFile, true);
                        Console.WriteLine($"[성공] 복사 완료: {fileName}");
                        successCount++;
                    }
                }

                Console.WriteLine($"\n[완료] 총 {successCount}개의 파일이 새롭게 백업되었습니다.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[오류 발생] {ex.Message}");
            }
        }
    }
}

실행 결과 및 활용 시나리오

프로그램을 실행하면 실시간으로 백업 현황이 출력됩니다. 이미 백업된 파일은 건너뛰고 변경된 사항만 처리하므로 매우 신속하게 작업이 마무리됩니다.

실무 활용 예시:

  • 공유 폴더 동기화: 팀원들과 함께 사용하는 프로젝트 폴더를 매시간 네트워크 드라이브로 동기화하여 협업 효율을 높입니다.
  • 개인 작업물 보호: 퇴근 시 프로그램이 실행되도록 설정하여 하루 동안 작업한 결과물을 안전하게 서버로 전송합니다.
  • 로그 데이터 아카이빙: 로컬에 쌓이는 로그 데이터를 매주 네트워크 백업 서버로 이동시켜 로컬 하드 용량을 관리합니다.

C# 콘솔 화면에서 네트워크 드라이브로 파일 백업이 성공했다는 로그가 출력되는 모습

주의사항 및 실무 팁

  1. 드라이브 매핑 확인: 콘솔 프로그램은 실행 권한에 따라 매핑된 드라이브(Z:)를 인식하지 못할 수도 있습니다. 이 경우 \\Server\SharedFolder와 같은 UNC 경로를 직접 사용하는 것이 더 안정적입니다.
  2. 용량 관리: 무조건 복사만 하면 네트워크 드라이브 용량이 부족해질 수 있습니다. 일정 기간이 지난 백업 파일은 삭제하는 로직을 추가하는 것이 좋습니다.
  3. 네트워크 속도: 무선 Wi-Fi 환경보다는 유선 LAN 환경에서 실행하는 것이 대용량 파일 백업 시 끊김 현상을 방지할 수 있습니다.

마무리하며

네트워크 드라이브 백업 자동화는 "데이터를 잃고 나서 후회하지 않는 가장 스마트한 방법"입니다. 오늘 만든 도구를 작업 스케줄러에 등록해 두는 것만으로도 여러분의 소중한 자산인 데이터를 24시간 안전하게 지킬 수 있습니다.