โ ๋ชฉ์ฐจ
โ Web์ ๋์ ์๋ฆฌ
โ HTTP๋?
โ HTTP ํ๋กํ ์ฝ์ ํน์ง
โ HTTP ๋ฉ์์ง ๊ตฌ์กฐ
- ์์ฒญ ๋ฉ์์ง
- ์๋ต ๋ฉ์์ง
โ HTTP ๋ฉ์๋
โ HTTP ์ํ ์ฝ๋
โ ์ฐธ๊ณ ๋ฌธํ
โ Web์ ๋์ ์๋ฆฌ
๐ฅ ๋ฐฐ๊ฒฝ
1989๋ , ํ ๋ฒ๋์ค ๋ฆฌ ๋ผ๋ ์๊ตญ ๊ณผํ์์ ์ํด "์น(World Wide Web)" ์ด ๋ฑ์ฅํ๊ฒ ๋์๋ค.
์น์ ์ ๋ณด ๊ณต์ ๋ฅผ ๋ชฉ์ ์ผ๋ก ํ๋ ํ๋ซํผ์ผ๋ก์, ํ์ดํผํ ์คํธ์ ์ธํฐ๋ท ๊ธฐ์ ์ ๊ฒฐํฉํ์ฌ ๊ฐ๋ฐ๋์๋ค.
์น์ ์จ๋๋งจ๋ ๋ฐฉ์(์ํ๋ ์ ๋ณด๋ฅผ ์ํ๋ ์๊ฐ์ ์ธ์ ๋ ์์ ํ ์ ์์)์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ค๋ ํน์ง์ด ์์ด
๋ง์ ์ฌ๋๋ค์๊ฒ ๋๋ฆฌ ์ด์ฉ๋๊ธฐ ์์ํ์๋ค.
๐ฅ ๋์ ์๋ฆฌ

๐ ์น์ ์น ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์ ๋ณด๋ฅผ ์์ฒญํ๋ฉด, ์น ์๋ฒ๊ฐ ์๋ต์ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
ํด๋ผ์ด์ธํธ : ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ . ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์๋ต์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์ญํ
์๋ฒ : ์น์ ์ปจํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์ปดํจํฐ. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ตํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ญํ
๐ ์น์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ HTTP ํ๋กํ ์ฝ์ ๋ฐ๋ผ ํต์ ํ๋ค.
- ์ฆ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ HTTP ๋ฉ์์ง๋ฅผ ๊ตํํ์ฌ ์๋ก ํต์ ํ๋ค.
์ ๋ฆฌํ๋ฉด,
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด,
์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ HTTP ์๋ต ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
โ HTTP๋?
- HyperText Transfer Protocol
- ์น์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํต์ ๊ท์ฝ(ํ๋กํ ์ฝ)์ด๋ค.
- ์ฝ๊ฒ ๋งํ๋ฉด HTTP๋,
์น์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์นํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ์์ฒญํ๊ณ , ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์นํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ์ ์กํ๋์ง ์ ์ํด๋ ๊ท์ฝ์ด๋ค.
โ HTTP ํ๋กํ ์ฝ์ ํน์ง
๐ฅ HTTP ํ๋กํ ์ฝ์ statelessํ๋ค.
- ์๋ฒ๋ ์์ ์๊ฒ ์์ฒญ์ ๋ณด๋ธ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ์ง ์๋๋ค.
- ์ฝ๊ฒ ๋งํ์๋ฉด HTTP๋ ๋จ์ํด์, ํด๋ผ์ด์ธํธ๊ฐ request ๋ณด๋ด๋ฉด ์๋ฒ๋ response ๋ณด๋ด์ฃผ๊ณ ๋์ด๋ค.
๐ฅ HTTP๋ ์ ์ก ํ๋กํ ์ฝ๋ก TCP๋ฅผ ์ฌ์ฉํ๋ค.
- TCP: ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ํต์ "์ฐ๊ฒฐ"์ ์ ์ดํ๋ ํธ๋์คํฌํธ ๊ณ์ธต ํ๋กํ ์ฝ์ด๋ค.
๐ฅ URI๋ก ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ค.
โ HTTP ๋ฉ์์ง ํฌ๋งท

