본문 바로가기
linux

Linux에서 curl 마스터하기 | 주요 옵션 & HTTP 요청 실습 완전 가이드

by devcomet 2025. 9. 25.
728x90
반응형

Linux terminal displaying curl command with HTTP request visualization connecting to web servers
Linux에서 curl 마스터하기 ❘ 주요 옵션 & HTTP 요청 실습 완전 가이드

 

Linux에서 curl 명령어를 완벽하게 마스터하여 HTTP/HTTPS 요청부터 파일 다운로드까지 모든 웹 통신을 효율적으로 처리하는 실전 가이드입니다.

웹 개발자와 시스템 관리자라면 반드시 알아야 할 curl 명령어.

API 테스트부터 파일 전송까지, Linux 환경에서 가장 강력한 HTTP 클라이언트 도구인 curl의 모든 것을 상세히 알아보겠습니다.


curl이란 무엇인가

curl이란 무엇인가 섹션 이미지

 

curl(Client URL)은 다양한 프로토콜을 지원하는 강력한 명령줄 도구입니다.

HTTP, HTTPS, FTP, SFTP 등 20개 이상의 프로토콜을 지원하며, 웹 API 테스트와 파일 전송에 필수적인 도구로 자리 잡았습니다.

curl의 주요 특징

  • 다양한 프로토콜 지원: HTTP/HTTPS, FTP, SMTP, POP3 등
  • 크로스 플랫폼: Linux, Windows, macOS 모든 운영체제 지원
  • 풍부한 옵션: 200개 이상의 명령줄 옵션 제공
  • 스크립팅 친화적: 자동화와 배치 작업에 최적화

curl 설치법

curl 설치법 정리 이미지

 

대부분의 Linux 배포판에는 curl이 기본 설치되어 있습니다.

설치 여부를 확인하고 필요시 설치하는 방법을 알아보겠습니다.

설치 확인

curl --version

배포판별 설치 방법

배포판 설치 명령어
Ubuntu/Debian sudo apt update && sudo apt install curl
CentOS/RHEL sudo yum install curl 또는 sudo dnf install curl
Fedora sudo dnf install curl
Arch Linux sudo pacman -S curl
curl 설치 흐름도

사용자 → curl --version 입력
    ↓
설치 여부 확인
    ↓
미설치시 → 배포판별 설치 명령 실행
    ↓
설치 완료 → 버전 재확인

기본 curl 명령어 사용법

기본 curl 명령어 사용법 - 아키텍처 이미지

 

curl의 가장 기본적인 사용법부터 시작해보겠습니다.

기본 GET 요청

curl https://httpbin.org/get

이 명령어는 가장 간단한 HTTP GET 요청을 보냅니다.

응답 내용이 터미널에 직접 출력됩니다.

URL 구조 이해

curl "https://api.example.com/users?page=1&limit=10"

쿼리 파라미터가 포함된 URL은 따옴표로 감싸는 것이 안전합니다.

셸에서 특수문자를 올바르게 해석하기 위함입니다.


curl 명령어 옵션 정리

curl 명령어 옵션 정리 정리 이미지

 

curl의 강력함은 다양한 옵션에서 나옵니다.

실무에서 가장 자주 사용되는 핵심 옵션들을 체계적으로 정리했습니다.

출력 관련 옵션

-o (--output) 옵션

파일 이름을 지정하여 출력을 저장합니다.

curl -o result.json https://api.github.com/users/octocat

-O (--remote-name) 옵션

원격 파일명을 그대로 사용하여 저장합니다.

curl -O https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso

요청 방식 옵션

-X 옵션 (HTTP 메서드 지정)

curl -X POST https://httpbin.org/post
curl -X PUT https://httpbin.org/put
curl -X DELETE https://httpbin.org/delete

다양한 HTTP 메서드를 사용할 수 있습니다.

데이터 전송 옵션

-d (--data) POST 데이터 전송

curl -X POST -d "name=홍길동&age=30" https://httpbin.org/post
curl -X POST -d '{"name":"홍길동","age":30}' -H "Content-Type: application/json" https://httpbin.org/post

폼 데이터와 JSON 데이터 모두 전송 가능합니다.


Linux curl 사용 예제

Linux curl 사용 예제 정리 이미지

 

실제 개발 환경에서 자주 마주치는 상황별 curl 사용 예제를 살펴보겠습니다.

 

