Computer >> 컴퓨터 >  >> 시스템 >> Linux

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

터미널 중심의 리눅스 애플리케이션 설치 방법을 찾아본 적이 있다면 curl 명령어를 한 번쯤은 접했을 것입니다. cURL은 URL을 통해 데이터를 전송하는 명령줄 도구로, 가장 간단한 용도는 명령줄에서 파일을 내려받는 것이지만, 실제로는 훨씬 더 강력한 기능을 갖춘 도구입니다.

cURL이란 무엇인가?

cURL은 1996년 Daniel Stenberg가 웹 서버에서 금융 데이터를 가져와 IRC 채널에 전송하기 위해 처음 개발한 이후, 브라우저 없이 데이터를 주고받는 강력한 도구로 발전해 왔습니다. 터미널을 자주 사용한다면 반드시 익혀둬야 할 필수 도구 중 하나입니다.

대부분의 리눅스 배포판에는 cURL이 기본으로 설치되어 있어 바로 사용할 수 있습니다. 설치되어 있지 않더라도 대부분의 저장소에서 제공되므로 소프트웨어 센터를 통해 손쉽게 설치할 수 있습니다.

윈도우에는 "curl 유사" 명령어가 기본 제공되지 않으며, macOS에는 cURL이 사전 설치되어 있지만 리눅스 버전만큼 다양한 옵션(플래그)을 지원하지는 않습니다.

설치 방법

본격적으로 시작하기 전에 시스템에 cURL이 설치되어 있는지 확인해야 합니다.

리눅스

Debian/Ubuntu 계열 배포판에서는 아래 명령어로 cURL을 설치합니다:

sudo apt install curl

Arch 계열 배포판:

sudo pacman -S curl

Fedora/CentOS/RHEL:

sudo dnf install curl

macOS

macOS에는 cURL이 기본 설치되어 있으므로 별도의 작업이 필요하지 않습니다.

윈도우

  1. Windows 7/10/11의 경우 cURL 다운로드 페이지로 이동하여 사용 중인 아키텍처에 맞게 64비트 또는 32비트 패키지를 선택합니다. 아키텍처를 모른다면 2006년 이후 생산된 하드웨어 대부분이 64비트이므로 64비트를 선택하는 것이 안전합니다.
  2. 시스템 드라이브 바로 아래 또는 "C:\Program Files\" 안에 "cURL"이라는 이름의 폴더를 생성합니다.
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지
  1. 다운로드한 zip 파일을 열고 "bin" 폴더 안의 "curl.exe"를 찾아 생성한 cURL 폴더로 복사합니다. 이 EXE 파일은 완전히 독립적으로 실행되며, 리눅스에서 사용 가능한 모든 옵션을 지원합니다.
  2. 명령 프롬프트 어디서든 이 명령어를 실행할 수 있도록 윈도우의 PATH 환경 변수에 추가해야 합니다.
  • 시작 메뉴를 클릭하고 environment를 입력한 후 Enter 키를 누릅니다.
  • "환경 변수 편집(Environment Variables...)"을 클릭하면 환경 변수 설정 화면으로 이동합니다.
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지
  • "Path" 환경 변수를 선택한 후 "편집(Edit)..."을 클릭합니다.
  • 경로 편집 대화상자에서 "새로 만들기(New)"를 클릭하고 "curl.exe"가 있는 디렉터리 경로를 입력합니다. 예: "C:\Program Files\cURL".
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지
  • 열었던 대화상자들을 모두 "확인"으로 닫으면 이제 터미널에서 cURL을 사용할 수 있습니다!

리눅스에서 사용 가능한 cURL의 모든 옵션은 윈도우 버전에서도 동일하게 작동합니다.

참고: 명령 프롬프트를 Windows Terminal과 혼동해서는 안 됩니다. Windows Terminal에는 PowerShell에 자체 버전의 cURL이 포함되어 있어 비슷한 기능을 수행하지만 작동 방식은 완전히 다릅니다.

