HTTP ๋?
HTTP๋ HyperText Transfer Protocol์ ์ฝ์๋ก ์๋ฒ-ํด๋ผ์ด์ธํธ ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ฉด์ request/response ๊ตฌ์กฐ๋ก ์น ์์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค.
TCP/IP ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, HTTP์ ๊ฐ์ฅ ํฐ ํน์ง์ Connectionless์ Stateless ์ ๋๋ค.
HTTP
HTTP๋ HyperText Transfer Protocol์ ์ฝ์๋ก ์น ์์์ ์ ๋ณด๋ฅผ ์ ์กํ๊ธฐ ์ํ ํต์ ํ๋กํ ์ฝ๋ก์จ HTML๊ณผ ๊ฐ์ ๋ฌธ์๋ฅผ ์ ์กํ๋ ๊ฒ์ ์ฌ์ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ HTTP repuest๋ฅผ ์๋ฒ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ HTTP response๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๋ ๊ตฌ์กฐ์ด๋ค.
request message๋ start line(method, path, HTTP version), headers, body๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ response message๋ status line(HTTP version, status code, status message), headers, body๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
HTTP๋ ์๋ฒ์ ์ฐ๊ฒฐ ํ ์์ฒญ์ ์๋ต์ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๋ Connectionless ํน์ฑ์ ๊ฐ์ต๋๋ค.
์ด๋ก ์ธํด ๋ง์ ์ฌ๋์ด ์น์ ์ด์ฉํ๋๋ผ๋ ์ค์ ๋์ ์ ์์ ์ต์ํํ์ฌ ๋ ๋ง์ ์ ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ฐ๊ฒฐ์ ๋์๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ์ ์ด์ ์ํ(๋ก๊ทธ์ธ ์ ๋ฌด ๋ฑ)๋ฅผ ์ ์๊ฐ ์๋ค๋ Stateless ํน์ฑ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๋ Connectionless, Stateless ํน์ฑ์ ๊ฐ์ง HTTP์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด, cookie, session, jwt ๋ฑ์ด ๋์ ๋์๋ค.
๋ํ HTTP๋ ์ ๋ณด๋ฅผ text ํ์์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ์ธํฐ์ ํธํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ์ถ์ด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ด์ ์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ HTTP์ ์ํธํ๋ฅผ ์ถ๊ฐํ ํ๋กํ ์ฝ์ด ๋ฐ๋ก HTTPS์ด๋ค.
HTTP request method ์ค GET vs POST ๋น๊ต ์ค๋ช
์ค์ํ ์ฐจ์ด์ ์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ํฌํจ์์ผ์ ์ ์กํ๋์ง, ์ด ์ฐจ์ด์ ์ผ๋ก ์ธํ์ฌ ์บ์ ๊ฐ๋ฅ ์ฌ๋ถ, ๋ณด์ ๊ทธ๋ฆฌ๊ณ ์ฉ๋๋ ๋ฌ๋ผ์ง๋ค.
GET ๋ฉ์๋ | ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋ |
POST ๋ฉ์๋ | ์๋ฒ์๊ฒ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(์ฃผ๋ก ์์ฑ)๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋ |
GET ์์ฒญ | ํ์ํ ์ ๋ณด๋ฅผ ํน์ ํ๊ธฐ ์ํด URL ๋ค์ Query String์ ์ถ๊ฐํ์ฌ ์ ๋ณด๋ฅผ ์กฐํํ๋ค. URL ๋ค์ Query String๊น์ง ํฌํจํด์ ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ์ ๋จ๊ฒ ๋๊ณ ์บ์๊ฐ ๊ฐ๋ฅํ๋ค. |
POST ์์ฒญ | ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ์ ๋จ์ง ์๊ณ ์บ์๋ ๋ถ๊ฐ๋ฅํ๋ค. |
Method
1. GET : ๋ฆฌ์์ค ์กฐํ
GET method๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ ๋ณด๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉํ๋ method์ด๋ค.
GET์ ํตํ ์์ฒญ์ URL ์ฃผ์ ๋์ key-value ์์ผ๋ก parameter๋ฅผ ํฌํจํ์ฌ ์ ์ก์ ํ๋๋ฐ, ์ด ๋ถ๋ถ์ Query String์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
GET์ ์ฃผ์ํ ํน์ง ์ค ํ๋๋ ์บ์๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
ํ ๋ฒ ์๋ฒ์ GET์์ฒญ์ ํ ์ ์ด ์๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋๋ค.
์ดํ ๋์ผํ ์์ฒญ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ๊ฐ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
2. POST : ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (์ฃผ๋ก ์์ฑ)
POST method๋ ํด๋ผ์ด์ธํธ๊ฐ body๋ฅผ ํตํด ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋๋ก ์์ฒญํ๋ method์ด๋ค.
์๋ฒ๋ POST ๋ฉ์์ง๋ฅผ ๋ฐ์ผ๋ฉด ๊ผญ ๋ฆฌ์์ค๋ฅผ ๋ฑ๋กํ๋ ๊ฒ๋ง ์๋๋ผ, ๋ฆฌ์์ค๋ง๋ค ๋ค์ํ๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ธฐ๋ ํ์ง๋ง ํน์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๋ ํ๋ค.
3. PUT : ๋ฆฌ์์ค๋ฅผ ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
4. PATCH : ๋ฆฌ์์ค์ ์ผ๋ถ๋ถ์ ์์
// EX
// Server resource
// Before
user/10
{
name: Noname,
language: C++
}
// Request
PUT user/10
{
name: Nossi,
}
// After
user/10
{
name: Nossi,
}
HTTP request method ์ค Put vs Patch ๋น๊ต ์ค๋ช
PUT ๋ฉ์๋์ PATCH ๋ฉ์๋๋ ๋ชจ๋ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฉ์๋๋ผ๋ ๊ณตํต์ ์ด ์๋ค.
PUT ์์ฒญ | ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์์ , ๋์ฒด |
PATCH ์์ฒญ | ์ผ๋ถ ๋ฆฌ์์ค๋ง ์์ |
HTTP status code(์ํ์ฝ๋) ๋?
HTTP status code๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ HTTP ์์ฒญ์ ๋ํ ์๋ฒ์ ์๋ต ์ฝ๋๋ก, ์ํ ์ฝ๋๋ฅผ ํตํด ์์ฒญ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ค.
100๋ฒ๋๋ถํฐ 500๋ฒ๋๊น์ง ์ด 5๊ฐ์ ํด๋์ค๋ก ๊ตฌ๋ถ๋์ด HTTP ์์ฒญ์ ๋ํ ์ํ๋ฅผ ์๋ ค์ค๋ค.
Status code
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ HTTP ํต์ ํ ๋ ์ฃผ๊ณ ๋ฐ์์ผ ํ ๊ฐ ์ค์ ํ๋์ด๋ค.
ํด๋ผ์ด์ธํธ๋ก ๋ถํฐ ๋ฐ์ request์ ๋ํ ์๋ฒ์ response์ ๋ํ ๊ฐ๋ตํ ์ค๋ช ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ํฉ์ ์๋ง๋ status code๋ฅผ response์ ๋ด์์ ํด๋ผ์ด์ธํธ์ ๋๊ฒจ์ฃผ๋ฉด ์ด๋ฅผ ํ ๋๋ก ํด๋ผ์ด์ธํธ๋ ์๋ง๋ ๋์์ ํ ์ ์๋ค.
HTTP status code
1xx (์ ๋ณด) | ์์ฒญ์ ๋ฐ์์ผ๋ฉฐ ์์ ์ ๊ณ์ํ๋ค. |
2xx (์ฑ๊ณต) | ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋์์ ์ฑ๊ณต์ ์ผ๋ก ์์ ํ์ฌ ์ดํดํ๊ณ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์๋ค. |
3xx (๋ฆฌ๋ค์ด๋ ์ ) | ์์ฒญ์ ์๋ฃํ๊ธฐ ์ํด ์ถ๊ฐ ์์ ์กฐ์น๊ฐ ํ์ํ๋ค. |
4xx (ํด๋ผ์ด์ธํธ ์ค๋ฅ) | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฌธ์ ๊ฐ ์๋ค. |
5xx (์๋ฒ ์ค๋ฅ) | ์๋ฒ๊ฐ ์ ํจํ ์์ฒญ์ ์ํ์ ์คํจํ๋ค. |
ํ๋ฉด์ด ๋์ค๊ธฐ๊น์ง์ ๊ณผ์ ์ ๋คํธ์ํฌ ๊ด์ ์ผ๋ก ์ค๋ช
www.google.com์ ์ฃผ์์ฐฝ์ ์ณค์ ๋
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ URL์ด ์ด๋ป๊ฒ IP๋ก ๋ณํ๋๋์ง, request ๋ฉ์์ง๊ฐ ์ ๋ฌ๋๋ ์ ์ฐจ์ ์์ ์ดํด๋ณธ HTTP protocol๊ณผ TCP protocol์ ๊ฑฐ์ณ์ ํจํท์ด ๋๋ ๊ณผ์ , request ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์๋ฒ์์๋ HTTP response message๋ฅผ ๊ตฌ์ฑํ์ฌ client๋ก ์ ์กํ๋ ๊ฒ ๋ฑ์ ์ ์ฐจ์ ๋ง๊ฒ ์์ฐจ์ ์ผ๋ก ์ค๋ช ํ๋ฉด ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ URL ์ ๋ ฅ
- ๋ธ๋ผ์ฐ์ ๋ DNS๋ฅผ ํตํด ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ฐพ๋๋ค.
- client์์ HTTP request ๋ฉ์์ง ⇒ TCP/IP ํจํท ์์ฑ ⇒ server๋ก ์ ์ก
- server์์ HTTP requset์ ๋ํ HTTP response ๋ฉ์์ง ⇒ TCP/IP ํจํท ์์ฑ ⇒ client๋ก ์ ์ก
- ๋์ฐฉํ HTTP response message๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ํด ์ถ๋ ฅ(๋ ๋๋ง)
* DNS(Domain Name System ๋๋ฉ์ธ ์ด๋ฆ ์์คํ ) ๋?
์ฌ๋์ด ์ฝ์ ์ ์๋ ๋๋ฉ์ธ ์ด๋ฆ(์: www.jay-din.tistory.com)์ ๋จธ์ ์ด ์ฝ์ ์ ์๋ IP ์ฃผ์(์: 192.4.3.66)๋ก ๋ณํํ๋ค.
์ฆ, ๋๋ฉ์ธ ์ด๋ฆ -> IP ์ฃผ์๋ก ๋ณํ
์น ๋์ ๋ฐฉ์
- ์ ์ ๊ฐ ๋ธ๋ผ์ฐ์ ์์ www.google.com(URL)์ ์ ๋ ฅ ํ๋ฉด HTTP request message๋ฅผ ์์ฑํ๋ค.
- IP์ฃผ์๋ฅผ ์์์ผ ์ ์ก์ ํ ์ ์์ผ๋ฏ๋ก, DNS lookup์ ํตํด ํด๋น domain์ server IP์ฃผ์๋ฅผ ์์๋ธ๋ค.
- ๋ฐํ๋ IP์ฃผ์(๊ตฌ๊ธ์ server IP)๋ก HTTP ์์ฒญ ๋ฉ์์ง(request message) ์ ์ก ์์ฒญ์ ํ๋ค.
- ์์ฑ๋ HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ TCP/IP์ธต์ ์ ๋ฌํ๋ค.
- HTTP ์์ฒญ ๋ฉ์์ง์ ํค๋๋ฅผ ์ถ๊ฐํด์ TCP/IP ํจํท์ ์์ฑํ๋ค.
- ํด๋น ํจํท์ ์ ๊ธฐ์ ํธ๋ก ๋์ ์ ํตํด ๋คํธ์ํฌ๋ก ์ ์ก๋๊ณ , ๋ชฉ์ ์ง IP์ ๋๋ฌํ๋ค.
- ๊ตฌ๊ธ server์ ๋์ฐฉํ ํจํท์ unpacking์ ํตํด message๋ฅผ ๋ณต์ํ๊ณ server์ process๋ก ๋ณด๋ธ๋ค.
- server์ process๋ HTTP ์์ฒญ ๋ฉ์์ง์ ๋ํ response data๋ฅผ ๊ฐ์ง๊ณ HTTP ์๋ต ๋ฉ์์ง (response message)๋ฅผ ์์ฑํ๋ค.
- HTTP ์๋ต ๋ฉ์์ง๋ฅผ ์ ๋ฌ ๋ฐ์ ๋ฐฉ์ ๊ทธ๋๋ก client IP๋ก ์ ์ก์ ํ๋ค.
- HTTP response ๋ฉ์์ง์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ํ ๋๋ก ์น๋ธ๋ผ์ฐ์ ์์ HTML ๋ ๋๋ง์ ํ์ฌ ๋ชจ๋ํฐ์ ๊ฒ์์ฐฝ์ด ๋ณด์ฌ์ง๋ค.
'๐ป Computer Science > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SSL(Secure Sockets Layer)์ด๋? (0) | 2023.08.08 |
---|---|
VPN(Virtual Private Network) ์ด๋? (0) | 2023.08.08 |
NAC(Network Access Control)์ Firewall(๋ฐฉํ๋ฒฝ) ์ฐจ์ด์ (0) | 2023.08.07 |
NAC(๋คํธ์ํฌ ์ ๊ทผ ์ ์ด Network Access Control) ์ด๋? (0) | 2023.08.07 |
OSI 7๊ณ์ธต๊ณผ TCP/IP 4๊ณ์ธต ์ด๋? (0) | 2023.06.03 |