백엔드 개발자나 API 통신을 다루는 사람이라면 터미널에서 자주 사용하는 도구 cURL(Client URL)에 대해 정리했다.
1. cURL이란?
cURL은 서버와 네트워크를 통해 데이터를 전송하거나 받을 때 사용하는 커맨드 라인(Command Line) 도구이다.
웹 브라우저가 없어도 터미널에서 HTTP, HTTPS, FTP 등 다양한 프로토콜을 이용해 통신할 수 있어, API 서버 개발 후 테스트를 하거나 스크립트를 작성할 때 필수적으로 사용된다.
2. 왜 cURL을 사용할까?
- CLI 환경 최적화: GUI 도구(Postman 등)를 무겁게 띄우지 않아도 터미널만으로 빠르게 API 요청을 테스트할 수 있다.
- 스크립트 자동화: 쉘 스크립트에 포함하여 주기적인 데이터 수집이나 서버 헬스체크를 자동화하기에 매우 좋다.
- 높은 호환성: 대부분의 Mac이나 Linux 환경에 기본적으로 설치되어 있어 별도의 설정 없이 바로 사용할 수 있다.
3. 기본 구조 및 핵심 옵션 요약
가장 많이 활용하는 HTTP 요청을 기준으로, 기본 구조는 다음과 같다.
기본 구조:
curl [옵션] [URL]
| 옵션 | 설명 | 예시 |
|---|---|---|
-X |
요청 메소드 지정 (GET, POST, PUT, DELETE 등) | -X POST |
-H |
헤더(Header) 추가 (인증, Content-Type 등) | -H "Content-Type: application/json" |
-d |
데이터(Body) 전송 | -d '{"key":"value"}' |
-i |
응답 헤더(Response Header)를 포함하여 출력 | -i |
-v |
상세 과정(Request/Response 전체) 디버깅 출력 | -v |
-O |
URL의 원본 파일명 그대로 다운로드 | -O |
-o |
지정한 파일명으로 다운로드 | -o filename.ext |
4. 실전! 자주 사용하는 명령어 패턴
앞서 살펴본 옵션들을 조합하여 실무에서 가장 자주 쓰는 패턴 5가지를 정리했다.
① 기본 GET & DELETE 요청 (조회/삭제)
-X 옵션으로 HTTP 메서드를 지정한다. 옵션을 생략하면 기본값인 GET으로 동작한다.
# GET 요청 (웹페이지 또는 API 단순 조회)
curl https://api.example.com/users
# DELETE 요청 (특정 리소스 삭제)
curl -X DELETE https://api.example.com/users/1
② POST 요청 (JSON 데이터 전송)
API 개발 시 가장 많이 테스트하는 패턴이다. -H로 데이터 타입을 명시하고, -d로 본문(Body)을 보낸다.
💡 Mac 터미널 팁: JSON 데이터를 감쌀 때는 바깥쪽에 작은따옴표(‘)를 사용하는 것이 내부 큰따옴표와의 충돌(파싱 에러)을 방지해 주어 훨씬 편리하다!
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Seohyun", "role": "AI Developer"}'
③ 인증 토큰(Authorization) 포함 요청
JWT나 API Key와 같은 인증 정보가 필요할 때 -H 옵션을 추가하여 전송한다.
# JSON 타입 명시 및 Bearer 토큰 포함
curl -X GET https://api.example.com/secure-data \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
④ 파일 다운로드
-O(대문자)와 -o(소문자)를 상황에 맞게 활용하여 파일을 터미널에서 바로 다운로드할 수 있다.
# 대문자 O: 원본 이름(sample-image.png) 그대로 현재 폴더에 저장
curl -O https://example.com/sample-image.png
# 소문자 o: 내가 원하는 이름(my_image.png)으로 변경하여 저장
curl -o my_image.png https://example.com/sample-image.png
⑤ 디버깅 (요청/응답 상세 확인)
통신이 실패하거나 어떤 헤더가 오고 가는지 세밀하게 확인해야 할 때 필수적인 옵션입니다.
# -v (verbose): 요청(Request)과 응답(Response)의 모든 통신 과정을 출력
curl -v https://api.example.com
처음에는 터미널 환경이 낯설지만, 익숙해지면 키보드만으로 모든 API 통신을 제어할 수 있다.
직접 터미널을 열고 실행해보자!