cURL이란 무엇인가요?

curl의 사용법과 장점을 알아보세요. 필수 명령어들은 curl을 HTTP 요청 및 API 테스트를 위한 필수 도구로 만듭니다.
2 분 읽기
What is cURL blog image

curl(클라이언트 URL의 약자)은 특정 서버의 URL을 통해 데이터를 전송하는 데 사용되는 명령줄 도구입니다. curl은 접근성이 매우 높습니다: 명령줄 인터페이스(CLI)와 인터넷 연결만 있으면 되기 때문에 라우터, 프린터, 자동차, 의료 기기 등 다양한 분야에서 널리 사용됩니다. 심지어 화성에서도 사용됩니다.

대부분의 개발자에게 curl은 어떤 운영체제에서든 백엔드 서비스를 빠르게 테스트할 수 있는 훌륭한 도구입니다.

이 글에서는 curl에 대해 자세히 알아보고 사용법을 배울 수 있습니다.

curl의 역사

curl은 1996년 브라질 개발자 Rafael Sagula가 처음 개발 및 배포했으며, 첫 출시 직후 Daniel Stenberg가 프로젝트를 인수하여 웹에서 환율을 자동으로 가져올 수 있도록 일부 조정을 구현했습니다.

초기에는 httpget이라는 이름으로 시작했습니다. 지원 프로토콜이 늘어남에 따라 urlget으로 변경되었고, 업로드 기능을 지원할 정도로 프로젝트가 성장한 1998년에 최종적으로 curl이라는 이름이 정착되었습니다.

성장은 여기서 멈추지 않았습니다. 수년간 curl은 25개 이상의 프로토콜과 여러 기능을 지원하게 되었으며, 매월 수억 건의 요청을 처리합니다. 현재 curl은 전 세계 자원봉사자 커뮤니티가 유지 관리하는 오픈소스 프로젝트입니다.

curl의 기능

curl의 명령줄 도구는 개발자들 사이에서 빠른 HTTP 요청을 수행하여 테스트 및 디버깅 작업을 용이하게 하는 능력으로 유명합니다. 컴퓨터 터미널에서 간단한 명령을 실행함으로써 curl은 GET, POST 또는 지정된 API가 지원하는 기타 HTTP 요청을 수행할 수 있습니다.

사용자들은 주로 curl의 명령줄 도구와 상호작용하지만, 작업의 가장 어려운 부분은 libcurl이라는 개발 라이브러리가 처리합니다. 이 방대한 라이브러리는 대부분의 코드베이스를 지원합니다. curl 프로젝트의 이 핵심 부분은 요청과 응답을 처리하며 배경에서 작동합니다.

curl 사용 방법

curl 명령줄을 사용하려면 이를 실행할 CLI(macOS의 Mac 터미널, Windows의 명령 프롬프트, Linux의 Bash 등)와 인터넷 연결이 필요합니다. 이를 통해 컴퓨터가 명령을 완료하고 결과를 표시하며 응답이 있을 경우 이를 읽을 수 있습니다.

각 curl 명령어는 간단한 구문을 따릅니다:

curl [옵션] [URL]

이 구문에서 [URL]은 요청을 보낼 엔드포인트이며, [OPTIONS] 은 수행할 HTTP 요청 유형을 결정하는 명령어입니다. 기본 형식은 대시( -) 뒤에 문자(예: -d)를 붙이거나, 더 자세한 형식으로 이중 대시(–) 뒤에 단어를 붙이는 것입니다(예: --data). 또한 -X [METHOD] 구문(예: -X POST)을 사용하여 HTTP 메서드를 지정할 수 있습니다.

모든 개발자가 알아야 할 몇 가지 curl 명령어는 다음과 같습니다.

GET 요청 전송

가장 흔한 HTTP 요청 형태는 GET 요청입니다. 주로 지정된 주소에서 텍스트, 이미지, 파일 등의 데이터를 가져오는 데 사용됩니다. curl GET 요청 명령어의 기본 구문은 curl [URL]입니다. 여기서 옵션이 지정되지 않은 이유는 GET이 curl 명령어에 정의된 암시적 기본 동작이기 때문입니다.

샘플 URL https://dummyjson.com/products을 사용해 curl로 이 엔드포인트에 GET 요청을 수행하는 예시는 다음과 같습니다:

curl https://dummyjson.com/products

이 명령어의 결과는 다음과 같습니다:

curl GET request output