cURL 시작하기

터미널에 curl maketecheasier.com을 입력하고 Enter 키를 눌러 보세요.

아무런 출력이 나오지 않는다면 해당 사이트의 서버가 www가 없는 도메인으로 들어오는 임의의 연결 요청에 응답하도록 설정되지 않았기 때문입니다. 존재하지 않거나 오프라인 상태인 서버에 요청하면 cURL이 호스트를 확인(resolve)할 수 없다는 오류 메시지가 표시됩니다.

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

cURL로 실질적인 작업을 하려면 프로토콜을 지정해야 합니다. 여기서는 HTTPS 프로토콜로 사이트 홈페이지를 요청해 보겠습니다. curl https://www.maketecheasier.com을 입력하세요.

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

정상적으로 작동했다면 방대한 양의 데이터가 화면에 출력될 것입니다. 이 데이터를 좀 더 활용하기 쉽게 만들려면 HTML 파일로 저장하도록 지시할 수 있습니다:

curl https://www.maketecheasier.com > ~/Downloads/mte.html
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

이 명령은 사이트의 출력 내용을 다운로드 폴더의 HTML 파일에 저장합니다. 파일 관리자로 해당 폴더에 이동해 방금 만든 파일을 두 번 클릭하면 사이트 홈페이지의 HTML 스냅샷이 열립니다.

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

마찬가지로 -o 옵션을 사용해도 동일한 결과를 얻을 수 있습니다:

curl -o ~/Downloads/mte.html https://www.maketecheasier.com

리디렉션 따라가기

대부분의 사이트는 http 트래픽을 https 프로토콜로 자동 리디렉션합니다. cURL에서는 -L 옵션으로 동일한 동작을 구현할 수 있습니다. 이 옵션은 읽을 수 있는 페이지나 파일에 도달할 때까지 301 리디렉션을 자동으로 따라갑니다.

 curl -L https://google.com.
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

다운로드 이어받기

대용량 파일을 다운로드할 때 인터넷 속도에 따라 연결이 끊기면 매우 답답할 수 있습니다. 다행히 cURL에는 이어받기 기능이 있습니다. -C 옵션을 사용하면 이 문제를 순식간에 해결할 수 있습니다.

실제 예시를 위해 데비안 테스팅 릴리스 ISO를 받던 중 Ctrl+C를 눌러 일부러 다운로드를 중단해 보겠습니다.

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

다음 명령에는 -C 옵션을 붙입니다. 예를 들면 다음과 같습니다:

curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso
cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

다운로드가 중단된 지점부터 성공적으로 재개되었습니다.

여러 파일 한 번에 다운로드하기

cURL에는 직관적인 다중 파일 다운로드 방법이 없기 때문에, 각각 장단점이 있는 두 가지 방법을 사용해야 합니다.

다운로드할 파일이 일련번호로 매겨져 있다면(예: file1, file2 등) 대괄호로 전체 범위를 지정하고 -o 옵션으로 지정하는 출력 이름에 "#"을 넣을 수 있습니다. 헷갈리지 않도록 예시를 살펴보겠습니다:

curl "https://example.com/file[1-5].zip" -o "#1_#2"

더 간단한 방법은 -O(--remote-name) 옵션입니다. 이 옵션은 원격 파일을 같은 이름의 로컬 파일로 다운로드합니다. 출력 파일을 지정할 필요가 없으므로, 원하는 다운로드 위치에서 터미널을 열어두었다면 이 명령을 사용하는 것이 좋습니다.

curl -O "https://example.com/file1.zip" -O "https://example.com/file2.zip"

일련번호가 매겨진 파일을 대량으로 다운로드해야 한다면 --remote-name-all 옵션이 더 적합합니다:

curl --remote-name-all "https://example.com/file[1-5].zip"

대괄호를 활용하면 URL을 다시 입력하지 않고도 같은 사이트의 일련번호가 없는 파일들까지 지정할 수 있습니다:

