HTTP๋
Hyper Text Transfer Protocol
์ ๋๋ฌธ์์ด๋ก, ์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ์ด๋ค.
- ํ๋กํ ์ฝ์ ๊ท์ฝ ๋๋ ๊ท์น์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์ปดํจํฐ๋ค๋ผ๋ฆฌ HTML ํ์ผ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ ์ํต๋ฐฉ์ ๋๋ ์ฝ์
HTTP ๋ฉ์์ง์๋ ์๋์ ๊ฐ์ ๋ชฉ๋ก๋ค์ ๋ชจ๋ ๋ด์์ ๋ณด๋ผ ์ ์๋ค.
- HTML, TEXT
- ์ฌ์ง, ์์ฑ, ์์, ํ์ผ
- JSON, XML(API)
=> ๊ฑฐ์ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
- HTTP/1.1๊ณผ HTTP/2๋ TCP ๊ธฐ๋ฐ์ด๊ณ , HTTP/3๋ UDP์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๋ค.
- UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ HTTP/3๋ ๋น ๋ฅธ ์๋๋ผ๋ ์ฅ์ ๋๋ฌธ์ ์ ์ ์ฆ๊ฐํ๊ณ ์๋ค.
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ ๊ฒฐ๊ตญ ์์ฒญ๊ณผ ์๋ต์ ๊ตฌ์กฐ๋ฅผ ๋ปํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋๊ธฐํ๋ค.
- ์๋ฒ๋ ๋ฐ์ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋ต์ ๋ณด๋ธ๋ค.
stateful, stateless์ ์ฐจ์ด๋ฅผ ์์๋ณด์.
stateful
- ๊ฐ๋จํ ๋งํ๋ฉด ํต์ ์ค๊ฐ์ ๋ค๋ฅธ ์๋ฒ๋ก ๋ฐ๋๋ฉด ์๋๋ค.
- ๋ฐ๋๋ค๋ฉด ๋ค๋ฅธ ์๋ฒ๋ก ๋ฐ๋ ๋ ์ํ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์๋ฒ์๊ฒ ๋ฏธ๋ฆฌ ์๋ ค์ค์ผ ํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด๋ ์์ฒญ์ ๋ํ ์ํ๋ฅผ ์๋ฒ๊ฐ ์ ์งํ๊ณ ์๋ค.
stateless
- ์ค๊ฐ์ ๋ค๋ฅธ ์๋ฒ๋ก ๋ฐ๋์ด๋ ๋๋ค.
- ๊ฐ์๊ธฐ ํด๋ผ์ด์ธํธ๊ฐ ๊ธ์ฆํด๋ ์๋ฒ๋ฅผ ๋๊ฑฐ ํฌ์ ํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ ๋ฒ์ ์ ๋ฌ.
=> stateless๋ ์๋ต ์๋ฒ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค. => ๋ฌดํํ ์๋ฒ ์ฆ์ค ๊ฐ๋ฅ
- stateful์ ํญ์ ๊ฐ์ ์๋ฒ๊ฐ ์ ์ง๋์ด์ผ ํ๋๋ฐ, ๋ง์ฝ ์ค๊ฐ์ ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์น๋ช ์ ์ด๋ค.
- stateless๋ ์๋ฌด ์๋ฒ๋ ํธ์ถํด๋ ๊ฐ๋ฅํ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ํต์ ํ๋ ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ์๋ฒ๋ก ๋ค์ ์์ฒญํ์ฌ ์๋ต์ ๋ฐ์ ์ ์๋ค.
- stateless๋
scale out
์ ์ ๋ฆฌํ๋ค.
๋ชจ๋ ๊ฒ์ statelessํ๊ฒ ์ค๊ณ ํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
- stateless : ๋ก๊ทธ์ธ์ด ํ์ ์๋ ๋จ์ํ ์๋น์ค ์๊ฐ ํ์ด์ง
- stateful : ๋ก๊ทธ์ธ
๋น ์ฐ๊ฒฐ์ฑ์ด๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ํ๊ณ ๋์๋ ์ฐ๊ฒฐ์ด ์ ์ง๋๋ฉด ์๋ฒ ์์์ด ์๋ชจ๋๋ฏ๋ก ๋ฐ๋์งํ์ง ์๋ค.
- ๊ทธ๋์ ๋์จ ๊ฐ๋ ์ด ๋น ์ฐ๊ฒฐ์ฑ์ด๋ค. ๋น ์ฐ๊ฒฐ์ฑ์ ์์ ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๊ณ , ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ์๋ต์ ํ๊ณ ๋ ์ด์ ์์ฒญ์ด ์๋ค๋ฉด ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ค.
- HTTP๋ ๊ธฐ๋ณธ์ด ๋น ์ฐ๊ฒฐ์ฑ ๋ชจ๋ธ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋น ์ฐ๊ฒฐ์ฑ ๋ชจ๋ธ์ ์ด ๋จ์ ์ดํ์ ๋น ๋ฅธ ์๋๋ก ์๋ตํ๋ค.
- ์๋ฒ ์์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
HTTP ๋ฉ์์ง๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ค.
- ์์ฒญ๊ณผ ์๋ต ๋ฉ์์ง ๋ ๊ฐ์ง ์ ํ์ ๋ฉ์์ง๊ฐ ์๋ค.
Start line
: ์์ฒญ์ ์ฒซ๋ฒ์งธ ์ค์ ํด๋นํ๋ค. ์ด ์์ ์ค๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.Headers
: ํด๋น ์์ฒญ์ ๋ํ ์ถ๊ฐ ์ ๋ณด(๋ฉํ ๋ฐ์ดํฐ)๋ฅผ ๋ด๊ณ ์๋ ๋ถ๋ถ์ด๋ค.Body
: ํด๋น ์์ฒญ์ ์ค์ ๋ด์ฉ. ์ฃผ๋ก Body๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ POST๋ค.
Status line
: ์๋ต์ ์ํ ์ค์ด๋ค. ์๋ต์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ์ํ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ ค์ฃผ๋ฉด์ ๋ด์ฉ์ ์์ํ๋ค.Headers
: ์์ฒญ์ ํค๋์ ๋์ผํ๋ค. ์๋ต์ ์ถ๊ฐ ์ ๋ณด(๋ฉํ ๋ฐ์ดํฐ)๋ฅผ ๋ด๊ณ ์๋ ๋ถ๋ถ์ด๋ค. ๋ค๋ง, ์๋ต์์๋ง ์ฌ์ฉ๋๋ ํค๋์ ์ ๋ณด๋ค์ด ์๋ค.Body
: ์์ฒญ์ Body์ ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ๋ค. ์์ฒญ์ ๋ฉ์๋์ ๋ฐ๋ผ Body๊ฐ ํญ์ ์กด์ฌํ์ง ์๋ฏ์ด. ์๋ต๋ ์๋ต์ ํํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ Body๊ฐ ์์ ์๋ ์๋ค. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Body ์ ๋ฐ์ดํฐ ํ์ ์ JSON(JavaScript Object Notation) ์ด๋ค.
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)๋ฅผ ํตํด์ ์ ๋ฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์์ ๊ถ์ฅํ์ง ์์
GET /members/100 HTTP/1.1
Host:localhost:8080
โฌ๏ธ
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34
{
"username":"lee",
"age":28
}
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ ์ ๋ฌ
- ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ(๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์ด ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ => ์ด ๊ฒฝ์ฐ๋ ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ ์๋ ์์.)
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.- ์ฃผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ
POST /members HTTP/1.1
Content-Type: application/json
{
"username":"lee",
"age":28
}
โฌ๏ธ
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/100
{
"username":"lee",
"age":28
}
DELETE /members/100 HTTP/1.1
Host:localhost:8080
- ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๋ฎ์ด๋ฒ๋ฆผ.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณ(=> ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ URI ์ง์ -POST์์ ์ฐจ์ด์ )
PUT /members/100 HTTP/1.1
Content-Type: application/json
{
"username":"lee",
"age":28
}
PATCH /members/100 HTTP/1.1
Content-Type: application/json
{
"age":10
}
๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์-๊น์ํ
hanamon