HTTP 요청
HTTP 요청은 클라이언트에서 서버로 데이터를 보내는 과정입니다.
HTTP 요청은 메서드, URI, HTTP 버전, 헤더, 본문으로 구성됩니다.
여기서 메서드는 HTTP 요청의 목적을 지정하며, 가장 자주 사용되는 메서드는 GET과 POST입니다.
HTTP 메서드
HTTP 요청의 메서드는 클라이언트가 서버에게 원하는 동작을 지정합니다.
가장 자주 사용되는 메서드는 다음과 같습니다.
- GET: 서버에서 자원을 가져오기 위해 사용됩니다. GET 요청은 URI에 지정된 자원의 표현을 요청합니다.
- POST: 서버에 데이터를 전송하기 위해 사용됩니다. POST 요청은 요청 본문에 데이터를 포함합니다.
- PUT: 서버에 자원을 생성 또는 수정하기 위해 사용됩니다. PUT 요청은 URI에 지정된 자원을 요청 본문에 포함된 표현으로 대체합니다.
- DELETE: 서버에서 자원을 삭제하기 위해 사용됩니다. DELETE 요청은 URI에 지정된 자원을 삭제합니다.
URI
URI(Uniform Resource Identifier)는 자원을 식별하는 데 사용되는 문자열입니다.
URI는 스킴, 호스트, 포트, 경로, 쿼리 문자열, 프래그먼트로 구성됩니다.
예를 들어, https://example.com:80/api/books?id=1#section-1와 같은 URI는 https 스킴을 사용하며, 호스트는 example.com, 포트는 80, 경로는 /api/books, 쿼리 문자열은 id=1, 프래그먼트는 section-1입니다.
HTTP 버전
HTTP 요청에서 사용되는 버전은 현재 주로 1.1 버전이 사용됩니다.
1.1 버전에서는 지속적인 연결을 기본값으로 사용하며, 요청 및 응답에 대한 헤더 정보에 정보를 추가하여 보안 및 효율성을 개선합니다.
HTTP 헤더
HTTP 요청에서는 헤더를 사용하여 요청의 정보를 전달합니다.
HTTP 요청 헤더는 여러 개의 필드로 구성되며, 각 필드는 헤더 이름과 헤더 값으로 이루어집니다.
헤더는 요청 본문에 대한 정보, 클라이언트 및 서버의 정보, 인증 정보 등 다양한 정보를 포함할 수 있습니다.
몇 가지 자주 사용되는 HTTP 요청 헤더는 다음과 같습니다.
- Content-Type: 요청 본문의 데이터 형식을 지정합니다. 예를 들어, Content-Type: application/json은 요청 본문이 JSON 형식임을 나타냅니다.
- Accept: 서버가 응답으로 보낼 수 있는 데이터 형식을 클라이언트에게 알립니다. 예를 들어, Accept: application/json은 서버가 JSON 형식으로 응답할 수 있음을 나타냅니다.
- Authorization: 클라이언트의 인증 정보를 전달합니다. 예를 들어, Authorization: Basic base64(username:password)는 HTTP 기본 인증을 사용하는 경우 클라이언트의 인증 정보를 전달합니다.
HTTP 요청 본문
HTTP 요청 본문은 클라이언트가 서버로 보내는 데이터를 포함하는 부분입니다.
POST, PUT 등의 메서드에서는 요청 본문을 사용하여 데이터를 전송합니다.
요청 본문의 데이터 형식은 Content-Type 헤더에서 지정됩니다.
예를 들어, Content-Type: application/json은 요청 본문이 JSON 형식임을 나타냅니다.
HTTP 응답
HTTP 응답은 서버에서 클라이언트로 데이터를 보내는 과정입니다.
HTTP 응답은 상태 코드, 헤더, 본문으로 구성됩니다.
HTTP 상태 코드
HTTP 응답에서 가장 중요한 정보는 상태 코드입니다.
상태 코드는 서버가 요청을 성공적으로 처리했는지, 오류가 발생했는지, 클라이언트의 요청이 잘못되었는지 등을 나타내는 세 자리 숫자로 구성됩니다.
몇 가지 자주 사용되는 HTTP 상태 코드는 다음과 같습니다.
- 200 OK: 요청이 성공적으로 처리되었습니다.
- 400 Bad Request: 클라이언트의 요청이 잘못되었습니다.
- 401 Unauthorized: 클라이언트의 인증 정보가 유효하지 않습니다.
- 404 Not Found: 요청한 자원이 서버에 없습니다.
- 500 Internal Server Error: 서버에서 요청을 처리하는 동안 오류가 발생
HTTP 응답 본문
HTTP 응답 본문은 서버가 클라이언트에게 보내는 데이터를 포함하는 부분입니다.
응답 본문의 데이터 형식은 Content-Type 헤더에서 지정됩니다.
예를 들어, Content-Type: application/json은 응답 본문이 JSON 형식임을 나타냅니다.
예시 코드
다음은 Java에서 HTTP GET 요청을 보내는 코드입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetExample {
public static void main(String[] args) throws IOException {
URL url = new URL("http://example.com/api/books?id=1");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
System.out.println(content.toString());
}
}
이 코드는 http://example.com/api/books?id=1 URI에 GET 요청을 보내고, 응답 본문을 출력합니다.
이 코드에서 HttpURLConnection 클래스는 HTTP 요청을 설정하고 보내는 데 사용됩니다.
BufferedReader 클래스는 응답 본문을 읽는 데 사용되며, StringBuilder 클래스는 응답 본문을 저장합니다.
결론
HTTP 요청과 응답은 REST API를 구현하는 데 필수적인 개념입니다.
HTTP 요청은 메서드, URI, HTTP 버전, 헤더, 본문으로 구성되며, HTTP 응답은 상태 코드, 헤더, 본문으로 구성됩니다.
HTTP 요청과 응답의 기본 개념을 이해하면, REST API를 보다 쉽게 이해하고 구현할 수 있습니다.
이번 글에서는 HTTP 요청에 대한 구성 요소에 대해 설명했습니다.
다음 글에서는 HTTP 응답에 대한 자세한 설명을 다룰 예정입니다.