HyperText Transfer Protocol์ ์ฝ์์ด๋ค
๋ฌธ์์ ๋ฌธ์๊ฐ ๋งํฌ๋ก ์ฐ๊ฒฐ๋๋๋ก ํ๋ ํ๊ทธ๋ก ๊ตฌ์ฑ๋ ์ธ์ด. ์นํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด
์น ๋ธ๋ผ์ฐ์ ์์์ ๋์ํ๋ ์ธ์ด๋ฅผ ๋ปํ๋ค.
์ฌ์ ์ ์๋ฏธ๋ก "์ ์กํ๋ค"๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์น์ฌ์ดํธ๋ฅผ ๋๋ฆฌ ์๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๊ธฐ ์ํด์ ๋ค๋ฅธ ์ปดํจํฐ์๊ฒ ์ ์กํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ก์ ๋ณด๋ด๋ ์ฃผ์ฒด์ ๋ฐ๋ ์ฃผ์ฒด๊ฐ ์๋ค๋ ๊ฒ์ด ํฐ ํน์ง์ด๋ค.
ํ๋กํ ์ฝ์ ํ์ฝ,ํต์ ๊ท์ฝ ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ง ์ปดํจํฐ๋ผ๋ฆฌ HTMLํ์ผ์ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ์์ง์ ๋ํ ์ฝ์์ด๋ค.
๐์ ๋ฆฌํ์๋ฉด !
์ปดํจํฐ๊ฐ์ HTMLํ์ผ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ ์ํต๋ฐฉ์ ํน์ ์ฝ์
๐ดHTTP์ ๋ํ ์ค๋ช ์ค ์์ด์๋ ์ ๋ HTTP์ ํน์ง์ด ๋ฐ๋ก Stateless ๋ค.
๋ฌธ์ ๊ทธ๋๋ก ๋ฒ์ญํ๋ฉดState(์ํ) + less(์์)
์ ์๋ฏธํ๋ค.๐ต
๊ฐ๊ฐ์ HTTP ํต์ (์์ฒญ/์๋ต)์ ๋
๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ณผ๊ฑฐ์ ํต์ (์์ฒญ/์๋ต)์ ๋ํ ๋ด์ฉ์ ์ ํ ์์ง ๋ชป ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋งค ํต์ ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
๋ง์ผ ์ฌ๋ฌ๋ฒ์ ํต์ (์์ฒญ/์๋ต)์ ์งํ๊ณผ์ ์์ ์ฐ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ(ex. ์จ๋ผ์ธ ์ผํ๋ชฐ์์ ๋ก๊ทธ์ธ ํ ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ)๋ฅผ ์ํด ๋ก๊ทธ์ธ ํ ํฐ ๋๋ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค, ์ธ์
, ๋ก์ปฌ์คํ ๋ฆฌ์ง ๊ฐ์ ๊ธฐ์ ์ด ํ์์ ์ํด ๋ง๋ค์ด์ก๋ค.
HTTP Request๋ฉ์์ง๋ ํฌ๊ฒ 3๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
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": "jun.choi@gmail.com"
"user_password": "wecode"
}
Response๋ request์ ๋ง์ฐฌ๊ฐ์ง๋ก ํฌ๊ฒ 3๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
1. HTTP Version: ์์ฒญ์ HTTP๋ฒ์ ๊ณผ ๋์ผ
2. Status Code: ์๋ต ๋ฉ์ธ์ง์ ์ํ ์ฝ๋
3. Status Text: ์๋ต ๋ฉ์ธ์ง์ ์ํ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํด์ฃผ๋ ํ
์คํธ
1. ์์ฒญ์ ํค๋์ ๋์ผํ๋ค.
2. ์๋ต์ ์ถ๊ฐ ์ ๋ณด(๋ฉํ ๋ฐ์ดํฐ)๋ฅผ ๋ด๊ณ ์๋ ๋ถ๋ถ์ด๋ค.
3. ์๋ต์์๋ง ์ฌ์ฉ๋๋ ํค๋์ ์ ๋ณด๋ค์ด ์๋ค.
1. ์์ฒญ์ Body์ ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ๋ค.
2. ์์ฒญ์ ๋ฉ์๋์ ๋ฐ๋ผ Body๊ฐ ํญ์ ์กด์ฌํ์ง ์๋ฏ์ด.
์๋ต๋ ์๋ต์ ํํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ Body๊ฐ ์์ ์๋ ์๋ค.
3. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Body ์ ๋ฐ์ดํฐ ํ์
์ JSON(JavaScript Object Notation) ์ด๋ค.
ex) ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํด ์ฑ๊ณตํ์ ๋ ์๋ต์ ๋ด์ฉ
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (์ํธํ๋ ์ ์ ์ ์ ๋ณด)
}
- HTTP ๋ ์ปดํจํฐ ๋ผ๋ฆฌ์ ์ํต์ ์ํ ํต์ ๊ท์ฝ์ด๋ค.
- HTTP ํต์ ์ Request(์์ฒญ)๊ณผ Response(์๋ต)์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
- HTTP ํต์ ์ ๋งค ์์ฒญ๊ณผ ์๋ต์ ์ด์ ์ํ๋ฅผ ์์ง ๋ชป ํ๋ค. (Stateless)