HTTP๋ ํ ์คํธ ๊ธฐ๋ฐ์ ํต์ ๊ท์ฝ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ์ฌ์ด์ ํต์ ์ ์ํด ๊ณ ์๋์๋ค
- HTTP๋ TCP/IP ๊ธฐ๋ฐ์ ํต์ ํ๋กํ ์ฝ์ด๋ค
- ๋์๋ฐฉ์
- TCP Connection ์๋ฆฝ
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก HTTP Request ์ ์ก
- ์๋ฒ๋ HTTP Request์ ๋ํ HTTP Response ์ ์ก
๋น์ฐ๊ฒฐ์ฑ(Connectionless)- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ connection์ ๋งบ์ ํ request, response๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด connection์ ๋๋๋ค
- connection ์ ์ง์ ํ์ํ ๋ฆฌ์์ค ์๋ชจ๋ฅผ ์ค์ธ๋ค. โ ๋ ๋ง์ connection์ ๋งบ์ ์ ์์
- Keep-Alive ํค๋๋ก connection์ ์ ์งํ ์ ์์ โ ๋ฆฌ์์ค ์๋ชจ์ ์ ์
๋ฌด์ํ์ฑ(Stateless)- Connectionless๋ก ์ธํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ์ ๋ณด(state)๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ค
- ๋จ์ : ๋งค๋ฒ ์๋ก์ด ์ธ์ฆ์ด ํ์ํจ โ ์ฟ ํค & ์ธ์ (์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ), JWT(ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ) ์ผ๋ก ํด๊ฒฐ
- ์ฅ์ : ์๋ฒ์ Scaling Out์ด ์ํํจ(์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ)
GET https://www.test.com HTTP/1.1 // ์์ ์ค
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...// ํค๋
Upgrade-Insecure-Requests: 1
// ๋ณธ๋ฌธ - ํ์ฌ๋ ์์.- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฉ์์ง
- HTTP Request Message๋ 3๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋จ
- ์์์ค :
HTTP Method ์ข ๋ฅ&URI&HTTP ๋ฒ์ - ํค๋ : Request์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋
- ๋ณธ๋ฌธ : RequestBody (Request์ ํจ๊ป ์ ์กํ ๋ฐ์ดํฐ)
- ์์์ค :
GET(Read)- ์์ ์กฐํ ์ ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง์ ํตํด ์ ๋ฌ (๋ฐ์ดํฐ๋ฅผ RequestBody๋ก ์ ๋ฌํ ์ ์์ผ๋ ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์)
- GET Request์ ๋ํ Response : ์บ์ ๊ฐ๋ฅ
HEAD- GET ๋ฉ์๋์ ๋น์ทํ๊ฒ ๋์
- ์๋ต์ฝ๋ & ํค๋๋ง ์กด์ฌ(RequestBody๊ฐ ์์)
POST(Create)- ์์ ์์ฑ ์ ์ฌ์ฉ
- ์์ฑํ ๋ฐ์ดํฐ๋ฅผ RequestBody์ ๋ด์ ์ ๋ฌํจ (์ฃผ๋ก JSON ํ์)
- POST Request์ ๋ํ Response : ์บ์ ๊ฐ๋ฅ
PUT(Create, Update)- ์์ ๋์ฒด ์ ์ฌ์ฉ (URI์ ์์ ์๋ณ์ ํ์)
- ๋์ฒดํ ๋ฐ์ดํฐ๋ฅผ RequestBody์ ๋ด์ ์ ๋ฌํจ (RequestBody์ ๋ด์ง ์์ ๋ด์ฉ์ ํด๋น ์์์์ ์ญ์ ๋จ) โ ์์์ ์์ ํ ๋์๋ PATCH๋ฅผ ์ฌ์ฉํ ๊ฒ!
- PUT Request์ ๋ํ Response : ์บ์ ๋ถ๊ฐ๋ฅ
PATCH(Update)- ์์ ์์ ์ ์ฌ์ฉ
- ์์ ํ ๋ฐ์ดํฐ๋ง RequestBody์ ๋ด์ ์ ๋ฌํจ (RequestBody์ ๋ด์ง ์์ ๋ด์ฉ์ ์ญ์ ์๋จ)
- ์๋ฒ์์ PATCH ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ POST๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ
DELETE(Delete)- ์์ ์ญ์ ์ ์ฌ์ฉ (URI์ ์์ ์๋ณ์ ํ์, ํ์ ์ํ๋ฉด ๋ชจ๋ ์ญ์ ๋จ)
์์ ์ฑ- ํด๋น HTTP ๋ฉ์๋๋ฅผ ํธ์ถํด๋ ์์์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ง ์๋ ํน์ฑ
- ์์ ํ ๋ฉ์๋๋ ์๋ฒ์ ์ํ๋ฅผ ์์ ๋ณ๊ฒฝ์ํค์ง ์์
- GET, HEAD, OPTIONS, TRACE
๋ฉฑ๋ฑ์ฑ- ํด๋น HTTP ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ์์ฒญ์ ํจ๊ณผ๊ฐ ๋๋ฑํ๋ค๋ ํน์ฑ
- ๋ฉฑ๋ฑํ ๋ฉ์๋๋ ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํฌ ์๋, ์ํค์ง ์์ ์๋ ์์. ํ ์์ฒญ์ ๋ํ ์๋ฒ์ ์ํ๋ ํญ์ ๋์ผํจ
- ๋ฉฑ๋ฑ์ฑ์ ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก Response๋ฅผ ๋ชป ๋ณด๋ผ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋์ผํ Request๋ฅผ ๋ณด๋ด๋ ๋๋์ง ํ๋จํ๊ธฐ ์ํด ํ์ํ ๊ฐ๋ ์ด๋ค. โ ์๋ ๋ณต๊ตฌ ๋งค์ปค๋์ฆ์ ํ์ํ ๊ฐ๋
- GET, PUT, DELETE
GET /data: ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ์์ ์ ๋ณด๋ง ์กฐํ๋ ๋ฟ ์๋ฒ์ ์ํ๊ฐ ๋ณํ์ง ์์PUT /data/3: ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ํด๋น ์์์ ๋ด์ฉ์ด ์์ฒญํ ๊ฐ์ผ๋ก ๋์ฒด๋์๋ค๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํจDELETE /data/3: ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ํด๋น ์์์ด ์ญ์ ๋์๋ค๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํจ- โ
POST /data: ์ฌ๋ฌ๋ฒ ํธ์ถ๋๋ฉด, ๋์ผํ ๋ด์ฉ์ ์์์ด ์ค๋ณต๋์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์๋ต๊ฒฐ๊ณผ๊ฐ ๋งค๋ฒ ๋ฌ๋ผ์ ธ ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ์ง ์์!
์บ์ ๊ฐ๋ฅ- ํด๋น HTTP ๋ฉ์๋์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ ์ ์๋ค๋ ํน์ฑ
- GET, HEAD, POST(POST์ ๊ฒฝ์ฐ ์๋ต ํค๋์ Cache-Control ๋๋ Expires ํ๋๊ฐ ํฌํจ๋์ด์๋ค๋ฉด ์บ์ฑ์ด ๊ฐ๋ฅํจ, ์ฐธ๊ณ )
- POST vs PUT
| POST | PUT |
|---|---|
| ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ์ง ์์ ์ฑ, ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ๋ฉ์๋ | ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ์ฌ, ๋ฆฌ์์ค์ ๋ด์ฉ์ ๋์ฒดํ๋ ๋ฉ์๋ |
| POST ์ฐ์ฐ์ด ์ฌ๋ฌ๋ฒ ์ํ๋๋ฉด ์ค๋ณต๋ ๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ค. | PUT ์ฐ์ฐ์ด ์ฌ๋ฌ๋ฒ ์ํ๋์ด๋, ์ง์ ๋ ๋ฆฌ์์ค๊ฐ ๋์ผํ ๋ด์ฉ์ผ๋ก ๋์ฒด๋๋ค. |
| ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ์ง ์๋๋ค โ ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ์ง ์๋ HTTP ์์ฒญ ๋ฉ์๋์ด๋ฏ๋ก | ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ๋ค โ ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ๋ HTTP ์์ฒญ ๋ฉ์๋์ด๋ฏ๋ก |
- GET vs POST
| GET | POST | |
|---|---|---|
| ์ฉ๋ | ์๋ฒ์ ์์์ ์กฐํํ ๋ ์ฌ์ฉํ๋ค. READ | ์๋ฒ์ ์์์ ์์ฑํ๊ฑฐ๋ ์์ ํ ๋ ์ฌ์ฉํ๋ค. CREATE, UPDATE |
| URL์ ๋ฐ์ดํฐ ๋ ธ์ถ ์ฌ๋ถ | URL์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์์ฒญํ๊ธฐ ๋๋ฌธ์ URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋๋ค. | URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ค |
| URL ์์ | http://localhost:8080/boardList?name=์ ๋ชฉ&content=๋ด์ฉ |
http://localhost:8080/addBoard |
| ๋ฐ์ดํฐ ์์น | HTTP Request Message์ header ๋ถ๋ถ์ URL์ด ๋ด๊ฒจ ์ ์ก๋๋ค. (URL์ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋จ) | HTTP Request Message์ body ๋ถ๋ถ์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ ์ ์ก๋๋ค. |
| response ์บ์ฑ | GET response ์ ๋ณด๋ฅผ ์บ์ฑํ ์ ์๋ค. | ๊ธฐ๋ณธ์ ์ผ๋ก POST response์ ์บ์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ค.(์๋ต ํค๋์ Cache-Control ๋๋ Expires ํ๋๋ฅผ ํฌํจํ๋ฉด ๊ฐ๋ฅํจ) |
| ๋ฐ์ดํฐ ํฌ๊ธฐ ์ ํ | ๋ฐ์ดํฐ๋ฅผ URL์ด๋ผ๋ ๊ณต๊ฐ์ ๋ด์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ ์ก๊ฐ๋ฅํ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ ํ์ ์ด๋ค. | ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ ๊ฐ์ ํฌ๊ธฐ๊ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ํฉํ๋ค. |
| ๋ณด์ | URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ด ๋ณด์์ ์ทจ์ฝํ๋ค. | URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ง ์์์ GET๋ฐฉ์๋ณด๋ค ์๋์ ์ผ๋ก ๋ณด์์ ์ด์ง๋ง, ์ํธํ ํ์ง ์๋ ์ด์ ๊ณ ๋ง๊ณ ๋งํ๋ค. |
| ๋ฉฑ๋ฑ์ฑ | ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ๋ค (์ฌ๋ฌ๋ฒ ์กฐํํด๋, ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค) | ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ์ง ์๋๋ค (์ฌ๋ฌ๋ฒ POST ์์ฒญ์ ๋ ๋ฆฌ๋ฉด, ์ค๋ณต๋ ์์์ด ์์ฑ๋๋ค) |
-
POST์ ๋ง๋ ์์ฒญ์ GET์ผ๋ก ์ํํ ๊ฒฝ์ฐ ์บ์ฑ ๋ฌธ์ (์ ์ ์กฐ๊ฑด : POST ์์ฒญ ํค๋์ Cache-Control ๋๋ Expires ํ๋๋ฅผ ํฌํจํ์ง ์์ ์๋ต๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ ์ ์๋ ๊ฒฝ์ฐ)
-
GET ๋ฐฉ์์ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ GET ์์ฒญ์ ์ฌ๋ฌ๋ฒ ์ํํ์ฌ๋ ๊ฐ์ response๋ฅผ ์ป์ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ GET์ response๋ฅผ ์บ์ฑํ์ฌ, ๋์ผํ URL๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด ์บ์ฑ๋ ๋ฐ์ดํฐ๊ฐ ์๋ตํ๋ค.
-
POST ๋ฐฉ์์ ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ์ง ์๋๋ค. ์ฆ, POST ์์ฒญ์ ์ฌ๋ฌ๋ฒ ์ํํ๋ฉด ์์์ด ์ค๋ณต ์์ฑ๋์ด ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ๋ค. ๋งค ์์ฒญ๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ค๋ ํน์ฑ ๋๋ฌธ์ POST์ response๋ฅผ ์บ์ฑํ ์ ์๋ค.
-
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ POST ๋ฐฉ์์ ๋ง๋ ์์ฒญ์ GET ๋ฐฉ์์ผ๋ก ์ํํ๋ค๋ฉด, response๊ฐ ์บ์ฑ๋์ด ์ค์ ์์์ ๋ด์ฉ๊ณผ ๋ค๋ฅธ ๊ฒฐ๊ณผ(not fresh response)๋ฅผ ์ป๋ ๋ฌธ์ ๊ฐ ์๋ค.
-
HTTP/1.1 200 OK // ์์ ์ค
Connection: keep-alive // ํค๋
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title... // ๋ณธ๋ฌธ- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ๋ฉ์์ง
- HTTP Response Message๋ 3๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋จ
- ์์์ค :
HTTP ๋ฒ์ &์ํ ์ฝ๋(Status Code)&์ํ ๋ฉ์์ง(Status Message) - ํค๋ : Request์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋
- ๋ณธ๋ฌธ : ResponseBody (Response์ ํจ๊ป ์ ์กํ ๋ฐ์ดํฐ)
- ์์์ค :
- ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ์ฒ๋ฆฌ ์ํ์ ๋ํ ์ฝ๋
- ์ซ์ 3์๋ฆฌ๋ก ์ด๋ฃจ์ด์ ธ์๊ณ , ํฌ๊ฒ 5๊ฐ์ ๋ถ๋ฅ๋ก ๋๋ ์ ์๋ค.
| 1XX | ์ ๋ณด์ ์ก ์์์๋ต | ์์ฒญ์ ๋ฐ์์ผ๋ฉฐ ์์ ์ ๊ณ์ํ๋ค |
|---|---|---|
| 2XX | ์ฑ๊ณต | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์์ ํ์ฌ ์ดํดํ๊ณ , ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค |
| 3XX | ๋ฆฌ๋ค์ด๋ ์ ์๋ฃ | ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ง์น๊ธฐ ์ํด ์ถ๊ฐ ๋์์ ์ทจํด์ผํ๋ค |
| 4XX | ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ | ํด๋ผ์ด์ธํธ์ ์ค๋ฅ๊ฐ ์์์ ๋ํ๋ธ๋ค |
| 5XX | ์๋ฒ ์ค๋ฅ | ์๋ฒ๊ฐ ์ ํจํ ์์ฒญ์ ๋ช ๋ฐฑํ๊ฒ ์ํํ์ง ๋ชปํ์์ ๋ํ๋ธ๋ค |
