curl이란 무엇인가?
curl은 'Client URL'의 약자로, URL 문법을 사용해 데이터를 전송/수신하는 CLI 유틸리티입니다. 웹 개발, API 테스팅, CI/CD 자동화, 운영 트러블슈팅 등 광범위한 영역에서 사용됩니다.
핵심 기능
- 다양한 프로토콜: HTTP/HTTPS, FTP/FTPS, SFTP, LDAP, SMTP/SMTPS 등(빌드 옵션에 따라 다름).
- HTTP 제어: 메소드, 헤더, 쿠키, 압축, HTTP/2, 리다이렉트, 타임아웃, 재시도 등 세밀 제어.
- 업/다운로드: 파일 다운로드(-o/-O), 이어받기(-C -), 폼 업로드(-F), 단일 파일 업로드(-T).
- 보안: TLS 인증서 검증(기본 활성), 신뢰루트 지정(--cacert), 클라이언트 인증서(--cert/--key).
- 자동화 친화성: 조용한 출력(-s), 실패 시 종료(-f), 형식화 출력(-w), 스크립트에 적합.
주요 옵션 (Shell)
가장 기본적으로 요청 대상 URL이 필요합니다. 여러 URL을 공백으로 나열하거나 파일(@file)에서 읽을 수도 있습니다.
1. 기본 요청 및 다운로드
2. HTTP 메소드 및 데이터 전송
3. 헤더, 인증, 쿠키
4. 출력 제어/신뢰성
5. 보안/TLS & 프록시/진단
6. 프로토콜/버전
7. 도움말/버전
생성된 명령어:
명령어를 조합해 보세요.
설명:
`curl` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 시나리오 예시 (Shell)
실무에서 자주 쓰는 요청 패턴을 모았습니다.
웹페이지 내용 출력
curl https://example.com
기본 GET 요청.
파일 다운로드(리다이렉트 추적)
curl -O -L https://wordpress.org/latest.zip
-O 원본 파일명, -L 리다이렉트 추적.
JSON GET + 예쁘게 보기
curl -s https://api.github.com/users/google | jq
jq로 파싱/가독성 향상.
JSON POST
curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' https://api.example.com/users
헤더와 본문 지정.
폼 파일 업로드(multipart)
curl -F "upload_file=@./my-image.png" https://example.com/upload
필드명=upload_file, 파일 경로를 @로 지정.
Bearer 토큰 인증
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/me
Authorization 헤더 사용.
응답 헤더만 확인
curl -I https://google.com
서비스 상태/캐시 진단에 유용.
실패 시 비제로 종료 + 조용하게
curl -sSf https://example.com/health
-sS -f 조합: 스크립트 친화적.
타임아웃 + 재시도
curl --connect-timeout 5 --max-time 20 --retry 3 --retry-all-errors https://example.com/api
불안정한 네트워크 대응.
특정 IP로 테스트(--resolve)
curl --resolve 'api.example.com:443:203.0.113.10' https://api.example.com/status
DNS 우회 테스트(SNI 유지).
설치
대부분 기본 제공되며, 없을 경우 패키지로 설치합니다.
Debian/Ubuntu
sudo apt update && sudo apt install -y curl
RHEL/CentOS/Fedora
sudo dnf install -y curl
Arch Linux
sudo pacman -S --needed curl
팁 & 주의사항
유용한 팁
- curl vs wget: wget은 대용량/재귀 다운로드에 강하고, curl은 API 상호작용/세밀 제어에 강함.
- 따옴표: -d/-H에 JSON/특수문자가 있으면 작은따옴표로 감싸기 권장.
- 압축 응답: --compressed를 사용하면 서버가 지원 시 자동 압축 해제되어 전송량 감소.
- 프록시: HTTP 프록시는 -x, SOCKS5는 --socks5로 설정.
- 보안 주의(-k): -k/--insecure는 개발·테스트 한정 사용. 운영에서는 신뢰 루트 설정 권장(--cacert).