์ด๋ฒ ๋ธ๋ก๊น
๊ธฐ๋ก์ ๋ชฉ์ ์ HTML๋ก ๋ง๋ ์นํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ์ ๊ฒ์ธ๊ฐ?
๋ฐฑ์๋๊ฐ ํ๋ ์ผ์ ๋ฌด์์ธ๊ฐ? ์ด๋ค.
1. HTTP
2. HTTP์ ๋๊ฐ์ง ํน์ง
3. Request, Response ๊ตฌ์กฐ
4. HTTP Request Methods
HTTP๋ HyperText Transfer Protocol์ ์ฝ์์ด๋ค!
HTML (HyperText Markup Language)
HTML์ ๋ค์ ์ง๊ณ ๋์ด๊ฐ๋ณด๋ฉด, ๋ฌธ์์ ๋ฌธ์๊ฐ ๋งํฌ๋ก ์ฐ๊ฒฐ๋๋๋ก ํ๋
ํ๊ทธ๋ก ๊ตฌ์ฑ๋ ์ธ์ด๋ ๋ป์ด๋ค.
์ฌ์ ์ ์๋ฏธ๋ก "์ ์กํ๋ค" ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ,
์ฐ๋ฆฌ๊ฐ ๋ง๋ ์น์ฌ์ดํธ๋ฅผ ๋๋ฆฌ ์๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๊ธฐ ์ํด์
๋ค๋ฅธ ์ปดํจํฐ์๊ฒ ์ ์กํด์ผ ํ๋ค.
์ ์ก์ ๋ณด๋ด๋ ์ฃผ์ฒด์ ๋ฐ๋ ์ฃผ์ฒด๊ฐ ์๋ค๋ ๊ฒ์ด ํฐ ํน์ง
ํ๋กํ ์ฝ์ ํ์ฝ, ํต์ ๊ท์ฝ ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ง ์ปดํจํฐ ๋ผ๋ฆฌ ์ด๋ป๊ฒ HTMLํ์ผ(HyperText)์ ์ฃผ๊ณ ๋ฐ์์ง์ ๋ํ ์ฝ์์ผ๋ก, ํ๊ตญ์ด๋ก ์ํต์ ํ๋ฏ ์ปดํจํฐ๋ ์ปดํจํฐ ๋ผ๋ฆฌ์ ์ํต ๋ฐฉ๋ฒ์ด HTTP์ด๋ค.
์ฝ๊ฒ ๋งํด HTTP๋, ์ปดํจํฐ๋ค๋ผ๋ฆฌ HTMLํ์ผ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ ์ํต๋ฐฉ์ ๋๋ ์ฝ์์ด๋ค.
์ํต์ ํต์ฌ์ ์์ฒญ๊ณผ ์๋ต!
์ธ๊ฐ์ ์ํต๋ฐฉ์์ด ์ปดํจํฐ ๋ผ๋ฆฌ์ ์ํต๋ฐฉ์์๋ ์ ์ฉ๋ ๊ฒ,
HTTP์ ์์ฒญ๊ณผ ์๋ต์ ๊ทธ์ ๋ฉ์์ง์ ๋ถ๊ณผํ๋ค. (http ์์ฒญ๊ณผ ์๋ต์ ๋ชจ๋ text)
๋ณด๋ด๋ ์ฃผ์ฒด๋ ๋ฐ๋ ์ฃผ์ฒด์๊ฒ ์์ฒญ์ ๋ณด๋ด๊ณ , ๋ฐ๋ ์ฃผ์ฒด๋ ์์ฒญ์ ๋ณด๋ธ ์ฃผ์ฒด์๊ฒ ์๋ต์ ๋ณด๋ธ๋ค.
์ฆ, ์ฌ๋๋ผ๋ฆฌ์ ์ํต์ ์ปดํจํฐ์๊ฒ ์ ์ฉํ์ฌ '์์ฒญ'๊ณผ '์๋ต'์ ํ๊ฒ๋ ํ ๊ฒ์ด๋ค.
HTTP์ ๋ํ ์ค๋ช ์ค ์ .๋, N.E.V.E.R ์์ด์๋ ์ ๋ HTTP์ ํน์ง์ด ๋ฐ๋ก Stateless ๋ค.
๊ฐ๊ฐ์ HTTP ํต์ (์์ฒญ/์๋ต)์ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ณผ๊ฑฐ์ ํต์ (์์ฒญ/์๋ต)์ ๋ํ ๋ด์ฉ์ ์ ํ ์์ง ๋ชป ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋งค ํต์ ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์ฟ ํก์์ ๋ก๊ทธ์ธ ํ ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผ๊ฑด์ ๋ด์ ๋์ ๊ฐ์
์ฐ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ์ํด ๋ก๊ทธ์ธ ํ ํฐ ๋๋ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค,
์ธ์
, ๋ก์ปฌ์คํ ๋ฆฌ์ง ๊ฐ์ ๊ธฐ์ ์ด ํ์์ ์ํด ๋ง๋ค์ด์ก๋ค.
HTTP ์์ฒญ์ ์ฌ์ค ํ๋ก ํธ์๋(ํด๋ผ์ด์ธํธ) ์์ ๋ฐฑ์๋(์๋ฒ)์ ์ผ(๋ฐ์ดํฐ ์ฒ๋ฆฌ)์ ์์ํ๊ฒ ํ๊ธฐ ์ํด ๋ณด๋ด๋ ๋ฉ์ธ์ง๋ค.
์ด ๋ฉ์ธ์ง์ ๊ตฌ์กฐ๋ ํฌ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ ๋์ด ์๋ค.
1. HTTP Method: ํด๋น ์์ฒญ์ด ์๋ํ ์ก์
์ ์ ์ํ๋ ๋ถ๋ถ. ์ฃผ๋ก GET, POST, DELETE๊ฐ ๋ง์ด ์ฐ์
2. Request target: ํด๋น request๊ฐ ์ ์ก๋๋ ๋ชฉํ url
3. HTTP Version: ๋ง ๊ทธ๋๋ก ์ฌ์ฉ๋๋ HTTP ๋ฒ์ ์ ๋ปํ๋ค. ์ฃผ๋ก 1.1 ๋ฒ์ ์ด ๋๋ฆฌ ์ฐ์
GET /login HTTP/1.1
ํด์: GET ๋ฉ์๋๋ก login ์ด๋ผ๋ ์์ฒญ ํ๊ฒ์ HTTP 1.1 ๋ฒ์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๊ฒ ๋ค!
Key: Value ๊ฐ์ผ๋ก ๋์ด์๋ค (JavaScript์ ๊ฐ์ฒด, Python์ ๋์
๋๋ฆฌ ํํ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค)
์์ฃผ ์ฌ์ฉ๋๋ **Headers** ์ ์ ๋ณด์๋ ๋ค์์ด ์๋ค
Headers: {
Host: ์์ฒญ์ ๋ณด๋ด๋ ๋ชฉํ(ํ๊ฒ)์ ์ฃผ์. ์ฆ, ์์ฒญ์ ๋ณด๋ด๋ ์น์ฌ์ดํธ์ ๊ธฐ๋ณธ ์ฃผ์๊ฐ ๋๋ค
(ex. www.apple.co.kr)
User-Agent: ์์ฒญ์ ๋ณด๋ด๋ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด (ex. chrome, firefox, safari, explorer)
Content-Type: ํด๋น ์์ฒญ์ด ๋ณด๋ด๋ ๋ฉ์ธ์ง body์ ํ์
(ex. application/json)
Content-Length: body ๋ด์ฉ์ ๊ธธ์ด
Authorization: ํ์์ ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ก๊ทธ์ธ ํ ํฐ์ Authroization ์ ๋ด๋๋ค
}
**ex) ๋ก๊ทธ์ธ ์์ ์๋ฒ์ ๋ณด๋ผ ์์ฒญ์ ๋ด์ฉ**
Body: {
"user_email": "inah.choi@gmail.com"
"user_password": "wecode"
}
1. HTTP Version: ์์ฒญ์ HTTP๋ฒ์ ๊ณผ ๋์ผ
2. Status Code: ์๋ต ๋ฉ์ธ์ง์ ์ํ ์ฝ๋
3. Status Text: ์๋ต ๋ฉ์ธ์ง์ ์ํ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํด์ฃผ๋ ํ
์คํธ
HTTP/1.1 404 Not Found
ํด์: HTTP 1.1 ๋ฒ์ ์ผ๋ก ์๋ตํ๊ณ ์๋๋ฐ, ํ๋ก ํธ์๋์์ ๋ณด๋ธ ์์ฒญ(ex. ๋ก๊ทธ์ธ ์๋)์ ๋ํด์
์ ์ ์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์(Not Found) 404 ์ํ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค.
HTTP/1.1 200 SUCCESS
ํด์: HTTP 1.1 ๋ฒ์ ์ผ๋ก ์๋ตํ๊ณ ์๋๋ฐ, ํ๋ก ํธ์๋์์ ๋ณด๋ธ ์์ฒญ์ ๋ํด์ ์ฑ๊ณตํ๊ธฐ ๋๋ฌธ์
200 ์ํ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค.
ex) ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ์ฑ๊ณตํ์ ๋ ์๋ต์ ๋ด์ฉ
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (์ํธํ๋ ์ ์ ์ ์ ๋ณด)
}
ํด๋น ๋ฉ์๋๋ค์ ํ๋ก ํธ์๋(ํด๋ผ์ด์ธํธ)์ ์
์ฅ์์ ์์ฒญ์ ์๋๊ฐ ๋ด๊ธด ๊ฒ
๋ฐฑ์๋๋ ํผ๋์ด ์ฌ ์ ์๋น
๐ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ์ ํ์ ์กฐํํ๋ค
(์ถ์ฝ๋ ์์ฒญ ๋ฉ์ธ์ง)
GET /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (์ ์ ๊ฐ ๋ณธ์ธ์์ ์ฆ๋ช
ํ ์ ์๋ ์ธ์ฆ/์ธ๊ฐ ํ ํฐ)
}
(์ถ์ฝ๋ ์๋ต ๋ฉ์์ง)
HTTP/1.1 200 SUCCESS
Body: {
"message": "SUCCESS"
"carts": [
{
"productId": 10
"name": "Pro Display XDR - Nano-texture ๊ธ๋์ค"
"price": "โฉ7,899,000"
"quantity": 1
},
{
"productId": 20
"name": "Mac Pro"
"price": "โฉ73,376,000"
"quantity": 2
}
]
}
๐ ์ฅ๋ฐ๊ตฌ๋์ ๋ง์ ๋๋ ์ํ์ ๋ด๋๋ค
**(์ถ์ฝ๋ ์์ฒญ ๋ฉ์ธ์ง)
POST /shop/bag HTTP/1.1**
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (์ ์ ๊ฐ ๋ณธ์ธ์์ ์ฆ๋ช
ํ ์ ์๋ ์ธ์ฆ/์ธ๊ฐ ํ ํฐ)
}
Body: {
product: {
"productId": 30
"name": "12.9ํ iPad Pro Wi-Fi + Cellular 128GB"
"color": "์คํ์ด์ค ๊ทธ๋ ์ด"
"price": "โฉ1,499,000"
"quantity": 1
}
}
**(์ถ์ฝ๋ ์๋ต ๋ฉ์์ง)
HTTP/1.1 201 SUCCESS**
Body: {
"message": "SUCCESSFULLY CARTS UPDATED"
}
๐ ์ฅ๋ฐ๊ตฌ๋์์ ์ ํ์ ์ญ์ ํ๋ค
**(์ถ์ฝ๋ ์์ฒญ ๋ฉ์ธ์ง)
DELETE /shop/bag HTTP/1.1**
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (์ ์ ๊ฐ ๋ณธ์ธ์์ ์ฆ๋ช
ํ ์ ์๋ ์ธ์ฆ/์ธ๊ฐ ํ ํฐ)
}
Body: {
productId: 30
}
**(์ถ์ฝ๋ ์๋ต ๋ฉ์์ง)
HTTP/1.1 201 SUCCESS**
Body: {
"message": "productId 30 DELETED"
}
ํฌ๊ฒ ์ธ๊ฐ์ง๋ง ๊ธฐ์ต, ๋๋จธ์ง๋ ์์ผ๋ก ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ฐจ์ฐจ ์ดํดํด๋ ๊ด์ฐฎ๋ค.
(์ธ์ฆ/์ธ๊ฐ, ํ๋ก ํธ์๋/๋ฐฑ์๋ ๋ก๊ทธ์ธ ์ค์ต, RESTFUL API)