리눅스 curl 명령어 실무 완벽 가이드 - API 테스트부터 대용량 파일 다운로드까지 한 번에 끝내기

개요

서버 환경이나 개발 실무에서 빠질 수 없는 필수 네트워크 도구인 curl 명령어의 핵심 사용법을 소개합니다. 기본 웹 요청부터 REST API 호출, 헤더 분석, 백그라운드 파일 전송까지 실무에서 매일 쓰이는 실전 예제를 단계별로 살펴봅니다.

1. 환경 준비 및 웹 응답 데이터 확인하기 (GET 요청)

curl 실습 진행을 위해 패키지 목록을 최신화하고 curl 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y curl

curl 명령어는 네트워크를 통해 URL 기반으로 데이터를 전송하거나 받아오는 도구입니다.
별도의 옵션 없이 URL을 지정하면 대상 서버로 기본 HTTP GET 요청을 보내고 응답 본문을 터미널 화면에 그대로 출력합니다.
⚙️ [주요 옵션]

-s : 진행 상황 표시줄이나 에러 메시지를 출력하지 않는 조용한 모드(silent)로 실행합니다.
-i : 응답 본문과 함께 서버가 반환한 HTTP 응답 헤더를 함께 출력합니다.
-I : 응답 본문 없이 HTTP 응답 헤더 정보만 가져와 출력합니다.
-X : GET, POST, PUT, DELETE 등 사용할 HTTP 요청 메서드를 직접 지정합니다.
-d : HTTP POST 요청 시 서버로 전송할 본문 데이터(body)를 전달합니다.
-H : 요청 시 커스텀 HTTP 헤더를 추가하여 전송합니다.
-o : 다운로드한 응답 데이터를 지정한 파일 이름으로 저장합니다.
-O : 원격 서버의 파일 이름과 동일한 이름으로 로컬에 저장합니다.
-C - : 중단된 대용량 파일 다운로드를 이어받기(resume) 방식으로 재개합니다.
-L : 서버에서 3xx 리다이렉트 응답을 반환할 경우 최종 목적지 URL까지 자동으로 따라갑니다.

curl https://httpbin.org/get

-s 옵션은 진행률 바(progress meter)나 오류 메시지를 숨기고 순수 응답 결과 데이터만 깔끔하게 출력합니다.
불필요한 출력 정보를 제거하므로 쉘 스크립트 작성이나 다른 명령어와 파이프라인(|)으로 연계할 때 유용합니다.

curl -s https://httpbin.org/ip

2. HTTP 응답 헤더 및 상태 코드 분석하기

-I 옵션을 사용하면 응답 본문(body)을 다운로드하지 않고 서버의 HTTP 응답 헤더 정보만 빠르게 조회합니다.
서버 상태 코드(예: HTTP/2 200), 콘텐츠 타입, 서버 종류 등을 점검할 때 네트워크 대역폭을 낭비하지 않고 신속하게 확인할 수 있습니다.

curl -I https://httpbin.org/get

-i 옵션은 서버로부터 전달받은 HTTP 응답 헤더와 실제 응답 본문 데이터를 한 화면에 함께 출력합니다.
헤더 정보와 응답 본문 데이터를 동시에 대조하며 API 응답 결과를 분석하거나 디버깅할 때 유용합니다.

curl -i https://httpbin.org/status/200

-s 옵션으로 진행 상태 표시를 숨기고, -o /dev/null로 응답 본문을 버린 뒤, -w 옵션을 통해 원하는 포맷의 HTTP 상태 코드만 추출합니다.
서버의 정상 동작 여부를 확인하는 헬스 체크나 쉘 스크립트 기반 자동화 로직에서 조건 분기를 처리할 때 핵심적으로 활용됩니다.

curl -s -o /dev/null -w “HTTP 상태 코드: %{http_code}\n” https://httpbin.org/status/200

3. REST API 데이터 전송 및 인증 처리 (POST/JSON 요청)

API 응답으로 반환되는 JSON 데이터를 터미널에서 가독성 높게 파싱하고 다루기 위해 jq 패키지를 설치합니다.

sudo apt-get install -y jq

-X POST로 HTTP 메서드를 지정하고, -H 옵션으로 JSON 헤더(Content-Type: application/json)를 추가한 뒤 -d로 JSON 데이터를 전송합니다.
서버로 전달한 JSON 페이로드가 정상 수신되었는지 파이프라인(|)과 jq 명령어를 통해 응답 본문에서 직관적으로 확인합니다.

curl -X POST https://httpbin.org/post -H “Content-Type: application/json” -d ‘{“service”:“backend”,“status”:“active”}’ | jq .json

-H 옵션을 활용하여 Authorization: Bearer <토큰> 인증 헤더를 요청에 포함해 전송합니다.
토큰 기반 인증(JWT, API Key 등)을 요구하는 보호된 API 엔드포인트 호출 시 필요한 인증 정보가 올바르게 전달되었는지 확인합니다.

curl -H “Authorization: Bearer sample_token_12345” https://httpbin.org/headers | jq .headers

4. 대용량 파일 다운로드 및 전송 관리 (이어받기/진행률)

파일 다운로드 실습을 위한 작업 디렉터리를 생성하고 해당 위치로 이동합니다.

mkdir -p ~/curl-demo && cd ~/curl-demo

-o 옵션을 사용하여 원격 서버에서 내려받은 바이너리 데이터를 sample-100k.bin이라는 지정된 파일 이름으로 저장합니다.
터미널 화면에 바이너리 내용이 직접 출력되는 현상을 방지하고 원하는 파일명으로 결과를 안전하게 보관할 수 있습니다.

curl -o sample-100k.bin https://httpbin.org/bytes/102400

-C - 옵션을 지정하여 기존 파일의 크기를 자동으로 확인하고 중단된 위치부터 이어받기를 수행하며, -O 옵션을 함께 사용하여 원격 파일명 그대로 저장합니다.
네트워크 연결이 불안정하거나 대용량 파일을 다운로드할 때 처음부터 다시 받지 않고 효율적으로 전송을 이어갈 수 있습니다.

curl -C - -O https://httpbin.org/bytes/102400

ls -lh 명령어로 다운로드한 sample-100k.bin 파일의 크기와 상세 정보를 확인하여 요청한 용량만큼 온전하게 저장되었는지 검증합니다.

ls -lh ~/curl-demo/sample-100k.bin

지금까지 리눅스 curl 명령어의 기본 사용법부터 실무 API 테스트와 대용량 파일 다운로드 방법까지 간단하게 정리해보았습니다.
알려드린 핵심 옵션들을 실무 작업과 쉘 스크립트 자동화에 적극 활용해 효율적인 개발 환경을 구축해 보시기 바랍니다.