Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 URL로 파일 다운로드하는 방법 – WebClient 활용 가이드

C#에서 URL로 파일 다운로드하기

C#에서는 WebClient 클래스를 사용하여 URL에서 간단히 파일을 다운로드할 수 있습니다. WebClient 클래스는 System.Net 네임스페이스에서 제공되며, 별도의 복잡한 설정 없이 몇 줄의 코드만으로 파일 다운로드를 구현할 수 있습니다.

WebClient 클래스는 URI(Uniform Resource Identifier)로 식별되는 로컬, 인트라넷, 인터넷상의 모든 리소스에 데이터를 전송하거나 수신하기 위한 공통 메서드를 제공합니다.

웹 클라이언트란 무엇인가?

웹 클라이언트(Web Client)는 사용자의 요청에 따라 웹 서버와 통신하기 위해 컴퓨터에 설치된 애플리케이션 또는 웹 브라우저를 의미합니다. 대표적인 웹 클라이언트로는 Google Chrome, Firefox, Safari, Opera 등이 있습니다. 웹 클라이언트는 기본적으로 서버로부터 처리된 데이터를 가져오는 소비자(Consumer) 애플리케이션이라고 할 수 있습니다.

클라이언트와 서버의 관계

클라이언트(Client)와 서버(Server)는 하나의 연결을 이루는 두 부분으로, 서로 다른 두 시스템입니다.

  • 웹 클라이언트: 사용자의 요청에 따라 정보를 요청하는 역할
  • 웹 서버: 원격 컴퓨터의 요청을 수락하고 요청된 정보를 전송하도록 설계된 시스템

웹 서버는 클라이언트가 볼 수 있도록 정보를 저장하는 역할을 담당하며, 일반적으로 웹 호스트(Web Host)이기도 합니다. 웹 호스트는 서버에 접속하여 저장된 정보를 열람할 수 있도록 허용합니다.

WebClient 클래스의 동작 원리

C#의 WebClient 클래스는 내부적으로 WebRequest 클래스를 사용하여 리소스에 접근합니다. WebClient 인스턴스는 WebRequest.RegisterPrefix 메서드로 등록된 모든 WebRequest 파생 클래스를 통해 데이터에 접근할 수 있습니다.

파일 다운로드에는 DownloadFile 메서드를 사용합니다. 기본 문법은 다음과 같습니다.

WebClient client = new WebClient();
client.DownloadFile("url", "path");

DownloadFile 메서드는 첫 번째 매개변수로 다운로드할 파일의 URL을, 두 번째 매개변수로 저장할 로컬 경로를 받습니다.

예제 코드

예를 들어 "https://downloadfreeimages.jpg" 경로에서 이미지를 다운로드하여 로컬 디렉터리에 저장한다고 가정해 보겠습니다.

using System;
using System.Net;

namespace DemoApplication{
    public class Program{
        public static void Main(){
            string url = "https://downloadfreeimages.jpg";
            string savePath = @"D:\Demo\FreeImages.jpg";

            WebClient client = new WebClient();
            client.DownloadFile(url, savePath);

            Console.ReadLine();
        }
   }
}

실행 결과

위 예제를 실행하면 지정한 URL에서 이미지를 다운로드하여 주어진 경로에 저장합니다. 결과적으로 이미지 파일은 아래 디렉터리에 생성됩니다.

D:\Demo

추가 참고 사항

WebClient는 간단한 다운로드 작업에 유용하지만, .NET Framework 4.5 이상 및 .NET Core/.NET 5+ 환경에서는 비동기 처리와 스트림 제어에 더 유연한 HttpClient 클래스를 사용하는 것이 권장됩니다. 특히 대용량 파일 다운로드나 진행률 표시, 취소 처리가 필요한 경우 HttpClient가 더 적합합니다. 또한 DownloadFileAsync 메서드를 활용하면 UI가 멈추지 않는 비동기 다운로드를 구현할 수 있다는 점도 기억해 두면 좋습니다.