curl 명령어 생성기

HTTP 메서드, URL, 헤더, 본문, 인증 옵션으로부터 실제로 작동하는 curl 명령어를 만듭니다 — 올바른 셸 인용 처리가 자동으로 적용되며, 클릭 한 번으로 복사할 수 있습니다.

조회수 241회

curl의 간략한 역사

curl은 1998년 스웨덴 개발자 다니엘 스텐베리(Daniel Stenberg)가 만들었습니다. 그는 스웨덴의 한 채팅 채널에서 IRC 봇을 위해 환율을 자동으로 가져오려고 첫 번째 버전을 작성했는데, 이는 인프라를 구축하겠다는 원대한 계획이 아니라 작고 개인적인 필요에서 시작된 것이었습니다. 사람들이 더 많은 프로토콜과 옵션을 계속 요청하면서, 이 작은 도구는 HTTP, HTTPS, FTP, 그리고 이후 수십 가지 다른 프로토콜을 통해 데이터를 전송하는 범용 명령줄 도구로 성장했습니다. 스텐베리는 그 이후로 사실상 curl의 전체 역사에 걸쳐 수석 관리자로 남아 있습니다. 오늘날 curl은 macOS와 사실상 모든 리눅스 배포판에 기본으로 포함되어 있으며, 2018년부터는 Windows 10 이상에도 기본 탑재되어 있습니다. 라우터와 자동차부터 게임 콘솔, API와 통신하는 거의 모든 지속적 통합(CI) 파이프라인에 이르기까지 전 세계 수십억 대의 기기에서 실행되고 있는 것으로 추정됩니다. 좁고 개인적인 문제 하나를 해결하려던 시도로 시작된 이 도구는 오늘날 아마도 존재하는 가장 널리 배포된 명령줄 HTTP 클라이언트이며, 인터넷이 조용히 가장 크게 의존하는 오픈소스 소프트웨어 중 하나가 되었습니다.

이 도구가 생성하는 플래그 이해하기

curl은 기본적으로 HTTP 리디렉션을 따라가지 않습니다. 서버가 301이나 302 상태 코드와 다른 곳을 가리키는 Location 헤더로 응답하면, 기본 curl은 그 리디렉션 응답이나 빈 본문을 출력하고 멈춥니다. 웹 브라우저가 조용히 하는 것처럼 새 URL을 자동으로 따라가지 않습니다. 이는 curl을 처음 쓰는 매우 많은 사용자를 당황하게 만듭니다: 브라우저에서는 완벽하게 작동하는 URL이 curl에서는 뚜렷한 이유 없이 혼란스러운 빈 응답이나 잘못된 응답을 반환하는데, 이는 단지 브라우저가 curl이 따라가지 않은 리디렉션을 따라갔기 때문입니다. 해결책은 curl에게 리디렉션 체인을 최종 목적지까지 따라가라고 지시하는 -L(--location) 플래그입니다. 이는 매우 흔한 요구 사항이라, 많은 개발자가 리디렉션 동작 자체를 의도적으로 테스트하는 경우가 아니라면 기본적으로 -L을 사용합니다.

명령에 공백, 따옴표, 또는 셸 특수 문자($, &, ;, 백틱)가 포함된 헤더나 본문 내용이 들어가는 순간, 인용 방식은 더 이상 사소한 문제가 아니게 됩니다 — 이는 제대로 작동하는 요청과 curl에 도달하기도 전에 셸이 망가뜨리는 요청 사이의 차이를 만듭니다. 따옴표 없이 입력한 Authorization: Bearer abc 123 같은 헤더는 셸에 의해 공백에서 분리되어, curl은 하나가 아니라 Authorization:Bearer라는 두 개의 분리되고 깨진 인수를 받게 됩니다. 전체 값을 작은따옴표로 감싸면 셸에게 공백을 포함해 내부의 모든 것을 문자 그대로 다루라고 지시할 수 있습니다 — 하지만 작은따옴표 자체는 문자 그대로의 작은따옴표 문자를 포함할 수 없는데, 바로 그 문자가 따옴표를 닫는 문자이기 때문입니다. 이런 경우의 표준 이스케이프 방법은 따옴표를 닫고, 백슬래시로 이스케이프한 작은따옴표를 삽입한 뒤, 따옴표를 다시 여는 것입니다: '\''. 이 도구는 삽입하는 모든 값에 이 이스케이프 처리를 자동으로 적용하므로, 공백이나 따옴표, 기타 특수 문자가 포함된 헤더, 본문 내용, 인증 정보는 언제나 올바르게 실행되는 명령을 만들어 냅니다 — 이스케이프 규칙을 직접 외울 필요가 없습니다.