curl --remote-name-all "https://example.com/{file1.zip,anotherfile.zip,thisisfun.zip}"

인증이 필요한 다운로드

인증이 필요한 파일(예: 사설 FTP 서버에서 가져올 때)은 -u 옵션으로 다운로드할 수 있습니다. 모든 인증 요청은 사용자 이름을 먼저, 비밀번호를 나중에 입력하고 두 값 사이에 콜론(:)을 넣어야 합니다. 간단한 예시는 다음과 같습니다:

curl -u username:password -o ~/Downloads/file.zip ftp://example.com/file.zip

이렇게 하면 FTP 서버에 인증한 후 파일을 다운로드 폴더에 저장합니다.

파일 분할 및 병합하기

어떤 이유로든 대용량 파일을 여러 조각으로 나눠 내려받고 싶다면 cURL의 --range 옵션을 사용하면 됩니다. --range를 사용할 때는 시작 바이트와 종료 바이트를 지정해야 하며, 종료 지점을 지정하지 않으면 파일의 나머지 부분 전체를 다운로드합니다.

아래 명령은 Arch Linux 설치 이미지의 첫 100MB를 다운로드합니다:

curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso

그다음 100MB는 --range 100000000-199999999처럼 지정하면 됩니다. && 연산자를 사용하면 이러한 명령들을 연결해서 실행할 수 있습니다:

curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 100000000-199999999 -o arch.part2 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 200000000-299999999 -o arch.part3 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 300000000-399999999 -o arch.part4 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 400000000-499999999 -o arch.part5 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 500000000-599999999 -o arch.part6 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 600000000-699999999 -o arch.part7 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 700000000- -o arch.part8 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso

위 명령 구조를 그대로 따랐다면 지정한 위치에 8개의 파일이 생성되어 있을 것입니다.

cURL 완벽 활용 가이드: 명령줄에서 데이터 전송부터 다운로드까지

분할된 파일을 하나로 합치려면 리눅스나 macOS에서는 cat 명령을 다음과 같이 사용합니다:

cat arch.part? > arch.iso

윈도우에서는 copy 명령을 이렇게 사용합니다:

copy /b arch.part* arch.iso

그 외 유용한 기능들

cURL에는 다양한 옵션과 활용법이 있습니다:

  • -# – 진행률 표시줄로 다운로드 진행 상황을 보여줍니다. 예: curl -# https://asite.com/somefile.zip > ~/somefile.zip.
  • -a – 기존 파일을 덮어쓰지 않고 내용을 추가(append)합니다. 예: curl -ao ~/collab-full.x https://example-url.com/collab-part26.x.
  • --head – 응답 본문 없이 서버의 응답 헤더만 가져옵니다. 웹사이트를 디버깅하거나 서버가 클라이언트에 어떻게 응답하도록 설정되어 있는지 확인할 때 유용합니다. 예: curl --head https://example-url.com.
  • --limit-rate – 대역폭을 제한하여 다운로드합니다. cURL이 시스템의 가용 대역폭을 독점하지 않게 하고 싶을 때 유용합니다. 단순 숫자는 초당 바이트로 해석되며, K는 초당 킬로바이트, M은 초당 메가바이트를 의미합니다. 예: curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip.
  • -o – 앞서 언급했듯이 cURL의 출력 파일을 지정합니다. 예: curl -o ~/Downloads/file.zip https://thefileplace.com/file.zip -o file2.zip https://thefileplace.com/file2.zip.
  • --proxy – 프록시를 통해 통신할 때 사용합니다. 예: curl --proxy proxyurl:port https://example-url.com/file.zip > ~file.zip.

cURL vs. Wget

같은 해(1996년)에 출시된 cURL과 Wget은 언뜻 보면 거의 자매 프로그램처럼 느껴집니다. 하지만 조금 더 들여다보면 이 둘은 서로 다른 목적을 가지고 있음을 알 수 있습니다.