JSON API 호출 예제

# GitHub API에서 사용자 정보 조회
curl -H "Accept: application/json" https://api.github.com/users/torvalds

# JSON 데이터 POST 요청
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"testpass"}' \
  https://httpbin.org/post

인증이 필요한 API 호출

# Basic Auth 사용
curl -u username:password https://api.example.com/protected

# Bearer Token 사용
curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/data

쿠키 사용 예제

# 쿠키 저장
curl -c cookies.txt https://example.com/login

# 저장된 쿠키 사용
curl -b cookies.txt https://example.com/dashboard

curl HTTP/HTTPS 요청 방법

curl HTTP/HTTPS 요청 방법 정리 이미지

 

HTTP와 HTTPS 요청을 효과적으로 처리하는 방법을 알아보겠습니다.

HTTP 헤더 보기

-v (verbose) 옵션

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

상세한 요청/응답 정보를 확인할 수 있습니다.

요청 헤더, 응답 헤더, SSL 핸드셰이크 과정까지 모두 표시됩니다.

-I 옵션 (헤더만 조회)

curl -I https://google.com

응답 본문 없이 헤더 정보만 가져옵니다.

서버 상태 확인이나 헤더 검증에 유용합니다.

HTTPS 처리

-k (--insecure) 옵션

curl -k https://self-signed.badssl.com/

SSL 인증서 검증을 무시합니다.

개발 환경이나 자체 서명된 인증서 사용 시 활용됩니다.

SSL 정보 확인

curl -v --cert-status https://www.google.com

SSL 인증서 상태와 세부 정보를 확인할 수 있습니다.


curl 리디렉션 옵션 사용법

curl 리디렉션 옵션 사용법 정리 인포그래픽 이미지

 

웹에서 리디렉션은 매우 일반적입니다.

curl에서 리디렉션을 효과적으로 처리하는 방법을 알아보겠습니다.

-L (--location) 옵션

curl -L https://bit.ly/3shorturl

기본적으로 curl은 리디렉션을 따라가지 않습니다.

-L 옵션을 사용하면 최대 50번까지 리디렉션을 자동으로 따라갑니다.

리디렉션 제한 설정

curl -L --max-redirs 5 https://example.com

리디렉션 횟수를 제한할 수 있습니다.

무한 리디렉션 루프 방지에 효과적입니다.

리디렉션 과정 추적

curl -L -v https://bit.ly/example

verbose 옵션과 함께 사용하면 리디렉션 과정을 상세히 확인할 수 있습니다.

리디렉션 처리 과정

클라이언트 → 첫 번째 요청
    ↓
서버 → 302/301 응답 + Location 헤더
    ↓
curl -L 옵션 확인
    ↓
자동으로 새 위치로 요청
    ↓
최종 응답 수신

curl 파일 다운로드 & 업로드

파일 전송은 curl의 핵심 기능 중 하나입니다.

다양한 상황에서의 파일 처리 방법을 살펴보겠습니다.

파일 다운로드 최적화

진행률 표시

curl -# -O https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso

-# 옵션으로 진행률 막대를 표시할 수 있습니다.

다운로드 재개

curl -C - -O https://example.com/largefile.zip

-C - 옵션으로 중단된 다운로드를 재개할 수 있습니다.

네트워크가 불안정한 환경에서 매우 유용합니다.

파일 업로드 방법

단일 파일 업로드

curl -X POST -F "file=@document.pdf" https://httpbin.org/post

multipart/form-data 형식으로 파일을 업로드합니다.

여러 파일 동시 업로드

curl -X POST \
  -F "file1=@image1.jpg" \
  -F "file2=@image2.jpg" \
  -F "description=테스트 이미지들" \
  https://httpbin.org/post

FTP 파일 전송

# FTP 다운로드
curl -u username:password ftp://ftp.example.com/file.txt

# FTP 업로드
curl -T localfile.txt -u username:password ftp://ftp.example.com/

curl은 FTP 프로토콜도 완벽하게 지원합니다.

더 자세한 FTP 사용법은 curl FTP 공식 문서에서 확인할 수 있습니다.


고급 curl 활용법

실무 레벨의 고급 기능들을 살펴보겠습니다.

URL 인코딩 처리

# 자동 URL 인코딩
curl --data-urlencode "query=한글 검색어" https://httpbin.org/post

