cURL(Client URL)은 명령어 라인(Command Line)에서 URL을 이용해 데이터를 전송하는 데 사용되는 강력한 도구입니다. HTTP, HTTPS, FTP, SMTP 등 다양한 프로토콜을 지원하며, 주로 REST API 테스트 및 서버와의 통신을 확인할 때 매우 유용하게 사용됩니다.
이 블로그 포스트에서는 주요 HTTP Method(GET, POST, PUT, DELETE 등)를 중심으로 cURL 사용법과 함께 필수 옵션 조합 및 다양한 예시를 제공합니다.
💡 cURL 주요 옵션
| Short Option | Long Option | 설명 |
| -X | --request | 사용할 HTTP Method를 지정합니다. (예: POST, PUT, DELETE) |
| -H | --header | HTTP 헤더를 추가합니다. (예: Content-Type: application/json) |
| -d | --data | POST, PUT 등 요청 시 본문(Body) 데이터를 전송합니다. -d 사용 시 기본적으로 POST Method로 간주됩니다. |
| -v | --verbose | 요청 및 응답에 대한 상세한 정보를 출력합니다. 디버깅에 유용합니다. |
| -i | --include | 응답 본문과 함께 응답 헤더를 출력합니다. |
| -k | --insecure | SSL/TLS 인증서 검증을 무시하고 요청합니다. 자체 서명된 인증서 사용 시 유용합니다. |
| -L | --location | HTTP 3xx 응답 (리다이렉트) 발생 시 리다이렉트된 URL로 자동으로 재요청합니다. |
| -o | --output | 응답 내용을 지정된 파일로 저장합니다. |
| -O | --remote-name | 응답 내용을 원격 파일의 이름 그대로 파일로 저장합니다. |
1. GET 요청 (데이터 조회)
GET은 서버로부터 리소스(데이터)를 조회할 때 사용되는 Method입니다. 쿼리 파라미터는 URL에 포함되어 전송되며, 기본 cURL 요청 시 -X GET을 생략해도 GET으로 동작합니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| 기본 조회 | 가장 기본적인 GET 요청 | curl http://api.example.com/users |
| 쿼리 파라미터 | URL에 쿼리 파라미터를 추가하여 조회 | curl "http://api.example.com/products?category=book&limit=10" |
| 상세 출력 | 응답 헤더 및 상세 요청/응답 정보 출력 | curl -iv http://api.example.com/status |
| 리다이렉트 처리 | 301/302 응답 시 리다이렉션 따라가기 | curl -L http://example.com |
| 헤더 추가 | 특정 헤더(예: 인증 토큰)를 포함하여 요청 | curl -H "Authorization: Bearer token123" http://api.example.com/profile |
2. POST 요청 (데이터 생성)
POST는 서버에 새로운 리소스를 생성하거나 데이터를 전송할 때 사용됩니다. 데이터는 주로 요청 본문(Body)에 포함되어 전송됩니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| JSON 데이터 | JSON 형식의 데이터를 본문에 포함하여 전송 | curl -X POST -H "Content-Type: application/json" -d '{"name": "새상품", "price": 10000}' http://api.example.com/products |
| 폼 데이터 | URL-encoded 형식의 폼 데이터 전송 (-d 사용 시 기본 Content-Type은 application/x-www-form-urlencoded로 설정됨) | curl -d "username=user1&password=pass" http://api.example.com/login |
| 파일 업로드 | multipart/form-data 형식으로 파일 전송 | curl -X POST -F "image=@/path/to/local/file.jpg" http://api.example.com/upload |
| 파일 내용 전송 | @ 접두사를 사용하여 파일 내용을 요청 본문에 포함 | curl -X POST -H "Content-Type: application/json" -d @data.json http://api.example.com/users |
3. PUT 요청 (데이터 전체 수정/생성)
PUT은 기존 리소스 전체를 업데이트하거나, 해당 URI에 리소스가 없는 경우 새로운 리소스를 생성할 때 사용됩니다. 요청 본문(Body)에 업데이트할 전체 리소스의 데이터를 포함합니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| JSON 데이터 수정 | 지정된 ID 리소스의 전체 JSON 데이터를 업데이트 | curl -X PUT -H "Content-Type: application/json" -d '{"title": "수정된 타이틀", "content": "새로운 내용"}' http://api.example.com/posts/1 |
| 파일 내용으로 수정 | 파일 내용을 그대로 업데이트 데이터로 사용 | curl -X PUT -H "Content-Type: text/plain" -d @new_data.txt http://api.example.com/resource/2 |
4. DELETE 요청 (데이터 삭제)
DELETE는 지정된 리소스를 삭제할 때 사용됩니다. 일반적으로 요청 본문은 사용하지 않으며, URL로 리소스를 식별합니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| 기본 삭제 | 지정된 ID의 리소스 삭제 | curl -X DELETE http://api.example.com/users/5 |
| 상세 출력 | 삭제 요청의 상세 응답 확인 | curl -v -X DELETE http://api.example.com/items/10 |
5. HEAD 요청 (헤더 정보만 조회)
HEAD는 GET 요청과 동일하지만, 응답 본문 없이 헤더 정보만 받아올 때 사용됩니다. 리소스의 존재 여부나 메타데이터를 확인할 때 유용합니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| 기본 헤더 조회 | 응답 본문 없이 헤더만 출력 | curl -I http://api.example.com/largefile |
| 상세 헤더 조회 | 상세 요청/응답 정보와 헤더 출력 | curl -iv http://api.example.com/check |
6. OPTIONS 요청 (지원 Method 조회)
OPTIONS는 특정 URL에서 서버가 지원하는 HTTP Method (허용되는 작업)를 조회할 때 사용됩니다. 서버는 보통 Allow 헤더를 통해 지원 Method를 응답합니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| 지원 Method 조회 | 해당 리소스에 대해 지원되는 Method 확인 | curl -i -X OPTIONS http://api.example.com/users |
7. TRACE 요청 (메시지 루프백 테스트)
TRACE는 요청 경로를 따라 메시지 루프백 테스트를 수행하여 경로상의 프록시 등의 동작을 확인할 때 사용됩니다. 보안상의 이유로 비활성화된 경우가 많습니다.
필수 옵션 조합 및 샘플
| 옵션 조합 | 설명 | 샘플 Command |
| 기본 TRACE 요청 | 요청 메시지의 루프백 확인 | curl -i -X TRACE http://api.example.com |
8. Basic Authentication (기본 인증)
Basic Authentication은 HTTP 헤더에 사용자 이름과 비밀번호를 base64로 인코딩하여 전송하는 가장 기본적인 인증 방식입니다.
필수 옵션: -u 또는 --user
- 형식: -u [username]:[password]
- cURL이 자동으로 사용자 이름과 비밀번호를 인코딩하여 Authorization: Basic [encoded_credentials] 헤더를 생성해 전송합니다.
📝 샘플 Command
| 옵션 조합 | 설명 | 샘플 Command |
| GET 요청 | Basic Auth 정보를 포함하여 데이터 조회 | curl -u "user123:mypassword" http://api.example.com/secure/data |
| POST 요청 | Basic Auth와 JSON 데이터를 함께 전송 | curl -X POST -u "admin:secret" -H "Content-Type: application/json" -d '{"key": "value"}' http://api.example.com/secure/create |
9. Bearer Token Authentication (토큰 기반 인증)
Bearer Token 방식은 **JWT(JSON Web Token)**와 같은 토큰을 사용하여 인증하는, 최신 API에서 가장 널리 사용되는 방식입니다. 토큰은 일반적으로 Authorization 헤더에 Bearer 접두사와 함께 전송됩니다.
필수 옵션: -H 또는 --header
- 형식: -H "Authorization: Bearer [your_token_string]"
- 토큰이 만료되지 않았는지, 토큰 문자열이 정확한지 확인해야 합니다.
📝 샘플 Command
| 옵션 조합 | 설명 | 샘플 Command |
| GET 요청 | Bearer Token을 사용하여 데이터 조회 | curl -H "Authorization: Bearer abcdef1234567890" http://api.example.com/profile |
| DELETE 요청 | Bearer Token을 사용하여 리소스 삭제 | curl -X DELETE -H "Authorization: Bearer abcdef1234567890" http://api.example.com/resource/7 |
| 토큰 변수 사용 | 쉘 변수에 저장된 토큰 사용 | TOKEN="jwt_token_here" curl -H "Authorization: Bearer $TOKEN" http://api.example.com/info |
10. 기타 인증 방식: Digest, NTLM 등
cURL은 위 두 방식 외에도 다양한 인증 프로토콜을 지원합니다.
| 옵션 | 인증 방식 | 설명 | 샘플 Command |
| --digest | Digest | Basic Auth보다 안전한 다이제스트 인증 사용 | curl --digest -u "user:pass" http://api.example.com/digest |
| --ntlm | NTLM | Microsoft 기반 환경에서 주로 사용되는 NTLM 인증 사용 | curl --ntlm -u "DOMAIN\user:pass" http://intranet.company.com/resource |
댓글