Wget

  • 처음부터 인터넷에서 데이터를 내려받는 용도로 완전히 설계되었습니다.
  • cURL처럼 -L이나 -o 옵션이 필요 없습니다. 그냥 wget [url]을 입력하면 끝입니다!
  • -r 옵션으로 재귀적 다운로드가 가능해 디렉터리의 모든 파일을 가져올 수 있습니다.
  • 일상적인 사용에 필요한 모든 기능을 갖추고 있어 일상적인 시스템 관리 작업에 적합합니다.
  • (리눅스에서) 의존성이 거의 없어 기본 상태로 바로 사용할 수 있습니다.

cURL

  • 원격 데이터 검색을 위한 방대한 옵션과 유용한 기능을 갖추고 있습니다.
  • 로컬 네트워킹(LDAP)과 네트워크 프린터(Samba)를 지원합니다.
  • gzip 압축 라이브러리와 잘 연동됩니다.
  • libcurl에 의존하므로 개발자가 cURL의 기능을 포함하는 소프트웨어나 bash 스크립트를 작성할 수 있습니다.

요약하면, Wget은 인터넷에서 자료를 가져오는 "만인의 도구함"이며, cURL은 여기에 더해 파워 유저와 시스템 관리자를 위한 세밀한 제어 기능을 제공합니다.

자주 묻는 질문

1. 리눅스에서 인증서 오류가 발생합니다. 어떻게 해결하나요?

"peer's certificate issuer has been marked as not trusted"와 같은 오류가 발생했다면, 가장 쉬운 해결 방법은 사용 중인 배포판의 공통 인증서 패키지를 재설치하는 것입니다.

Debian/Ubuntu 계열 시스템:

sudo apt reinstall ca-certificates

Fedora/CentOS/RHEL:

dnf reinstall ca-certificates

Arch 계열 시스템:

pacman -S ca-certificates

Arch에서는 인증서 패키지를 재설치하기 전에 pacman -Scc로 패키지 캐시를 정리하는 것이 좋습니다.

그래도 오류가 계속된다면 서버 쪽에 문제가 있을 가능성이 있습니다.

2. cURL과 bash 명령을 함께 실행해도 안전한가요?

리눅스 애플리케이션을 설치하는 가장 일반적인 방법은 아니지만, NodeJS 개발팀처럼 curl을 root 권한의 bash 명령(예: curl [argument] | sudo -E bash -)과 함께 사용하도록 강제하는 경우가 있습니다.

다소 위험해 보일 수 있지만, 해당 애플리케이션의 개발진이 신뢰할 만하다면 무언가를 망가뜨릴 가능성은 매우 낮습니다. 악의적인 공격자는 어디에나 있고 Arch의 AUR 같은 저장소에도 침투할 수 있으므로, root 권한 명령과 함께 curl을 사용하는 설치 방식이 패키지 관리자를 통하는 것보다 특별히 더 위험하다고 보기는 어렵습니다.

3. cURL을 Tor와 함께 사용할 수 있나요?

네! Tor Browser(또는 독립형 tor 서비스)를 실행한 후 --proxy 옵션을 사용하면 됩니다. Tor는 다른 애플리케이션에서 IP를 숨길 수 있는 로컬 프록시를 제공합니다. cURL을 Tor와 함께 사용하는 예시는 다음과 같습니다:

curl --proxy localhost:9050 https://example.com

독립형 Tor 서비스는 9050 포트를, Tor 브라우저는 9150 포트를 사용합니다.

마무리

cURL은 변화하는 리눅스 환경 속에서도 그 입지를 굳건히 지키며, 터미널 사용자에게 없어서는 안 될 중요한 도구로 자리 잡았습니다.

명령줄이 처음이라면 가장 유용한 리눅스 명령어들을 살펴보세요. 인터넷에서 데이터를 내려받는 대신 웹을 검색하고 싶다면 터미널에서 브라우징하는 방법도 있습니다.