그러나 모든 GET 요청이 이렇게 쉽게 수행되는 것은 아닙니다. 일부는 매개변수가 필요하며, URL에 지정할 수도 있지만 curl의 적절한 구문을 사용하는 것이 더 쉽습니다. -G를 추가하여 GET 요청을 지정한 후 필요한 매개변수 수만큼 -d "매개변수1=값1"을 추가합니다. 구문은 다음과 같아야 합니다: curl -G -d "parameter1=value1" -d "parameter2=value2" https://yoururl.com/yourendpoint.

이전과 동일한 URL로 GET 요청을 보내되, 한 번에 가져올 수 있는 데이터의 최대 개수를 1개로 제한하려면 다음과 같이 설정합니다:

curl -G -d "limit=1" https://dummyjson.com/products

curl은 이 명령을 사용하여 기본 URL과 설정한 매개변수를 활용해 GET 요청을 보낼 완전한 URL (https://dummyjson.com/products?limit=1 )을 구성합니다.

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

curl GET request output with parameter

curl은 강력하지만 요청에서 받은 출력을 포맷팅하지 않습니다. Mac에서는 명령줄에 | json_pp를 추가하여 응답을 깔끔하게 표시할 수 있습니다:

curl GET request output prettified

Windows에는 사전 설치된 도구가 없으므로 jq 같은 도구를 설치하고 | jq 단축어를 사용해 예쁘게 포맷된 JSON을 얻을 수 있습니다.

또한 내장 프로그래밍 언어로 curl 요청을 처리할 수 있다는 점도 참고하세요. 예를 들어, 이 블로그에서 PHP를 사용한 GET 요청 관리에 대해 자세히 알아볼 수 있습니다.

POST 요청 전송

또 다른 자주 사용되는 HTTP 요청은 POST로, 서버에 데이터를 전송하고 업데이트합니다.

curl을 사용한 POST 요청의 기본 구문은 curl -X POST [URL]입니다. 이 유형의 요청은 데이터 본문을 포함하지 않은 POST 요청을 전송하며, 데이터베이스 내 항목의 상태 업데이트만을 목적으로 요청을 수행할 때 유용할 수 있습니다. 예를 들어, 샘플 URL https://httpbin.org/anything을 사용하여 다음 명령어로 간단한 POST 요청을 수행할 수 있습니다:

curl -X POST https://httpbin.org/anything

대부분의 경우 데이터를 업로드해야 합니다. 이를 위해 먼저 curl에 전송할 데이터 본문의 형식을 지정하여 읽는 방법을 알려줍니다. 헤더는 -H '헤더: 값' 명령어로 추가하고, 요청 본체는 -d '값' 명령어로 삽입합니다 . 전체 구문은 다음과 같습니다: curl -X POST -H '헤더: 값' -d '값' [URL].

이름과 성을 포함한 JSON 본문을 전송하려면 Content-Type으로 콘텐츠 형식을 JSON으로 정의하고 간단한 JSON을 데이터로 지정할 수 있습니다:

curl -X POST -H "Content-Type: application/json" -d "{
    "FirstName": "Joe",
    "LastName": "Soap"
}" https://httpbin.org/anything

앞서 실행한 명령어의 출력 결과는 다음과 같습니다:

curl POST request output

보시다시피, data 필드에는 요청에서 전송한 데이터 본문이 포함됩니다.

버전 7.82부터 curl은 --json 단축 명령을 도입하여 JSON 본문을 포함한 POST 요청을 curl --json '[JSON 본체]' [URL] 형식으로 간소화했습니다. --json 단축 명령을 사용하여 이전과 동일한 작업을 수행하는 명령은 다음과 같습니다:

curl --json '{"FirstName": "Joe", "LastName": "Soap"}' https://httpbin.org/anything

또는 긴 JSON 본문을 로컬 파일에 저장하여 사용하려는 경우, curl --json @[파일명].txt [URL] 구문을 사용하여 해당 파일을 업로드할 수 있습니다:

curl --json @file-name.txt https://httpbin.org/anything

서버에 데이터를 업로드하는 방법에는 여러 가지가 있습니다. 예를 들어 다른 형식이 필요하거나 웹에 파일을 업로드해야 할 수 있습니다. curl을 사용한 POST 요청에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

프록시 서버를 통한 연결

많은 개발자가 보안 강화를 위해 프록시 서버를 사용합니다. 방화벽과 마찬가지로 신뢰할 수 있는 프록시 서버는 사용자와 네트워크를 인터넷상의 잠재적 위협으로부터 보호합니다. 또한 향상된 개인 정보 보호 기능을 제공합니다.

