본문 바로가기
프로젝트/도서관리 프로젝트

[before project] HTTP와 API

by CodeMango 2023. 5. 27.

HTTP

HTTP는 HyperText Transfer Protocol의 약자로, 웹 상에서 데이터를 주고받기 위한 프로토콜입니다.

 

클라이언트(예: 웹 브라우저)와 서버 간의 통신을 담당하며,

웹 페이지의 요청과 응답을 규칙에 맞게 처리하는 역할을 합니다.


 

HTTP 요청과 응답은 크게 두 부분으로 구성됩니다: 헤더(Header)와 바디(Body).

 

헤더(Header)와 바디(Body).


1. 헤더(Header): HTTP 헤더는 요청이나 응답의 메타데이터를 포함하는 부분입니다.

헤더는 클라이언트가 서버에 전달하는 요청 정보나 서버가 클라이언트에게 전송하는 응답 정보에 대한 세부 정보를 포함합니다.
일반적으로 헤더는 키-값 쌍의 형태로 구성되며, 콜론(:)으로 키와 값을 구분합니다.
몇 가지 흔히 사용되는 헤더 필드에는 다음과 같은 것들이 있습니다

 

 

"Host": 요청한 서버의 호스트 이름 또는 IP 주소를 나타냅니다.

"User-Agent": 클라이언트 애플리케이션(웹 브라우저 등)의 정보를 나타냅니다.

"Content-Type": 요청이나 응답의 본문 데이터 유형을 정의합니다.

"Content-Length": 요청이나 응답의 본문 데이터의 길이를 나타냅니다.

"Cookie": 클라이언트가 서버로 전송하는 쿠키 정보를 포함합니다.

 


 

2. 바디(Body): HTTP 요청 또는 응답의 본문 데이터를 포함하는 부분입니다. 본문 데이터는 헤더와 달리 선택적으로 포함될 수 있습니다. 예를 들어, 웹 페이지를 요청하는 경우에는 일반적으로 요청에 본문 데이터가 없습니다. 반면에 파일을 업로드하는 경우에는 요청 본문에 파일 데이터가 포함됩니다. 응답의 경우, 웹 서버는 요청에 대한 응답으로 HTML, JSON, 이미지 등의 데이터를 응답 본문에 포함하여 클라이언트에게 전송합니다.

 

바디(Body)는 HTTP 요청 또는 응답에 포함되는 실제 데이터를 담는 부분입니다. 데이터 형식은 요청 또는 응답의 목적과 내용에 따라 다양합니다. 여기에 몇 가지 예시를 보여드리겠습니다:

 

1)HTML 

<!DOCTYPE html>
<html>
<head>
  <title>Example</title>
</head>
<body>
  <h1>Hello, world!</h1>
  <p>This is an example HTML page.</p>
</body>
</html>

2)JSON

{
  "name": "John Doe",
  "age": 30,
  "email": "johndoe@example.com"
}

 

3) 이미지:
(이미지는 일반적으로 Base64 인코딩 또는 URL을 통해 전송됩니다.)

4) 파일 업로드:
(파일 업로드는 주로 POST 요청과 함께 멀티파트(Multipart) 형식으로 전송됩니다. 이 예시에서는 단순화하기 위해 생략하겠습니다.)

5) XML

<book>
  <title>Example Book</title>
  <author>John Doe</author>
  <year>2023</year>
</book>


6) 폼 데이터:
주로 POST 요청에서 사용되며, 사용자로부터의 입력을 서버로 전송하는 데 사용됩니다.

 


이것은 몇 가지 일반적인 예시일 뿐이며, HTTP를 사용하는 응용 프로그램은 다양한 유형의 데이터를 요청 및 응답 본문에 포함시킬 수 있습니다. 데이터 형식은 Content-Type 헤더 필드로 명시되며, 해당 형식에 따라 데이터를 해석하고 처리합니다.

 

 

HTTP요청과 응답 예시)

 

HTTP 요청 

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

 

HTTP응답

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1274

<!DOCTYPE html>
<html

 

 


HTTP 메소드

 

GET: 데이터를 달라, 쿼리

POST : 데이터를 저장하라, 바디

PUT : 데이터를 수정하라, 바디

DELETE :데이터를 삭제하라, 쿼리

 

GET 요청 : 요청을 받는 컴퓨터가 데이터를 줌

"내놓아라 포션 빨강색 2개"

GET /portion?color=red&count=2 HTTP/1.1
Host: spring.com:3000

해당 예시에서는 쿼리 파라미터를 사용하여 /portion 경로에 대한 GET 요청을 보내고 있습니다. color와 count라는 두 개의 쿼리 파라미터를 전달하고 있습니다.
spring.com 도메인의 3000번 포트에 위치한 서버로 보내지는 것으로 가정하였습니다.
color=red&count=2 부분을  쿼리(Query)라고 부릅니다.


서버는 이 요청을 받으면 color=red와 count=2라는 값들을 기반으로 필요한 처리를 수행한 후, 해당하는 데이터를 응답으로 전송할 것입니다. 

 

GET 응답 

HTTP/1.1 200 OK
Content-Type: application/json

{
  "portion": {
    "color": "red",
    "count": 2
  }
}

 

POST요청 : 요청을 받는 컴퓨터가 데이터를 저장함.

"오크가죽 정보를 저장해라"

POST/oak/leather
Host:spring.com:3000

오크가죽정보

여기서 오크가죽정보가 body입니다.

 

따라서 GET은 쿼리, POST는 바디를 사용합니다.

 


API (Application Programming Interface)

 

정해진 약속을 하여, 특정 기능을 수행하는 것

get, post를 적어서 정보를 주고받을 때 약속을 통해 주고받게 되는데 이 약속이 API입니다.

 

HTTP요청 문법

 

응답 역시 요청과 구조가 동일합니다.


 

URL (Uniform Resource Locator)


응답 상태코드

200 OK: 요청이 성공했고, 요청에 따라 적절한 응답이 반환되었습니다.
201 Created: 요청이 성공했고, 새로운 리소스가 성공적으로 생성되었습니다.
400 Bad Request: 서버가 요청을 이해하지 못하거나 잘못된 요청인 경우입니다.
401 Unauthorized: 요청한 리소스에 대한 인증이 필요한 경우입니다.
403 Forbidden: 요청이 서버에 의해 이해되었지만, 허용되지 않은 작업을 수행하려고 할 때입니다.
404 Not Found: 요청한 리소스를 찾을 수 없는 경우입니다.
500 Internal Server Error: 서버에서 예기치 않은 오류가 발생한 경우입니다.
503 Service Unavailable: 서버가 현재 요청을 처리할 수 없는 상태이거나 과부하 상태인 경우입니다.

 


총정리

 

1. 웹을 통한 컴퓨터 간의 통신은 HTTP라는 표준화된 방식이 있다.

2. HTTP요청은 HTTP method(GET, POST)와 Path(/portion)가 핵심이다.

3. 요청에서 데이터를 전달하기 위한 2가지 방법은 쿼리와 바디이다.

4. HTTP응답은 상태 코드가 핵심이다.

5. 클라이언트와 서버는 HTTP를 주고 받으며 기능을 동작하는데 이대 정해진 규칙을 API라고 한다.

 

댓글