# 수동 URL 인코딩
curl "https://httpbin.org/get?q=%ED%95%9C%EA%B8%80"

한글이나 특수문자가 포함된 URL 파라미터 처리에 필수적입니다.

 

디버깅 옵션 활용

--trace 옵션

curl --trace trace.log https://httpbin.org/get

모든 네트워크 통신을 파일로 기록합니다.

문제 해결 시 가장 상세한 정보를 제공합니다.

--trace-ascii 옵션

curl --trace-ascii trace.txt https://httpbin.org/get

ASCII 형식으로 통신 내용을 기록합니다.

텍스트 에디터에서 쉽게 확인할 수 있습니다.

성능 측정

curl -w "@curl-format.txt" -o /dev/null -s https://www.google.com

 

curl-format.txt 파일 내용

     time_namelookup:  %{time_namelookup}\n
        time_connect:  %{time_connect}\n
     time_appconnect:  %{time_appconnect}\n
    time_pretransfer:  %{time_pretransfer}\n
       time_redirect:  %{time_redirect}\n
  time_starttransfer:  %{time_starttransfer}\n
                     ----------\n
          time_total:  %{time_total}\n

네트워크 성능과 응답 시간을 정밀하게 측정할 수 있습니다.


curl 실전 활용 시나리오

실제 개발 현장에서 마주치는 다양한 상황별 curl 활용법을 소개합니다.

REST API 테스트

# GET - 사용자 목록 조회
curl -H "Accept: application/json" https://jsonplaceholder.typicode.com/users

# POST - 새 게시물 작성
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"새 게시물","body":"내용","userId":1}' \
  https://jsonplaceholder.typicode.com/posts

# PUT - 게시물 수정
curl -X PUT \
  -H "Content-Type: application/json" \
  -d '{"id":1,"title":"수정된 제목","body":"수정된 내용","userId":1}' \
  https://jsonplaceholder.typicode.com/posts/1

# DELETE - 게시물 삭제
curl -X DELETE https://jsonplaceholder.typicode.com/posts/1

웹 스크래핑과 크롤링

# 웹페이지 다운로드
curl -A "Mozilla/5.0 (compatible; curl-bot)" https://example.com

# 특정 형식으로 저장
curl -o "page-$(date +%Y%m%d).html" https://news.ycombinator.com

User-Agent 설정으로 봇 차단을 우회할 수 있습니다.

모니터링 스크립트

#!/bin/bash
# 서버 상태 체크 스크립트

URL="https://your-api.com/health"
RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null $URL)

if [ $RESPONSE -eq 200 ]; then
    echo "서버 정상 작동 중"
else
    echo "서버 오류 발생: HTTP $RESPONSE"
    # 알림 발송 로직 추가
fi

시스템 모니터링과 헬스 체크에 활용할 수 있습니다.


curl 보안 고려사항

curl 사용 시 보안 측면에서 주의해야 할 점들을 알아보겠습니다.

 

SSL/TLS 설정

# 최신 TLS 버전 사용 강제
curl --tlsv1.2 https://secure-api.com

# 특정 암호화 방식 지정
curl --ciphers ECDHE-RSA-AES256-GCM-SHA384 https://secure-api.com

인증서 검증

# CA 번들 지정
curl --cacert /path/to/cacert.pem https://example.com

# 클라이언트 인증서 사용
curl --cert client.crt --key client.key https://secure-api.com

보안이 중요한 환경에서는 인증서 검증을 생략하지 않는 것이 중요합니다.

더 자세한 보안 설정은 curl 보안 가이드를 참조하시기 바랍니다.

민감한 정보 보호

# 환경변수 활용
curl -u "$USERNAME:$PASSWORD" https://api.example.com

# 설정 파일 사용
curl -K curl.conf https://api.example.com

curl.conf 파일 예시:

user = "username:password"
header = "Authorization: Bearer token"
url = "https://api.example.com/data"

커맨드 히스토리에 민감한 정보가 남지 않도록 주의해야 합니다.


문제 해결과 팁

curl 사용 중 자주 마주치는 문제들과 해결 방법을 정리했습니다.

일반적인 오류 해결

오류 메시지 원인 해결 방법
Connection refused 서버 미실행 또는 방화벽 차단 서버 상태 확인, 포트 확인
SSL certificate problem 인증서 문제 -k 옵션 사용 또는 인증서 업데이트
Could not resolve host DNS 문제 네트워크 연결 및 DNS 설정 확인
Operation timed out 타임아웃 --connect-timeout, --max-time 옵션 조정