프록시 서버를 올바르게 사용하려면 프록시에 대한 다음 정보가 필요합니다:

  • http://과 같은 프로토콜
  • 호스트(일반적으로 점으로 구분된 네 개의 숫자, 예: 71.00.00.00)
  • 포트 번호(일반적으로 4자리 숫자, 예: 0000)
  • 사용자 이름과 비밀번호 형태의 인증 정보(선택 사항)

프록시 URL 구문은 [PROTOCOL]://[[USERNAME]:[PASSWORD]][HOST]:[PORT] 형식을 따릅니다. 인증 정보로 보호되지 않는 프록시의 경우 [PROTOCOL]://[HOST]:[PORT] 형식입니다.

프록시 URL을 확보한 후에는 -x 명령어를 사용하여 curl에 설정할 수 있습니다. 이는 사용자 정의 HTTP 요청 메서드를 지정하는 -X와 다르다는 점에 유의하십시오. (curl은 대소문자를 구분합니다.) 기억하기 편하다면 더 자세한 옵션인 --proxy를 사용할 수도 있습니다. 두 명령어 모두 프록시 URL과 최종 URL을 뒤에 따라야 합니다.

위 사항을 고려하면 프록시 URL 설정용 curl 명령어는 다음과 유사해야 합니다:

curl --proxy "http://71.00.00.00:0000" https://httpbin.org/ip

응답에는 origin 객체가 포함되어야 하며, 그 값은 프록시의 호스트 IP 주소와 일치해야 합니다:

{

  "origin": "71.00.00.00"

}

이는 웹사이트가 요청이 사용자의 컴퓨터가 아닌 프록시 IP 주소에서 온 것으로 인식함을 의미합니다.

프록시와 함께 curl을 사용하는 방법에 대한 자세한 내용은 이 블로그를 참조하세요.

헤더 사용

아시다시피, 일부 HTTP 요청은 작업을 올바르게 완료하기 위해 추가 정보가 필요합니다. 예를 들어, 이전 POST 요청에서 Content-Type 헤더를 사용하여 curl이 업로드한 데이터 본문을 어떻게 읽어야 하는지 알렸습니다.

항상 -H 명령어가 앞에 붙는 헤더는 여러 다른 경우에도 사용할 수 있습니다.

일반적인 헤더 유형 중 하나는 Authorization: Bearer [TOKEN]으로, 보호된 URL에 대한 인증 및 접근을 위한 베어러 토큰을 지정합니다. 또 다른 흔히 사용되는 헤더는 Accept: application/json으로, JSON 응답 선호도를 지정합니다.

URL에 대한 응답 헤더 목록을 확인하려면 터미널에서 다음과 같이 -I curl 명령어를 사용하면 됩니다:

curl -I https://dummyjson.com/products

-i 옵션을 사용하면 헤더와 함께 요청에 대한 응답을 표시할 수도 있습니다.

헤더에 대한 자세한 내용은 이 블로그에서 확인할 수 있습니다.

출력 저장하기

때로는 데이터를 읽는 것만으로는 부족하고, 해당 출력을 컴퓨터의 특정 위치에 저장해야 할 때가 있습니다. 앞서 언급했듯이 curl은 텍스트 형식 이외의 데이터도 처리할 수 있습니다. 예를 들어, 전체 파일을 다운로드하거나 업로드할 수 있습니다.

-o 명령어를 사용하면 저장할 파일의 이름과 위치를 지정할 수 있습니다. 예를 들어, 이 페이지의 내용을 TXT 형식으로 데스크탑에 저장하려면 다음 명령어를 사용할 수 있습니다:

curl -o /Users/User/Desktop/file.txt https://brightdata.com/blog

이 명령어를 실행한 후 데스크탑을 열어 새로 저장된 파일을 확인하세요.

파일 업로드

curl이 웹에서 파일을 다운로드할 수 있는 것처럼, 파일을 업로드하는 것도 가능합니다. 텍스트 형식이 아닌 실제 파일로 업로드한다는 것을 curl에 알리기 위해 파일 이름 앞에 @ 기호를 붙여야 합니다.

많은 개발자들이 curl을 사용해 서버에 파일을 업로드할 때 -X POST 플래그만 사용하면 된다고 오해합니다. 그러나 파일 업로드는 일반적으로 폼의 일부로 첨부되므로 multipart/form-data 콘텐츠 타입이 필요합니다. 따라서 -X POST 플래그와 함께 올바른 헤더 타입을 설정해야 합니다. -F 플래그는 올바른 콘텐츠 타입 헤더를 설정하며, -X POST 플래그는 자동으로 설정됩니다. 이로 인해 더 짧고 간단한 명령어를 사용할 수 있습니다.

