cURL로 파일 다운로드하는 방법

cURL을 사용하여 파일을 효율적으로 다운로드하는 방법을 배워보세요. 기본 구문부터 고급 옵션까지, 그리고 cURL과 Wget의 빠른 비교까지 포함됩니다.
3 분 읽기
How to download files with curl blog image

이 가이드에서는 다음을 확인할 수 있습니다:

  • 기본 cURL 파일 다운로드 구문
  • cURL로 파일을 다운로드할 때 더 복잡한 시나리오 처리 방법
  • – 한 번에 여러 파일 다운로드 방법
  • cURL을 효과적으로 사용하기 위한 몇 가지 모범 사례
  • cURL과 Wget의 간략한 비교

자, 시작해 보겠습니다!

기본 cURL 파일 다운로드 구문

가장 기본적인 cURL 파일 다운로드 구문은 다음과 같습니다:

curl -O <파일_URL>

참고: Windows에서는curl을curl.exe로 대체해야 합니다. Windows PowerShell에서curl은Invoke-WebRequest의별칭인 반면,curl.exe는cURL 명령줄 도구를 명시적으로 실행하기 때문입니다.

-O플래그는 cURL이<file_url>에 지정된 URL의 원본 파일명으로 다운로드한 파일을 저장하도록 지시합니다. 동일하게--remote-name을 사용할 수 있습니다:

curl --remote-name <file_url>

예를 들어, 다음 다운로드 파일 cURL 명령을 살펴보겠습니다:

curl -O "https://i.imgur.com/CSRiAeN.jpg"

이 명령어는 아래와 같은 다운로드 진행률 표시줄을 포함한 출력을 생성합니다:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   155k      0 --:--:-- --:--:-- --:--:--  158k

진행률이 100%에 도달하면 cURL 명령어를 실행한 폴더에CSRiAeN.jpg라는파일이 생성됩니다:

The downloaded CSRiAeN.jpg file in the folder where cURL was launched

cURL이 무엇이며 어떤 옵션을 제공하는지에 대한 자세한 내용은cURL 가이드를 참조하세요. 이제 더 복잡한 시나리오를 살펴볼 시간입니다!

cURL을 사용한 파일 다운로드: 고급 옵션

기본적인 cURL 파일 다운로드 구문을 익혔으니, 이제 추가 옵션을 활용해 명령어를 맞춤 설정하는 방법을 배울 준비가 되었습니다.

다운로드된 파일 이름 변경

기본적으로-O옵션은 대상 URL에 지정된 파일을 원래 이름 그대로 다운로드합니다. URL에 지정된 원격 파일에 이름이 포함되어 있지 않으면 cURL은 확장자가 없는curl_response라는 파일을 생성합니다:

The default curl_response file in the folder where cURL was launched

cURL은 이러한 동작을 알리기 위해 경고 메시지도 출력합니다:

경고: 원격 파일 이름이 없으므로 "curl_response"를 사용합니다

다운로드된 파일의 사용자 지정 이름을 지정하려면 다음과 같이-o(또는--output) 플래그를 사용하십시오:

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"

이 명령어는 cURL이 지정된 파일 URL에 GET 요청을 수행하도록 지시합니다. 그런 다음 다운로드된 콘텐츠를 stdout에 출력하는 대신 -o 뒤에 지정된 이름으로 저장합니다.

이번에는 출력 파일이logo.jpg파일이 됩니다:

The downloaded logo.jpg file in the folder where cURL was launched

리다이렉션 추적

일부 URL은 원하는 파일을 직접 가리키지 않으며 최종 목적지에 도달하려면 자동 리다이렉션이 필요합니다.

리다이렉션을 따라가도록 cURL에 지시하려면 -L 옵션을 사용해야 합니다:

curl -O -L "<file_url>"

-L 플래그가 없으면 cURL은 리다이렉션 응답 헤더(예: 301 Moved Permanently 또는 302 Found)를 출력합니다. 특히 Location 헤더에 제공된 새 위치를 자동으로 따라가지 않습니다.

서버 인증

일부 서버는 리소스 접근을 제한하고 사용자 인증을 요구합니다. 기본 HTTP 또는 FTP 인증을 수행하려면 -u (또는 --user) 옵션을 사용할 수 있습니다. 이를 통해 다음과 같은 형식으로 사용자 이름과 비밀번호를 지정할 수 있습니다:

<사용자명>:<비밀번호>

사용자 이름과 비밀번호는 콜론(:)으로 구분되며, 이로 인해 사용자 이름에 콜론을 포함할 수 없습니다. 대신 비밀번호에는 콜론을 포함할 수 있습니다.

<password> 문자열은 선택 사항입니다. 사용자 이름만 지정하면 cURL이 비밀번호 입력을 요청합니다.

서버 인증을 사용하여 cURL로 파일을 다운로드하는 구문은 다음과 같습니다:

curl -O -u <사용자명>:<비밀번호> <파일_URL>

예를 들어, 인증이 필요한 URL에서 .png 파일을 다운로드하려면 다음 명령을 사용합니다:

curl -O -u "myUser:myPassword" "https://example.com/secret.txt"

cURL은 myUsermyPassword를 자격 증명 정보로 사용하여 서버에 인증합니다. 이후 secret.txt 파일을 다운로드합니다.

대역폭 제한 적용

기본적으로 cURL은 사용 가능한 전체 대역폭을 사용하여 파일을 다운로드합니다. 이는 항상 바람직하지 않을 수 있습니다. 다운로드 속도를 제어하려면--limit-rate옵션을 사용하여 설정하려는 최대 다운로드 속도를 지정할 수 있습니다:

curl -O --limit-rate 5k "https://i.imgur.com/CSRiAeN.jpg"

출력 결과는 다음과 같습니다:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   5166      0  0:00:06  0:00:06 --:--:--  5198

다운로드 속도(초당 5198바이트, 초당 5KB에 해당)가 옵션에서 지정한 값과 일치함을 확인하십시오. 이는 시스템의 실제 다운로드 속도가 --limit-rate로 설정한 값보다 높을 때에도 동일하게 적용됩니다.

--limit-rate 옵션은 네트워크 과부하 방지, 대역폭 제한 준수, 테스트를 위한 느린 네트워크 환경 시뮬레이션 등 대역폭 사용량 제어에 유용합니다.

프록시 서버를 통한 다운로드

cURL을 사용하여 다운로드 요청을 수행할 때 대상 서버에 사용자의 IP 주소가 노출됩니다. 이는 개인 정보 보호를 유지하거나속도 제한과 같은 봇 방지 조치를 피하려는 경우 문제가 됩니다.

IP를 숨기고 프록시를 통해 요청을 전달하려면 cURL 명령에 -x (또는 --proxy) 옵션을 사용하십시오:

curl -x <proxy_url> -O <file_url>

<proxy_url> 은 다음 형식으로 지정해야 합니다:

[프로토콜://]호스트[:포트]

HTTP, HTTPS 또는 SOCKS 프록시를 사용하는지에 따라 프록시 URL이 달라진다는 점에 유의하십시오. 자세한 지침은cURL 프록시 통합 가이드를 참조하십시오.

예를 들어, HTTP 프록시를 사용하는 경우 명령어는 다음과 같습니다:

curl -x "http://proxy.example.com:8080" -O "https://i.imgur.com/CSRiAeN.jpg"

백그라운드 다운로드 수행

기본적으로 cURL 다운로드 파일 명령어는 진행률 표시줄이나 실패 시 오류 메시지를 표시합니다. 이러한 출력을 비활성화하려면 -s (또는 --silent) 옵션을 사용하여 “무음” 또는 “조용한” 모드를 활성화할 수 있습니다:

curl -O -s "https://i.imgur.com/CSRiAeN.jpg"

이렇게 하면 cURL이 조용히 작동합니다. 다운로드가 성공하면 파일이 현재 디렉터리에 나타나지만 터미널에는 아무런 피드백이 표시되지 않습니다.

상세 정보 출력

오류 발생 시 또는 cURL의 내부 동작을 더 잘 이해하기 위해 -v (또는 --verbose) 옵션을 사용하여 상세 모드를 활성화하는 것이 좋습니다:

curl -O -v "https://i.imgur.com/CSRiAeN.jpg"

명령을 실행하면 요청 및 응답 과정에 대한 상세 정보를 제공하는 추가 출력이 표시됩니다:

* IPv6: (없음)
* IPv4: 146.75.52.193
*   146.75.52.193:443에 연결 시도 중...
* schannel: 클라이언트 인증서 자동 사용 비활성화됨
* ALPN: curl이 http/1.1 제안함
* ALPN: 서버가 http/1.1 수락함
* i.imgur.com (146.75.52.193) 포트 443에 연결됨
* HTTP/1.x 사용
> GET /CSRiAeN.jpg HTTP/1.1
> Host: i.imgur.com
> User-Agent: curl/8.10.1
> Accept: */*
>
* 요청 완전히 전송됨
* schannel: 데이터 복호화 실패, 추가 데이터 필요
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 35354
< Content-Type: image/jpeg
< Last-Modified: Wed, 08 Jan 2026 08:02:49 GMT
< ETag: "117b93e0521ba1313429bad28b3befc8"
< x-amz-server-side-encryption: AES256
< X-Amz-Cf-Pop: IAD89-P1
< X-Amz-Cf-Id: wTQ20stgw0Ffl1BRmhRhFqpCXY_2hnBLbPXn9D8LgPwdjL96xarRVQ==
< cache-control: public, max-age=31536000
< Accept-Ranges: bytes
< Age: 2903
< Date: Wed, 08 Jan 2026 08:51:12 GMT
< X-Served-By: cache-iad-kiad7000028-IAD, cache-lin1730072-LIN
< X-Cache: Miss from cloudfront, HIT, HIT
< X-Cache-Hits: 1, 0
< X-Timer: S1736326272.410959,VS0,VE1
< Strict-Transport-Security: max-age=300
< Access-Control-Allow-Methods: GET, OPTIONS
< Access-Control-Allow-Origin: *
< Server: cat factory 1.0
< X-Content-Type-Options: nosniff
<
{ [1371 바이트 데이터]
100 35354  100 35354    0     0   212k      0 --:--:-- --:--:-- --:--:--  214k
* 호스트 i.imgur.com에 대한 연결 #0은 그대로 유지됨

여기에는 연결 세부 정보, 요청 헤더, 응답 헤더 및 추가 다운로드 진행 정보가 포함됩니다.

간소화된 진행률 표시줄 설정

표준 cURL 다운로드 파일 진행률 표시줄이 필요에 맞지 않을 수 있습니다. -# (또는 --progress-bar) 옵션을 사용하여 더 간단한 진행률 표시줄을 활성화할 수 있습니다:

curl -O -# "https://i.imgur.com/CSRiAeN.jpg"

이렇게 하면 # 문자를 사용한 진행률 표시줄이 표시되며, 파일 다운로드가 진행됨에 따라 점차 채워집니다:

########################################################### 100.0%

기본 cURL 진행률 출력에 비해 # 막대는 다운로드 진행 상황을 더 간결하게 보여줍니다.

cURL로 여러 파일 다운로드하기

지금까지 cURL로 파일을 다운로드하는 방법을 살펴보았는데, 단일 명령어로 여러 파일을 다운로드하는 방법은 어떨까요? 이제 배울 시간입니다!

범위 파일 다운로드

cURL은 URL 확장을 통해 여러 파일을 동시에 다운로드할 수 있습니다. 구체적으로, 중괄호 {}로 지정하여 동일한 원격 URL의 여러 파일을 다운로드할 수 있습니다:

curl -O "https://example.com/images/{1.jpg,2.jpg,3.jpg}"

이렇게 하면 지정된 세 개의 파일을 다운로드합니다:

1.jpg
2.jpg
3.jpg

{ } 안에 지정된 파일들이 서로 다른 확장자를 가질 수 있다는 점에 유의하세요.

동일한 효과를 위해 대괄호 [] 구문을 사용할 수도 있습니다:

curl -O "https://example.com/files/file[1-3].jpg"

이 명령은 첫 번째 예제와 동일한 결과를 냅니다. 이 경우 [ ] 안에 있는 모든 파일은 동일한 확장자를 가져야 합니다.

참고: 사용자 지정 옵션(예: 무음 모드용 -s 또는 대역폭 제한용 --limit-rate )을 포함하면 다운로드되는 모든 파일에 적용됩니다.

여러 파일 다운로드

서로 다른 URL의 파일을 다운로드하려면 -O 옵션을 여러 번 지정해야 합니다:

curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://media.brightdata.com/2020/12/upload_blog_20201220_153903.svg"

이 명령어는 i.imgur.com에서 CSRiAeN.jpg를, brightdata.com에서 upload_blog_20201220_153903.jpg를 다운로드합니다.

출력에는 지정된 URL마다 다운로드 진행률 표시줄이 포함됩니다:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   271k      0 --:--:-- --:--:-- --:--:--  276k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22467    0 22467    0     0  34657      0 --:--:-- --:--:-- --:--:-- 34724

마찬가지로 여러 개의 -o 옵션을 사용할 수 있습니다:

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" "https://media.brightdata.com/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"

위 명령어는 CSRiAeN.jpg를 다운로드하여 logo.jpg로 저장하고, upload_blog_20201220_153903.svg를 다운로드하여 blog_post.svg로 저장합니다.

-O 옵션과 -o 옵션을 혼용할 수도 있다는 점을 기억하세요:

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://media.brightdata.com/2020/12/upload_blog_20201220_153903.svg"

이 명령은 이전과 같이 logo.jpg를 다운로드하고, 원본 파일 이름 그대로 upload_blog_20201220_153903.svg로 업로드합니다.

-v, -s 또는 --limit-rate와 같은 다른 옵션은 모든 URL에 개별적으로 적용되므로 한 번만 지정해야 합니다.

cURL로 파일 다운로드 시 권장되는 방법

다음은 cURL 파일 다운로드 시 가장 중요한 모범 사례 목록입니다:

  • Windows에서는 curl 대신curl.exe사용: Windows에서는Invoke-WebRequestcmdlet과의 충돌을 피하기 위해curl대신curl.exe를사용하십시오.
  • HTTPS 및 SSL/TLS 오류 무시(주의 필요): SSL/TLS 인증서 유효성 검사 오류를 무시하려면-k(또는--insecure) 옵션을 사용하십시오. 동시에 이는 보안을 저해하므로 신뢰할 수 있는 환경에서만 사용해야 합니다.
  • 올바른 HTTP 메서드 지정: 요청 시 GET, POST, PUT 등 적절한 HTTP 메서드를 사용하십시오. 메서드는 서버의 응답 방식에 영향을 미칩니다.-X옵션을 사용하여 메서드를 지정하십시오.
  • URL을 따옴표로 묶고 특수 문자 이스케이프 처리: 특수 문자를 올바르게 처리하려면 URL을 항상 작은따옴표 또는 큰따옴표로 감싸십시오. URL 내 공백, 앰퍼샌드(&) 및 기타 특수 문자로 인한 문제를 방지하려면 이스케이프 문자()를 사용하십시오.
  • 신원 보호를 위한 프록시 지정:-x(또는--proxy) 옵션을 사용하여 cURL 요청을 프록시를 통해 라우팅하십시오. 이는 스크래핑이나 파일 다운로드 시 IP 주소를 보호하고 프라이버시를 유지하는 데 도움이 됩니다.
  • 다른 요청에서 쿠키 저장 및 재사용:-c-b옵션을 사용하여 쿠키를 저장하고 후속 요청에서 재사용하세요. 이는 세션 지속성을 유지하는 데 도움이 되며 인증이나 추적에 유용할 수 있습니다.
  • 더 나은 제어를 위한 다운로드 속도 제한:--limit-rate옵션을 사용하여 다운로드 속도를 제어하고 네트워크 연결 과부하 또는 서버의 속도 제한을 유발하는 것을 방지하세요.
  • 디버깅을 위한 상세 출력 추가:-v옵션으로 상세 모드를 활성화하여 요청 및 응답에 대한 자세한 정보를 얻을 수 있습니다. 이는 디버깅 및 문제 해결에 유용합니다.
  • 오류 응답 확인:-w옵션을 사용하여 항상 HTTP 응답 코드를 확인하여 파일 다운로드가 성공했는지(예:200 OK) 또는 오류가 발생했는지(예:404 Not Found)를 검증하세요.

파일 다운로드용 cURL vs Wget

cURL과 Wget은 모두 원격 서버에서 파일을 가져오는 명령줄 도구입니다. 두 도구 간의 주요 차이점은 다음과 같습니다:

  • Wget은 웹에서 파일을 다운로드하기 위해 설계되었습니다. HTTP, HTTPS, FTP 및 기타 여러 프로토콜을 지원합니다. Wget은 재귀적 파일 다운로드, 중단된 다운로드 재개, 백그라운드 프로세스에서의 우수한 작동 능력으로 유명합니다.Python으로 웹 페이지를 다운로드하는 방법을 확인하세요.
  • cURL은다양한 인터넷 프로토콜을 사용하여 서버와 데이터를 주고받는 데 사용되는 다목적 명령줄 도구입니다. 일반적으로 엔드포인트 테스트, 간단한 HTTP 요청 수행, 단일 파일 다운로드에 사용됩니다. cURL은웹 스크래핑에도 활용할 수 있습니다.

cURL과 Wget의 주요 차이점은 cURL이 데이터 전송에 대해 더 세밀한 제어를 제공한다는 점입니다. 구체적으로 사용자 정의 헤더, 인증, 더 많은 프로토콜을 지원합니다. 반면 Wget은 더 단순하며 대량 다운로드, 재귀적 처리, 중단된 전송 처리에 더 적합합니다.

결론

이 가이드에서는 cURL로 파일을 다운로드하는 방법을 배웠습니다. 기본적인 cURL 파일 다운로드 구문부터 시작하여 더 복잡한 시나리오와 사용 사례를 살펴보았습니다. 이제 cURL을 사용하여 단일 또는 다중 파일을 스크래핑하는 방법을 알게 되었습니다.

HTTP 요청을 할 때마다 인터넷에 흔적이 남는다는 점을 명심하세요. 신원, 개인정보 보호 및 보안을 강화하려면 cURL에 프록시를 통합하는 것을 고려해야 합니다. 다행히 Bright Data가 해결책을 제공합니다!

Bright Data는 포춘 500대 기업 및 20,000명 이상의 고객에게 서비스를 제공하는 세계 최고의 프록시 서버를 운영합니다. 전 세계 프록시 네트워크는 다음과 같습니다:

전체적으로 이는 시장에서 가장 크고 신뢰할 수 있는 스크래핑 전용 프록시 네트워크 중 하나입니다.

지금 가입하여 저희 프록시와 스크래핑 솔루션을 무료로 테스트해 보세요!