# HTTP 요청 (/ko/docs/requests)

요청은 API에 대한 저장된 호출 하나입니다. 메서드, URL, 헤더, 본문, 인증, 설정이 작업 공간의 파일로 보관됩니다. 이 페이지는 HTTP 요청을 처음부터
끝까지 다룹니다. 다른 종류의 요청(GraphQL, gRPC, WebSocket과 SSE, Socket.IO, MQTT, MCP 호출)도 같은 페이지를 쓰며 탭만 다릅니다. 마지막의
[요청 종류](#request-kinds)를 참고하십시오.

## 요청 만들기 [#create-a-request]

- **파일 › 새로운 요청**(<kbd>⌘</kbd><kbd>N</kbd>)을 선택합니다. 요청은 사이드바에서 선택한 폴더에 **새로운 요청**이라는 이름으로 추가되고 탭에서
  열립니다.
- 또는 사이드바의 **요청** 옆에 있는 **+** 메뉴를 클릭하고 **새로운 요청**을 선택합니다. 같은 메뉴에서 다른 종류의 요청과 폴더를 만들고 파일을 가져올 수
  있습니다.
- 또는 사이드바에서 폴더를 오른쪽 클릭하고 **새로운 요청**을 선택하면 그 폴더 안에 바로 만들어집니다.
- cURL 명령으로 시작하려면 요청을 만들고 URL 필드에 명령을 붙여넣습니다. Echolot이 명령에서 메서드, URL, 헤더, 본문, 인증, 설정을 채웁니다. 가져오지
  못한 옵션은 URL 막대 아래에 **cURL 메모**로 표시되며, 클릭하면 무엇이 빠졌는지 볼 수 있습니다.

요청 이름은 **편집 › 이름 변경**으로 바꾸거나 사이드바에서 요청을 오른쪽 클릭해 바꿉니다. **편집 › 복제**(<kbd>⌘</kbd><kbd>D</kbd>)를 선택하면
바로 옆에 복사본이 만들어집니다.

## 요청 페이지 [#the-request-page]

<Shot id="requests-http-page" alt="List products 요청 페이지: 맨 위의 URL 막대, 왼쪽의 요청 탭, 오른쪽의 JSON 응답" />

위에서 아래로 다음과 같이 구성됩니다.

1. **URL 막대**: 메서드, URL, **보내기**.
2. **그 아래 줄**: 실제로 보내질 URL입니다. 현재 환경에서 모든 변수가 채워진 상태이며(비밀 값은 가려진 채로 표시됨), 보낸 뒤에는 오른쪽에 상태,
   교환 타임라인, 소요 시간이 표시됩니다.
3. **두 개의 패널**: 한쪽에는 요청의 탭, 다른 쪽에는 응답이 있습니다.

요청의 탭은 **문서**, **헤더**, **매개변수**, **본문**, **인증**, **변수**, **테스트**, **스크립트**, **설정**입니다. 내용이 있는 탭에는 점이나 개수가
표시되므로 헤더가 세 개 있는지, 본문이 있는지 한눈에 알 수 있습니다.

두 패널은 나란히 놓거나 위아래로 쌓을 수 있습니다. **보기 › 패널**에서 **나란히**와 **위아래로** 중에서 선택하며, 선택은 요청 종류별로 기억됩니다. 구분선을
드래그해 패널 크기를 조절하고, **보기 › 패널 › 패널 크기 재설정**을 선택하면 기본 크기로 돌아갑니다. 두 패널을 나란히 놓기에 윈도우가 너무 좁으면 자동으로
위아래로 쌓입니다.

## 메서드와 URL [#method-and-url]

메서드 배지를 클릭해 **GET**, **POST**, **PUT**, **PATCH**, **DELETE**, **HEAD**, **OPTIONS** 중에서 선택합니다.

옆의 필드에 URL을 입력합니다. `{{baseURL}}/products`처럼 어디에서든 `{{variables}}`를 쓸 수 있습니다. `{{`를 입력하면 범위 안의 변수와
[동적 값](/docs/requests/dynamic-values) 목록이 열립니다. 변수는 알약 모양으로 표시되며, 포인터를 올리면 값이 보이고 두 번 클릭하면 값을 바꿀 수
있습니다. 변수는 [환경, 작업 공간, 폴더](/docs/workspaces/environments)에서 옵니다.

URL에서 해석되지 않는 부분이 있으면 URL 막대 아래 줄에 **문제 1개**(또는 해당 개수)가 표시됩니다. 클릭하면 어떤 변수가 없는지 볼 수 있습니다. 해석되지
않은 토큰은 쓴 그대로 전송됩니다.

요청이 다른 요청의 응답을 읽는데(예: `{{$response('auth/sign-in', '$.access_token')}}`) 그 요청에 아직 응답이 없으면, 아래 줄에
**“Sign in”을(를) 먼저 보냄**이라고 표시됩니다. Echolot이 이 요청보다 먼저 그 요청을 보냅니다.

## 쿼리 매개변수 [#query-parameters]

**매개변수** 탭은 URL의 쿼리를 **키**와 **값** 행으로 보여 줍니다. 둘은 서로 동기화됩니다. 행을 고치면 URL이 바뀌고, URL에 `?page=2`를 입력하면 행이
나타납니다.

- **매개변수 추가**를 클릭하면 행이 추가됩니다.
- 행의 체크를 해제하면 보내지 않습니다. 체크를 해제한 매개변수는 요청에 남아 있지만 URL에서는 빠집니다.
- 이름이나 값에 입력한 `&`, `#`, 공백은 자동으로 퍼센트 인코딩됩니다.

## 헤더 [#headers]

**헤더** 탭에는 설정한 헤더가 설정한 순서대로, 이름의 대소문자도 쓴 그대로 나열됩니다.

- **헤더 추가**를 클릭하고 이름을 입력합니다. Echolot이 헤더 이름을 각각의 용도 설명과 함께 자동 완성하며, 하나를 고르면 자주 쓰는 값을 제안합니다.
- 헤더의 체크를 해제하면 보내지 않고 그대로 보관합니다.
- 행을 핸들로 드래그해 순서를 바꾸거나, 행을 오른쪽 클릭해 **위로 이동**, **아래로 이동**, **제거**를 선택합니다.
- **일괄 편집**을 클릭하면 모든 헤더를 한 줄에 `Name: value` 하나씩 텍스트로 편집합니다. `//`로 시작하는 줄은 꺼진 헤더입니다.

설정한 헤더 아래의 **자동 생성**에는 Echolot이 보낼 때 추가하는 헤더가 나열됩니다. 인증, 본문 유형, 쿠키 저장소에서 만들어지는 헤더와 모든 HTTP 요청에
필요한 헤더입니다. 실제로 나가는 그대로 표시되며 자격 증명은 가려집니다. 항목에 포인터를 올리면 어디에서 온 것인지 볼 수 있습니다. 대신 직접 만든 값을 보내려면
같은 이름의 헤더를 추가하거나, 행을 오른쪽 클릭해 **직접 만든 헤더로 대체**를 선택합니다. 직접 쓴 `Authorization` 헤더는 **인증** 탭이 추가하는 헤더 대신
전송됩니다.

Echolot이 자체 헤더를 추가하지 않게 하려면 [설정 탭](/docs/requests/settings#raw-mode)에서 **원본 모드**를 켭니다.

## 본문, 인증, 설정 [#body-auth-and-settings]

- **본문**: JSON, URL 인코딩 및 멀티파트 양식, GraphQL, 텍스트, XML, HTML, 파일입니다. [요청 본문](/docs/requests/body)을 참고하십시오.
- **인증**: Basic, Bearer, API 키, OAuth 2.0, AWS 서명 등이며 폴더의 인증을 쓸 수도 있습니다. [인증](/docs/requests/auth)을 참고하십시오.
- **설정**: HTTP 버전, 리디렉션, 쿠키, TLS, 시간 초과, 원본 모드입니다. [요청 설정](/docs/requests/settings)을 참고하십시오.
- **변수**: 이 요청만 쓰는 값과 응답에서 가져와 보관하는 값입니다. [응답 캡처](/docs/requests/captures)를 참고하십시오.
- **테스트**와 **스크립트**: 응답에 대한 검사, 그리고 보내기 전후에 실행하는 JavaScript입니다. [스크립트와 테스트](/docs/requests/scripts-and-tests)를
  참고하십시오.
- **문서**: 요청이 무엇을 위한 것인지에 대한 메모로, 본인과 팀을 위한 것입니다.

## 보내기와 취소 [#send-and-cancel]

**보내기**를 클릭하거나 <kbd>⌘</kbd><kbd>R</kbd>을 누릅니다. URL 필드에서 <kbd>↩</kbd>를 누르거나 <kbd>⌘</kbd><kbd>↩</kbd>를 눌러도 보내집니다.
메뉴 막대의 **요청 › 보내기**도 같은 동작입니다.

요청이 실행되는 동안 **보내기**는 **취소**로 바뀝니다. 클릭하거나 <kbd>⌘</kbd><kbd>.</kbd>를 누르면 중단됩니다. 응답은 도착하는 대로 응답 패널에 스트리밍되므로
큰 본문도 끝까지 오기 전에 앞부분을 읽을 수 있습니다.

윈도우의 환경이 보호된 환경이면 버튼에 환경 이름과 함께 <strong>Production에 보내기…</strong>라고 표시되고, 보낼 때마다 먼저 확인합니다.
[보호된 환경](/docs/workspaces/protected-environments)을 참고하십시오.

현재 요청에 대한 그 밖의 동작은 **요청** 메뉴에 있습니다.

| 메뉴 항목 | 단축키 | 동작 |
| --- | --- | --- |
| **cURL로 복사** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>C</kbd> | 요청을 `curl` 명령으로 복사합니다. |
| **코드 생성…** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>G</kbd> | 요청을 코드로 보여 줍니다: cURL, Swift(URLSession), JavaScript(fetch, axios), TypeScript(fetch), Python(requests, httpx), Go(net/http), Kotlin(OkHttp), Java(HttpClient), C#(HttpClient), PHP(cURL), Rust(reqwest). |
| **교환을 HAR로 내보내기…** | | 가장 최근 교환을 HAR 파일로 저장합니다. |
| **본문에서 찾기** | <kbd>⌘</kbd><kbd>F</kbd> | 응답 본문에서 검색합니다. |

<strong>코드 생성…</strong>은 요청의 변수를 채워 넣습니다. 스크립트는 실행되지 않고 비밀 값은 그대로 나타나므로, 코드를 붙여넣는 곳에 주의하십시오. 그 시트의
**템플릿 폴더 열기**를 선택하면 코드가 만들어지는 기반이 되는 템플릿을 볼 수 있습니다.

## 탭 [#tabs]

열어 둔 요청마다 편집기 위에 탭이 하나씩 생깁니다.

| 동작 | 방법 |
| --- | --- |
| 다음 탭 | **탭 › 다음 탭 보기**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>]</kbd> |
| 이전 탭 | **탭 › 이전 탭 보기**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>[</kbd> |
| 탭 닫기 | **파일 › 탭 닫기**, <kbd>⌘</kbd><kbd>W</kbd> |
| 마지막으로 닫은 탭 다시 열기 | **탭 › 닫은 탭 다시 열기**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>T</kbd> |

## 저장 [#saving]

저장 명령은 없습니다. 모든 편집은 변경 직후 요청 파일에 자동으로 저장되며, **편집 › 실행 취소**(<kbd>⌘</kbd><kbd>Z</kbd>)로 모든 편집을 되돌릴 수
있습니다. 탭을 닫거나 종료할 때는 마지막 편집이 기록될 때까지 기다립니다.

Echolot이 아직 기록하지 않은 편집이 있는 동안 디스크의 파일이 바뀌면(예: `git pull` 이후) **디스크에서 이 요청이 변경되었습니다**라는 막대가 나타납니다.
**내 변경 사항 유지**를 선택하면 내 편집을 유지해 파일에 덮어쓰고, **디스크 버전 사용**을 선택하면 내 편집을 버리고 파일을 불러옵니다.
[Git과 팀](/docs/workspaces/git-and-teams)을 참고하십시오.

## 응답 한눈에 보기 [#the-response-at-a-glance]

<Shot id="requests-http-exchange-card" alt="응답 위에 표시된 세부 정보 카드: 상태 200, 시간, 크기, TLS 버전, 교환의 각 단계를 나타내는 막대" />

보낸 뒤에는 URL 막대 아래 줄에 상태(2xx는 초록색 등), 교환의 단계를 나타내는 막대, 총 소요 시간이 표시됩니다. 이 줄에 포인터를 올리면 크기, 압축, 리디렉션,
검사, TLS, 서버 주소, 각 단계에 걸린 시간 같은 세부 정보가 나옵니다.

응답 패널에는 여러 보기 방식의 본문, 헤더, 쿠키, 원본 메시지, 16진수 보기, 통신 바이트가 있습니다. 줄 끝에 있는 개수가 붙은 시계 버튼은 이 요청의 이전 응답을
엽니다. [응답](/docs/requests/responses)을 참고하십시오.

처음 보내기 전에는 응답 패널에 **핑을 보내 보십시오**라고 표시됩니다.

## 요청 종류 [#request-kinds]

같은 요청 페이지에서 Echolot이 지원하는 모든 프로토콜을 보냅니다. **파일** 메뉴나 사이드바의 **+** 메뉴에서 만듭니다.

| 종류 | 메뉴 항목 | 페이지 |
| --- | --- | --- |
| HTTP | **새로운 요청** | 이 페이지 |
| GraphQL | **새로운 GraphQL 요청** | [GraphQL](/docs/requests/graphql) |
| gRPC | **새로운 gRPC 요청** | [gRPC](/docs/requests/grpc) |
| WebSocket | **새로운 WebSocket 요청** | [WebSocket과 SSE](/docs/requests/websocket-and-sse) |
| Server-Sent Events | **새로운 요청**(서버가 이벤트를 스트리밍하는 HTTP 요청) | [WebSocket과 SSE](/docs/requests/websocket-and-sse) |
| Socket.IO | **새로운 Socket.IO 요청** | [Socket.IO](/docs/requests/socket-io) |
| MQTT | **새로운 MQTT 요청** | [MQTT](/docs/requests/mqtt) |
| MCP | **새로운 MCP 호출**(사이드바 **+** 메뉴) | [MCP 요청](/docs/requests/mcp-requests) |

검사와 데이터 파일을 사용해 요청을 연속으로 많이 보내려면 [실행](/docs/requests/runner)을 사용하십시오.