-F 플래그를 사용하면 폼 필드의 값을 지정하여 폼을 제출할 수 있습니다. 파일을 폼 필드로 첨부하려면 파일 이름 앞에 @ 기호를 사용하세요.

올바른 구문은 curl -F "file=@[파일 경로]/[파일 이름].txt" [URL]이며, 여기서 file은 양식 내 파일 필드의 이름입니다. 예를 들어, 이전에 다운로드한 파일을 https://example.com/upload과 같은 가짜 URL에 업로드하려는 경우 명령어는 다음과 같아야 합니다:

curl -F "file=@/Users/User/Desktop/file.txt" https://example.com/upload

여러 파일을 업로드하려면 URL 정의 앞에 원하는 만큼 -F 명령어 구문을 반복하면 됩니다.

curl 사용 사례

높은 호환성과 다용도성 덕분에 curl은 다양한 시나리오에서 활용될 수 있습니다.

가장 일반적인 용도는 API 테스트, 웹 서비스와의 상호작용, GET 또는 POST와 같은 다양한 HTTP 작업을 수행하기 위한 HTTP 클라이언트로 사용됩니다. 수많은 프로그래밍 언어들도 내부적으로 HTTP 요청을 수행하기 위해 libcurl을 사용합니다.

curl은 주로 HTTP 요청을 수행하고 응답을 가져오는 데 중점을 두지만, 수신된 콘텐츠를 구문 분석하고 처리하기 위해 다른 도구 또는 스크립트와 결합할 수도 있습니다. 예를 들어, 웹 스크래핑의 일환으로 웹 페이지의 HTML 콘텐츠를 가져올 수 있습니다.

curl의 장점

curl은 많은 장점을 제공합니다. 가장 두드러진 것은 거의 모든 장치에서 사용할 수 있는 높은 호환성과 익히기 쉽고 숙달하기 쉬운 구문입니다.

또한 curl은 기능이 풍부하고 다재다능하며 빠르고 특히 가볍기 때문에 CPU에 과부하를 주지 않고 작업을 수행할 수 있습니다.

결론

이 글에서는 curl의 역사, 작동 방식, 사용 사례 및 장점에 대해 자세히 알아보았습니다. 또한 curl로 가장 기본적인 명령어 몇 가지를 수행하는 방법도 살펴보았습니다.

웹 스크래핑을 더 빠르게 수행하는 방법에 관심이 있다면 Bright Data 웹 스크래퍼 API를 꼭 확인해 보세요. 지금 무료 체험판에 가입하세요!

관심이 있을 수 있습니다.

Web Data

데이터셋이란 무엇인가? 결정적 가이드

이 글에서는 데이터셋의 정의, 데이터셋의 유형, 그리고 데이터를 최대한 활용하는 방법을 다룹니다.
1 분 읽기
What is a headless browser and what is it used for?
Proxy 101

헤드리스 브라우저란 무엇이며 어떤 용도로 사용되나요?

헤드리스 브라우저는 그래픽 요소를 건너뛰고 ‘명령줄’로 바로 접근하므로 더 효율적인 데이터 수집에 활용될 수 있습니다. 자동화 요소를 추가하면 대상 사이트 성공률 향상, 사용자 에이전트 로테이션 관리, 쿠키 데이터베이스 수집 불필요화 등에 도움이 됩니다.
1 분 읽기
Robot managing servers connected to the internet.
Web Data

웹 크롤러란 무엇인가요?

웹 크롤러는 인터넷 인프라의 핵심 요소이며 웹 스크래핑의 첫 단계 중 하나입니다. 본 문서에서는 다음을 다룹니다: 웹 크롤러 정의 웹 크롤러는 인터넷을 스캔하여 발견한 데이터를 다운로드하는 소프트웨어 로봇입니다. 대부분의 웹 크롤러는 Google, Bing, Baidu, DuckDuckGo와 같은 검색 엔진에서 운영합니다. 검색 엔진은 수집된 데이터에 자체 검색 알고리즘을 적용하여 검색 엔진 색인을 생성합니다. 이 색인을 통해 검색 엔진은 사용자의 검색 쿼리에 기반하여 관련성 높은 링크를 제공할 수 있습니다. 특정 목적을 수행하는 웹 크롤러도 존재합니다 […]
1 분 읽기