HTTP ํต์ ์ ๊ฐ๊ด์ ์ธ ๋ด์ฉ์ด๋ฉฐ Stateless, Request, Response, Status code ๋ฑ์ ๋ฑ์ ๋ํ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ต๋๋ค. ๐
HTTP, ๋จ์ด๋ก ๋ถ๋ฆฌํด์ ๋ค์ผ๋ฉด ์ด๊ฒ ๋ญ๊ฐ ์ถ์ง๋ง ์ฐ๋ฆฌ๋ ์น ์ํ์ ํ๋ค ์ฃผ์์ฐฝ์์ ์ฌ์ฌ์น ์๊ฒ ์ด๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ ์ง๋ง ๊ตณ์ด ์ด๊ฒ์ ๋ํด ์์๋ณด๋ ค ํ๋ ์๊ฐ์ ํ์ง ์์์ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด HTTP๋ ๋ฌด์์ธ๊ฐ.
์์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋คํธ์ํฌ ํจ๋์ ๋ํด ๊ณต๋ถํ๋ฉด์ HTTP Status์ ๋ํด ์ ์ ์์๋ณธ ๋ฐ๊ฐ ์๋ค. ์ด๋ ๋ฆฌ์์ค์ ์์ฒญ๊ณผ ์๋ต์ ์์ด ๊ทธ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ๋จํ ์ดํดํ์๋ค. ๊ทธ๋ฌํ ๋งฅ๋ฝ์์ HTTP์ ์ ์๋ถํฐ ์์๋ณด์.
HTTP๋ HyperText Transfer Protocol
์ ์ฝ์๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ(Request) ๋ฐ ์๋ต(Response)์ ๊ณผ์ ์ ์ ๋ฆฌํ ๊ท์ฝ(Protocol)์ด๋ค. ์ฌ๋๋ค๋ ๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด์ ์ํตํ๊ณ ์ ํ ๋ ์ด๋ฅผ ๋ฌป๋ ์์์ด ์ ํด์ ธ์๋ค. "์ด๋ ํ ์ ๋ณด๊ฐ ํ์ํ์ง, ๋ฌผ์ด๋ณด๋ ๋ฐฉ์์ ๋ฌด์์ธ์ง" ๋ฑ๊ณผ "๊ทธ ์์ฒญ์ ๋ํด ๋ต๋ณํ ์ ์๋์ง, ์๋๋ค๋ฉด ์ด์ ๋ ๋ฌด์์ธ์ง" ๋ฑ์ ๋ํด ์ปค๋ฎค๋์ผ์ด์
ํ๋ค. ์ปดํจํฐ ๋ํ ์ด๋ฌํ ์ปค๋ฎค๋์ผ์ด์
์ ์ํ ๊ท์ฝ์ด ํ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ๋ฐ๊ณ ์ด๋ฅผ ํ์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ด๊ธฐ ์ํด์ HTTP๋ฅผ ์์์ผ๊ฒ ๋ค์? ๐ค
๊ทธ๋์ ์ด์ HTTP๋ ์ด๋ค ํน์ง์ ๊ฐ๋์ง, ์์ฒญ๊ณผ ์๋ต์ ์ด๋ ํ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง ๋ฑ์ ๋ํ ๋ด์ฉ์ ์์๋ณผ ๊ฒ์ด๋ค.
HTTP๋ ์์์ ์ธ๊ธํ๋ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ค์ํ ํน์ง์ ๊ฐ์ง๋ค. ์ฐ์ ๋๋ถ๋ถ์ ํ์ผ ํ์๋ค์ HTTP ํต์ ์ ์ด์ฉํด ์ ์ก ๊ฐ๋ฅํ๋ค. ๋ํ์ ์ผ๋ก JSON, TEXT, IMAGE ํ์ผ๋ค์ ์ ์กํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ์ ์ด๋์ ์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ์์ฒญ๊ณผ ๊ทธ์ ๋ฐ๋ฅธ ์๋ต์ผ๋ก ์ด๋ฃจ์ด์ง๊ณ , ์๋ต๊ณผ ์์ฒญ์ ๋ฌด์ํ์ ๋น์ฐ๊ฒฐ์ฑ์ด๋ผ๋ ํน์ง์ ๊ฐ๋๋ค.
Request
& Response
๐HTTP ํต์ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ด์ ๋ฐ๋ผ ์๋ฒ ์ธก์์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์๋ต์ ๋ณด๋ด๋ ํ์์ ๊ฐ๋๋ค. ๋น์ฐํ๋ ์ด์ ๋ํ ํ์์ด ์กด์ฌํ๊ณ ์ด๋ฌํ ํ์์ ๋ง์ถ์ง ์๊ณ ๋ง๋๋ก ์์ฒญ์ ์งํํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
(์ ์งค์ฒ๋ผ ๋ฐ๋ ๋๋ ์์ด ๋ฌ๋ผ๊ณ ํ๋ฉด ๋ชป ์์๋จน๋๋ค...๐
)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๊ฐ๊ฐ์ ํ์์ ๋ํด ์ดํดํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค.
Request
์์ฒญ(Request)์ ํฌ๊ฒ StartLine
, Headers
, Body
์ธ ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค. ๊ฐ๊ฐ์ ์์ญ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ค.
StartLine
: ์์ฒญ์ ์ฒซ ๋ฒ์งธ ์ค. ์์ฒญ์ ๊ฐ๊ด์ ์ธ ๋ถ๋ถ์ ํด๋นํ๋ค.HTTP method / Request Target / HTTP version
Headers
: ์์ฒญ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ด๊ธฐ๋ฉฐ ๊ฐ์ฒด ํํ๋ฅผ ๊ฐ๋๋ค.Headers { Host : ~, User-Agent : ~ ... }
Body
: ์์ฒญ์ ์์ธ ๋ด์ฉ์ ํด๋นํ๋ค. ์ญ์ ๊ฐ์ฒด ํํ๋ฅผ ๊ฐ๋๋ค. Headers
์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค. Body
๊ฐ ์กด์ฌํ์ง ์๋ ๋ฉ์๋๋ ์๋ค.(ex) Get
)Body { Host : ~, User-Agent : ~ ... }
Response
์๋ต(Response) ๋ํ ์์ฒญ๊ณผ ๊ฐ์ด StartLine
, Headers
, Body
์ธ ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋๊ณ , ๋ด์ฉ ๋ํ ๋์ฒด๋ก ์ ์ฌํ๋ค.
StartLine
: ์๋ต์ ์ฒซ ๋ฒ์งธ ์ค. ์๋ต ์ํ์ ๋ํ ๊ฐ๋ตํ ๋ด์ฉ์ ํฌํจํ๋ค.HTTP version / Status Code / Status Text
Headers
: ์๋ต์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ด๊ธฐ๋ฉฐ ๊ฐ์ฒด ํํ๋ฅผ ๊ฐ๋๋ค.Headers { Connection : ~, Content-Length : ~ ... }
Body
: ์๋ต์ ์์ธ ๋ด์ฉ์ ํด๋นํ๋ฉฐ, ์ญ์ ๊ฐ์ฒด ํํ๋ฅผ ๊ฐ๋๋ค. ์์ฒญ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ต๋ ์๋ ์๋ค.
์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ์์ฒญ๊ณผ ์๋ต์ ๋ค์์ ์์์ ๊ฐ์ด ์งํ๋๋ค.
HTTP ํต์ ์์ ์ด๋ ํ ๋ชฉ์ ์ ๊ฐ๊ณ ์๋ ์ง์ ๋ฐ๋ผ ๋ค๋ฅธ HTTP Method๊ฐ ์ฌ์ฉ๋๋ค. ๋ค์ํ Method๊ฐ ์์ง๋ง, ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋
GET
๊ณผPOST
๋ฅผ ๋น๊ตํ๋ฉด์ ์์๋ณด์.
์ฐ์GET
์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋๋ก ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ ๋, HTTP Code200 OK
๋ฅผ ๋ฐํํ๋ค. ๋ํGET
์์ฒญ์ idempotent(๋ฉฑ๋ฑ์ฑ) ํ๋ฐ ์ด๋ ๊ฐ์ ์์ฒญ์ ํ๋๋ผ๋ ๋งค๋ฒ ๊ฐ์ ๊ฐ์ ๋ฐํํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋ฌ๋ฏ๋กGET
์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ์ ์์ ํ์ง ์์ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ํ๋ค.
๋ฐ๋ฉด์POST
์ ๊ฒฝ์ฐ, ์๋ก์ด ๋ฆฌ์์ค์ ์์ฑ์ ์ฌ์ฉ๋๋ค. ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ถ๋ชจ ์์์ ํ์ ๋ฆฌ์์ค ์์ฑ์ ์ฌ์ฉ๋๋ค๋ ๋ง์ด๋ค. ๊ทธ๋ ๊ธฐ์POST
๋ ์ฑ๊ณต์ ์ผ๋ก ์์ํ๋ฉด201 Created
๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณPOST
๋ฉ์๋๋GET
๊ณผ ๋ฐ๋๋ก idempotent ํ์ง ์๊ธฐ์ ๊ฐ์POST
์์ฒญ์ ๋ฐ๋ณตํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์POST
์์ฒญ์ ๋ณด๋ด๋ฉด ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ Request methods์ ๋ํ ๋ช ์ธ์ w3schools.com์ GET method vs POST method๋ฅผ ์ฐธ์กฐํ์.
Connectionless
์์ฒญ๊ณผ ์๋ต์ ์์ด ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ฐ๊ฒฐ์ ์์ํ ์ดํ ๊ณผ์ ์ด ๋๋๋ฉด ๋์์ ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค๋ ํน์ง์ ๊ฐ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ฐ๊ฒฐ์ ๊ตณ์ด ๋์ด์ผ๋ง ํ๋ ๊ฒ์ผ๊น?
์๋ฒ๋ ๋ถํน์ ๋ค์์ ํด๋ผ์ด์ธํธ์ ํต์ ์ ํด์ผํ๋ ํ๊ฒฝ์ ๊ฐ๋๋ฐ ๋ง์ฝ ์ด ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ๋ค๋ฉด, ์ด์ ํจ๊ป ๋ฐ์ํ๋ ๋ฆฌ์์ค๊ฐ ๋ถ๊ฐํผํ๊ฒ ๋์ด๋ ๊ฒ์ด๊ณ ์ฐ๊ฒฐ์ ์ ๋ํ ๊ฐ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌํ ์ด์ ๋๋ฌธ์ HTTP ํต์ ์ ๋น์ฐ๊ฒฐ์ฑ์ ๊ฐ๋๋ค.
์ด๋ ๊ฒ ๋ค์ผ๋ฉด ๋น์ฐ๊ฒฐ์ฑ์ด ๋จ์ ์ด ์๋ ๊ฒ ๊ฐ์ง๋ง, ๋ฐ๋ณต์ ์ผ๋ก ์ฐ๊ฒฐ ๋ฐ ํด์ ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๊ธฐ์, ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๋จ์ ๋ํ ๊ฐ๊ณ ์๋ค.
Stateless
์์์ ์ธ๊ธํ ๋น์ฐ๊ฒฐ์ฑ์ผ๋ก ์ธํด ๊ฐ๊ฐ์ ์์ฒญ์ ๊ตฌ๋ถ๋์ด ์๋ฒ์๊ฒ ๋
๋ฆฝ์ ์ธ ๋์์ผ๋ก ์ทจ๊ธ ๋ฐ๋๋ค. ์ด ๋ง์ด ๋ฌด์จ ๋ง์ด๋๋ฉด, ๋ฐ๋ก ์ด์ ์ ๋ณด๋ธ ์์ฒญ์์๋ ๋ถ๊ตฌํ๊ณ ์ด์ ์ ์์ฒญ๊ณผ ์ฐ๊ด์ฑ์ ๊ฐ์ง ๋ชปํ๋ฉฐ, ์๋ก ๊ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์กด์ฌํ๋ค.
// Request/Response 1
Client -- '๋๋ ์ ์ "a" ์ผ ๋ก๊ทธ์ธ ํ ์ ์๋?' --> Server
Server -- '์๊ฒ ์ด, ํ์ธํ๊ณ ์์ผ์ค๊ฒ' --> Client
// Request/Response 2
Client -- '์ ์ ์๋, ์ ์ "a" ์ผ ๋ก๊ทธ์ธ ์์ผ์ค' --> Server
Server -- '๋๊ฐ ๋๊ตฐ๋ฐ, ๋ "a" ๋ชฐ๋ผ' --> Client
์์ ์์ฒญ์์ ์ ์ a
๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ฌ ๋ก๊ทธ์ธ์ ์์ฒญํ์๊ณ , ์ด์ ๋ฐ๋ผ ๋ก๊ทธ์ธ์ด ๋์์ง๋ง ๋ค์ ๋ก๊ทธ์ธ์ ์งํํ ๋, ์ ์ ์๋ ์ ์ a
๊ฐ ๋ฐฉ๋ฌธํ๋ ๊ธฐ๋ก์ ๋ค์ ์ฐธ์กฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
์ด์ฒ๋ผ ์์ฒญ ๊ฐ์๋ ๋
๋ฆฝ์ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ๋งค ์ฐ๊ฒฐ๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๋จ์ ์ด ์กด์ฌํ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ํฉ์์ ์ค๋ณต ์์ฒญ์ ๋ฐฉ์งํ๊ณ ์, ํ ํฐ์ ํฌํจํ์ฌ ์๋ต๊ณผ ํจ๊ป ๋ณด๋ด ํด๋ผ์ด์ธํธ์ ์ ์ฅํ๊ณ ๋ค์์ ๊ฐ์ ์์ฒญ์ ์งํํ๊ณ ์ ํ ๋, ํ ํฐ์ ํจ๊ป ํฌํจํ์ฌ ์์ฒญ์ ์๋ํ๋ฉด ์ด๋ฅผ ๋ ์ ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค. ์ด๋ฌํ ํ ํฐ์ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ ์คํ ๋ฆฌ์ง ๋ฑ์ ํํ๋ก ์ ์ฅ๋๋ค.
์์์ ์์ฒญ๊ณผ ์๋ต์ ์์๋ณด์๋๋ฐ, ์ ์ ํ ์์ฒญ์ ๋ณด๋์ ๋ ์๋ต์ ํฌํจ๋์ด ์ค๋ ์ ๋ณด ์ค, HTTP ํต์ ์ ์ํ๋ฅผ ๋ํ๋ด๋ ์ฝ๋๊ฐ ์๋ค.
์ด๋ฌํ ์ํ ์ฝ๋์ ์ ํ์ ์์ฃผ ๋ค์ํ์ง๋ง, ๊ทธ ์ค ๊ฐ๋ตํ๊ฒ ๊ตฌ๋ถ์ง์ด ๋ช ๊ฐ์ง๋ง ์์๋ณด๋๋ก ํ์.
์๋์ ์ํ ์ฝ๋๋ค์ ์์ฒญ์ ์ํด ์ฐ๊ฒฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์งํ๋๊ฑฐ๋, ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ก๋ ๊ฒฝ์ฐ ๋ฑ์ ์๋ฏธํ๋ค.
200 OK
: ์ฑ๊ณต์ ์ผ๋ก ์๋ต201 Created
: ์ฑ๊ณต์ ์ผ๋ก ๋ฆฌ์์ค ์์ฑ
์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ถ๋ถ์ด ์์ฒญ ๋ถ๋ถ์์ ์๋ชป๋ ๊ฒ์ผ๋ก, ์ฃผ๋ก ํ๋ก ํธ์๋ ๋จ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ๋ณด์ด๋ ์๋ต ์ฝ๋๋ค.
400 Bad Request
: ์ ํจํ์ง ์๋ ์์ฒญ401 Unauthorized
: ๋ฆฌ์์ค ์์ฒญ์ ๋ํ ์ธ์ฆ์๊ฒฉ ๋ถ์กฑ403 Forbidden
: ์์ฒญ์ ์ดํดํ์ง๋ง ์น์ธ์ ๊ฑฐ๋ถ404 Not Found
: ์๋ฒ๊ฐ ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์
์ค๋ฅ๊ฐ ์๋ฒ ์ธก์์ ๋ฐ์ํ์ ๊ฒฝ์ฐ ๋ํ๋๋ ์๋ต ์ฝ๋๋ก, ์ฃผ๋ก ๋ฐฑ์๋ ๋จ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ํ๋๋ ์๋ต ์ฝ๋๋ค.
500 Internal Server Error
: ๋ด๋ถ ์๋ฒ ์ค๋ฅ๋ก ์์ฒญ์ ์ดํํ์ง ๋ชปํจ501 Not Implemented
: ์์ฒญ ์ํ์ ํ์ํ ๊ธฐ๋ฅ์ ์๋ฒ๊ฐ ์ง์ํ์ง ์์
์ค๋๋ ์ด๊น์์ด ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ ์๊ฐ์ด ๋์์๋ค. HTTP์ ๋ํ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ์ ๋ฆฌํ๋ฉด์ ๋ง๋ฌด๋ฆฌํ์.
StartLine
, Headers
, Body
๊ตฌ๋ถ๋๋ ํ์์ ๊ฐ๋๋ค.Connectionless
)๊ณผ ๋ฌด์ํ(Stateless
)์ ํน์ง์ ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ฐ์ข
์คํ ๋ฆฌ์ง์ ์ฟ ํค๋ฅผ ํ์ฉํ๋ค.HTTP : wikipedia : HTTP
HTTP ํน์ง : kotlinworld : HTTP(HyperText Transfer Protocol)์ ํน์ง
HTTP Status Code : MDN Web Docs : HTTP ์ํ ์ฝ๋