자주 묻는 질문

일부 curl 명령에는 왜 -L 플래그가 필요한가요?

curl은 기본적으로 HTTP 리디렉션을 따라가지 않습니다. 호출하는 서버가 301이나 302 상태 코드와 Location 헤더로 응답하면, 기본 curl은 최종 콘텐츠 대신 그 리디렉션 응답을 보여주고 멈춥니다. 브라우저는 리디렉션을 조용히 따라가기 때문에 "브라우저에서는 작동하는" URL이 curl에서는 빈 응답이나 예상치 못한 응답을 반환할 수 있습니다. -L(--location)을 추가하면 curl이 최종 목적지에 도달할 때까지 리디렉션 체인을 자동으로 따라가도록 지시합니다.

헤더에 공백이 있으면 왜 curl 명령이 실패하나요?

명령줄을 여러 인수로 나누는 것은 curl이 아니라 셸이며, 셸은 기본적으로 따옴표로 묶이지 않은 공백을 기준으로 나눕니다. 따옴표 없이 입력한 Bearer abc123 같은 헤더 값은 셸에 의해 두 개의 별도 단어로 나뉘어 마치 서로 다른 두 인수인 것처럼 curl에 전달되어 헤더가 깨집니다. 값을 작은따옴표로 감싸면 셸에게 "공백을 포함해 내부의 모든 것을 하나의 문자 그대로의 조각으로 다루라"고 지시하게 되며, 이는 이 도구가 입력하는 모든 필드에 대해 자동으로 수행하는 작업입니다.

요청 본문에서 JSON 모드와 Raw 모드의 차이는 무엇인가요?

JSON 모드는 본문과 함께 Content-Type: application/json 헤더를 자동으로 추가하여 서버에게 페이로드를 JSON으로 해석하라고 알려줍니다 — 대부분의 최신 API는 이 헤더가 있어야 하며, 없으면 요청을 거부하거나 잘못 해석합니다. Raw 모드는 콘텐츠 타입을 가정하지 않고 입력한 텍스트를 그대로 전송하며, 폼 인코딩 데이터, 일반 텍스트, XML, 또는 헤더 섹션에서 Content-Type 헤더를 직접 수동으로 설정하고 싶은 모든 본문에 적합한 선택입니다.

Bearer 토큰 인증은 Basic 인증과 같은 건가요?

아니요, 서로 다르게 작동합니다. Bearer 인증은 일반적으로 OAuth 흐름이나 API 키 시스템에서 발급되는 불투명한 접근 토큰을 담은 Authorization: Bearer <token> 헤더를 보냅니다 — 서버는 토큰을 디코딩하는 대신 조회합니다. Basic 인증은 Authorization: Basic <base64(username:password)>를 보내는데, 이는 단순히 사용자 이름과 비밀번호를 합쳐 base64로 인코딩한 것입니다 — 인코딩은 암호화가 아니므로, Basic 인증은 반드시 HTTPS를 통해서만 사용해야 하며 일반 HTTP로는 절대 사용하면 안 됩니다. 그렇지 않으면 인증 정보가 사실상 평문으로 전송됩니다.

curl은 누가 만들었으며, 지금도 활발히 관리되고 있나요?

curl은 1998년 다니엘 스텐베리가 만들었으며, 원래는 IRC 봇을 위해 환율을 가져오기 위한 것이었습니다. 스텐베리는 curl 역사 전체에 걸쳐 사실상 수석 관리자로 남아 있으며 오늘날에도 활발히 개발을 이어가고 있습니다. 취미 프로젝트와는 거리가 먼 curl은 오늘날 운영체제, 임베디드 기기, 수많은 애플리케이션에 내장되어 세계에서 가장 널리 배포된 소프트웨어 중 하나가 되었으며, 그 보안성과 정확성은 크고 활발한 기여자 커뮤니티에 의해 그에 걸맞은 진지함으로 다뤄지고 있습니다.

댓글

아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!

비슷한 도구