์์์ ๋ดค๋ ๊ทธ๋ฆผ์ด๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๊ฒ Request ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ Response ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
HTTP๋ก ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด, ๋ฐ๋์ ์ ํด์ง ํ์๋๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ค.
ํ์์ ์งํค์ง ์์ผ๋ฉด ๋ฐ๋ ์ชฝ์์ ๋ฉ์์ง๋ฅผ ์ฝ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด HTTP ๋ฉ์์ง๋ ์ด๋ ํ ํ์์ผ๋ก ์ ์๋์ด ์์๊น?
๐ฅ HTTP ์์ฒญ ๋ฉ์์ง ๊ตฌ์กฐ
- HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๋ฐ๋์ ์๋ ํ์์ ์ง์ผ์ ๋ณด๋ด์ผ ํ๋ค.

Request Line
- HTTP ๋ฉ์๋, URL, HTTP ๋ฒ์ ์ ์์๋๋ก ๋ช ์ํ๋ค.
Headers
- ์์ฒญ์ ํ์ํ ํค๋๋ค์ ๋ช ์ํ๋ค.
- ํค๋๋ key:value ์์ผ๋ก ๊ตฌ์ฑ๋๊ณ , ์์ฒญ์ ํ์ํ ์ฌ๋ฌ ๊ฐ์ง ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๋ค.
- ํค๋ ์์
- Host : ์์ฒญ์ ๋ณด๋ด๊ณ ์ ํ๋ ์๋ฒ์ ๋๋ฉ์ธ ์ฃผ์
- Authorization : ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด
- User-Agent : ํด๋ผ์ด์ธํธ ์ํํธ์จ์ด ์ ๋ณด
Blank Line
- ํค๋์ ๋ฐ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋น์๋์ด์ผ ํ๋ค.
Body
- ์์ฒญ ๋ฉ์์ง์ json์ด๋ ์ด๋ฏธ์งํ์ผ๊ณผ ๊ฐ์ ์ปจํ ์ธ ๋ฅผ ๋ด์์ ๋ณด๋ผ ์๋ ์๋ค.
๊ทธ๋ด ๋์๋ ๊ทธ ์ปจํ ์ธ ๋ฅผ body์ ๋ด์์ค๋ค.
HTTP ์์ฒญ ๋ฉ์์ง ์์

๐ฅ HTTP ์๋ต ๋ฉ์์ง ๊ตฌ์กฐ
- HTTP ์์ฒญ ๋ฉ์์ง์ ๋ํด ์๋ตํ๋ ค๋ฉด ๋ฐ๋์ ์๋ ํ์์ ์ง์ผ์ ๋ณด๋ด์ผ ํ๋ค.

Status Line (์ํ ๋ผ์ธ)
- HTTP ๋ฒ์ , ์ํ ์ฝ๋, ์ํ ๋ฉ์์ง ๋ช ์
- ์ํ ์ฝ๋๋ ์๋ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์ฃผ๋ ์ฝ์๋ 3์๋ฆฌ ์ ์์ด๋ค.
(์๋ฅผ ๋ค๋ฉด ์น๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์ฃผ ๋ณผ ์ ์๋ 404 NOT FOUND, 400 BAD REQUEST์ ๊ฐ์ ๊ฒ๋ค์ด ๋ฐ๋ก
์ํ ์ฝ๋์ ์ํ ๋ฉ์์ง์ด๋ค.)
- ์ํ ์ฝ๋ ์ข ๋ฅ๋ ์๋์์ ๋ค์ ์ค๋ช ํ ์์
Headers
- ์๋ต์ ํ์ํ ํค๋๋ค์ ๋ช ์ํ๋ค.
- ํค๋๋ key:value ์์ผ๋ก ๊ตฌ์ฑ๋๊ณ , ์๋ต์ ํ์ํ ์ฌ๋ฌ ๊ฐ์ง ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๋ค.
- ํค๋ ์์
- Server : ์๋ต์ ์์ฑํ ์๋ฒ์ ์ ๋ณด
- Content-Type : ์๋ต ๋ฐ๋์ ๋ด๊ธด ์ปจํ ์ธ ์ ์ข ๋ฅ (json์ธ์ง, text์ธ์ง ๋ฑ๋ฑ)
- Content-Length : ์๋ต ๋ฐ๋์ ๋ด๊ธด ์ปจํ ์ธ ์ ๊ธธ์ด(byte)
Blank Line
- ํค๋์ ๋ฐ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋น์๋์ด์ผ ํ๋ค.
Body
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฆฌ์์ค(๋ฐ์ดํฐ)๊ฐ ์ค์ ๋ก ๋ด๊ธฐ๋ ๋ถ๋ถ์ด๋ค.
HTTP ์๋ต ๋ฉ์์ง ์์