성능 최적화 팁

# 연결 재사용
curl --keepalive-time 2 https://api.example.com

# 압축 사용
curl --compressed https://api.example.com

# 병렬 다운로드 (curl 7.66.0+)
curl --parallel --parallel-max 10 "https://example.com/file[1-10].txt"

스크립트 최적화

#!/bin/bash
# 효율적인 curl 스크립트 예제

# 공통 설정
CURL_OPTS="-s --fail --max-time 30 --retry 3"

# API 호출 함수
api_call() {
    local endpoint=$1
    local method=${2:-GET}

    curl $CURL_OPTS -X $method "https://api.example.com/$endpoint"
}

# 사용 예시
user_data=$(api_call "users/1")
echo $user_data

결론

curl 명령어 옵션, 지원 프로토콜, 크로스 플랫폼 정리 이미지

 

curl은 Linux 환경에서 HTTP 통신과 파일 전송을 위한 가장 강력하고 유연한 도구입니다.

기본적인 GET 요청부터 복잡한 API 테스트, 파일 업로드/다운로드까지 모든 웹 통신 작업을 효율적으로 처리할 수 있습니다.

핵심 포인트 정리

  • curl 명령어 옵션 정리: 200개 이상의 옵션 중 핵심 옵션들을 상황별로 활용
  • Linux curl 사용 예제: 실제 개발 환경에서의 다양한 활용 사례
  • curl HTTP/HTTPS 요청 방법: 보안과 성능을 고려한 요청 처리
  • curl 파일 다운로드 & 업로드: 효율적인 파일 전송 기법
  • curl 리디렉션 옵션 사용법: 자동 리디렉션 처리와 추적

지속적인 학습과 실습을 통해 curl의 모든 기능을 마스터하여, 더욱 효율적인 개발 환경을 구축하시기 바랍니다.

더 자세한 정보는 curl 공식 문서curl 튜토리얼에서 확인할 수 있습니다.


이 글이 도움이 되셨다면, Linux 시스템 관리와 웹 개발에 관련된 더 많은 유용한 정보를 확인해보세요.


같이 보면 좋은 글

 

무차별 대입 공격(Brute Force Attack) 차단: fail2ban과 리눅스 방화벽 연동 실전 가이드

fail2ban과 리눅스 방화벽을 연동하여 SSH 무차별 대입 공격을 자동으로 차단하고 서버 보안을 강화하는 실전 설정 방법과 모니터링 기법을 완벽 해설합니다.서버 관리자라면 누구나 한 번쯤 경험

notavoid.tistory.com

 

리눅스, 윈도우 특정 포트 사용 프로세스 확인 방법 - netstat 활용 가이드

리눅스와 윈도우에서 특정 포트를 사용하는 프로세스를 확인하고 포트 충돌 문제를 해결하는 netstat, lsof, tasklist 등의 명령어 활용법을 단계별로 안내합니다.포트 사용 프로세스 확인이 중요한

notavoid.tistory.com

 

gz 압축하기,압축풀기 명령어 총정리 - Linux & Windows 가이드

리눅스와 윈도우 환경에서 gz 파일을 압축하고 해제하는 모든 방법을 상세히 다루는 완전 가이드로, gzip 명령어 사용법부터 GUI 도구까지 실무에 필요한 모든 정보를 제공합니다.gz 파일이란 무엇

notavoid.tistory.com

 

grep 명령어 AND,OR,NOT 조건 사용법 총정리 - 리눅스 텍스트 검색 가이드

리눅스 grep 명령어의 AND, OR, NOT 조건을 활용한 다중 패턴 검색 방법과 실무 예제를 통해 효율적인 텍스트 검색 기법을 완벽 가이드로 제공합니다.개요 리눅스 시스템에서 텍스트 검색은 일상적

notavoid.tistory.com

 

개발 서버에 SSH 키 등록하고 접속 관리하기

개발자로서 서버에 안전하게 접속하는 것은 일상적인 작업 중 하나입니다.특히 원격 서버 관리와 코드 배포 과정에서 SSH(Secure Shell) 프로토콜은 필수적인 도구로 자리잡았습니다.이 글에서는 개

notavoid.tistory.com

 

728x90
반응형