โ HTTP ๋ฉ์๋
- ํด๋ผ์ด์ธํธ๊ฐ (URI๋ก ์๋ณํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๋์์ผ๋ก) ์๋ฒ์๊ฒ ์์ฒญํ๋ ์์ (ํ์)์ ์ข ๋ฅ๋ฅผ ๋ํ๋ธ๋ค.
๐ฅ ๋ช ๊ฐ์ง ์ ๋ช ํ ๋ฉ์๋๋ค
GET
- URL ํ๋๋ก ์๋ณ๋๋ ์๋ฒ์ ํน์ ๋ฆฌ์์ค๋ฅผ ์กฐํ ์์ฒญํ ๋ ์ฌ์ฉํ๋ค.
- body๋ฅผ ๋น์๋๋ ๊ฒ์ด ์์น์ด๋ค.
( GET ์์ฒญ์ body๋ฅผ ํฌํจํ ์๋ ์์ง๋ง, ์ง์ํ์ง ์๋ ์๋ฒ๊ฐ ๋ง์์ ๊ถ์ฅํ์ง ์๋๋ค )
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ ์ฟผ๋ฆฌ์คํธ๋ง์ ํตํด์ ์ ๋ฌํ๋ค.
POST
- ํด๋ผ์ด์ธํธ๋ ์์ฒญ ๋ฐ์ดํฐ(๋ฆฌ์์ค)๋ฅผ body์ ๋ด์ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ์ด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. (์ฃผ๋ก ๋ฑ๋ก)
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์: ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ๊ฒ์, ๋๊ธ ๋ฑ๋ก, ํ์๊ฐ์ , ๋ฐฐ๋ฌ ์์ ๋ฑ๋ฑ
PUT
- ๋ฆฌ์์ค๋ฅผ ์ ๋ก๋ ๋๋ ์์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
- ์๋ฒ์ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด ์์ฑํ๊ณ , ์กด์ฌํ๋ค๋ฉด ๋ฆฌ์์ค ์ ์ฒด๋ฅผ ์์ฒญ body์ ๋ด์ฉ์ผ๋ก ๊ต์ฒดํ๋ค.
(์ฝ๊ฒ ๋งํด์ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ๋ฎ์ด๋ฒ๋ฆฐ๋ค.)
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น๋ฅผ ์๊ณ URI์ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. (์ด๊ฒ์ด POST์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ )
PATCH
์น์๋ฒ์ ๋ฆฌ์์ค ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ๋ฅผ ์์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
์ฆ, ๋ฆฌ์์ค์ ๋ถ๋ถ์ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํ๋ค.
DELETE
์ง์ ํ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
์ฌ์ฉ์ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์น์๋ฒ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ํ์ฉํ๋ค.
๊ทธ ์ธ
HEAD
GET๋ฐฉ์๊ณผ ์ ์ฌํ์ง๋ง, ์๋ฒ ์๋ต์๋ body๊ฐ ์๊ณ header๋ง ์กด์ฌํ๋ค.
์ฃผ๋ก ๊ฐ๋ฐ์๊ฐ ๋๋ฒ๊น ํ ๋, ๋ฆฌ์์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ๋ ์ฌ์ฉํ๋ค.
TRACE
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ณด๋ธ ์์ฒญ์ ๊ทธ๋๋ก ๋๋๋ ค๋ฐ๋๋ค.
์๋ฒ๋ ์์ ์ด ๋ฐ์ ์์ฒญ ๋ฉ์์ง๋ฅผ ๋ณธ๋ฌธ์ ํฌํจํ ์๋ต์ ์ ๊ณตํ๋ค.
OPTIONS
์๋ฒ์๊ฒ ์๋ฒ๊ฐ ํน์ ๋ฆฌ์์ค์ ๋ํด ์ง์ํ๋ HTTP ๋ฉ์๋ ๋ฆฌ์คํธ๋ฅผ ์์ฒญํ๋ค.
CONNECT
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋งบ์ ๋ ์ฌ์ฉ๋๋ค.
์ฃผ๋ก ํ๋ก์์ ๊ฐ์ ์ค๊ฐ ์๋ฒ์์ ํต์ ์ ์ฌ์ฉ๋๋ค.
โ HTTP ์ํ ์ฝ๋
- HTTP ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด์ฃผ๋ ์ซ์ ์ฝ๋์ด๋ค.
- HTTP ์๋ต ๋ฉ์์ง์ ์ฒซ ์ค์ ํ๊ธฐํ๋ค.
- ๋ชจ๋ ์ํ์ฝ๋๋ 3์๋ฆฌ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
1xx (Informational) - ์์ฒญ์ ๋ฐ์๊ณ ์ฒ๋ฆฌ์ค์
2xx (Successful) - ์ฒ๋ฆฌ ์ฑ๊ณต
3xx (Redirection) - ์์ฒญ ๋ฆฌ์์ค๊ฐ ๋ค๋ฅธ ์์น์ ์์
4xx (Client Error) - ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์๋ชป๋์๊ฑฐ๋ ์ ํจํ์ง ์์
5xx (Server Error) - ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฌ๋ฐ๋ฅด์ง๋ง, ์๋ฒ์์ ์ฒ๋ฆฌํ ์ ์์
๐ฅ ์ ๋ช ํ ์ํ์ฝ๋๋ค
200 OK - ์์ฒญ ์ฒ๋ฆฌ ์ฑ๊ณตํ๊ณ , ์ ๋ณด๊ฐ ์๋ต์ผ๋ก ๋ณด๋ด์ก๋ค
201 Created - ์์ฒญ ์ฒ๋ฆฌ ์ฑ๊ณตํ๊ณ , ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์๋ฒ์ ์ ์ฅ๋์๋ค
204 No Content - ์์ฒญ ์ฒ๋ฆฌ ์ฑ๊ณตํ๊ณ , ์ ๋ณด๊ฐ ์๋ต์ผ๋ก ๋ณด๋ด์ง์ง๋ ์์๋ค
301 Moved Permanently - ์์ฒญ ๊ฐ์ฒด๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋๋์๋ค
302 Found - ์์ฒญ ๊ฐ์ฒด๊ฐ ์์์ ์ผ๋ก ์ด๋๋์๋ค
400 Bad Request - ์๋ชป๋ ์์ฒญ. ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ ์ ์๋ค.
401 Unauthorized - ํด๋น ์์ฒญ์ ์ํด์๋ ์ธ์ฆ์ด ํ์ํ๋ค
403 Forbidden - ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ฒญ์ ๋ํ ๊ถํ์ ๊ฐ๊ณ ์์ง ์๋ค
404 Not Found - ์๋ฒ์ ์์ฒญํ ๋ฌธ์(ํ์ด์ง)๊ฐ ์กด์ฌํ์ง ์๋๋ค
500 Internal Server Error - ๋ด๋ถ ์๋ฒ ์ค๋ฅ
501 Not Implemented - ์๋ฒ๊ฐ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค (์๋ฒ์ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์๋ค)
502 Bad Gateway - ๊ฒ์ดํธ์จ์ด ์ค๋ฅ
503 Service Unavailable - ์๋น์ค ์ด์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค
505 HTTP Version Not Supported - ์์ฒญ HTTP ๋ฒ์ ์ ์๋ฒ๊ฐ ์ง์ํ์ง ์๋๋ค
โ Reference
- https://www3.ntu.edu.sg/home/ehchua/programming/webprogramming/http_basics.html
- ์ปดํจํฐ ๋คํธ์ํน: ํํฅ์ ์ ๊ทผ (2022, Jim Kurose ยท Keith Ross)
- https://youtube.com/playlist?list=PLuHgQVnccGMBd-v_DjNm61EBaDpYZSV1Z
- https://www.youtube.com/watch?v=IjxkKQvn8Bc
'๊ฐ์ธ ๊ณต๋ถ > WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
@ModelAttribute (0) | 2024.03.01 |
---|---|
[๊ฐ์ ์ ๋ฆฌ] ์คํ๋ง MVC ํ์ฉ (1) | 2024.02.29 |
304 NOT MODIFIED (0) | 2024.02.28 |
[๊ฐ์ ์ ๋ฆฌ] ์คํ๋ง MVC ์ค์ (2) (0) | 2024.02.21 |
SOLID, ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น (0) | 2023.03.24 |