๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Computer Science/๋„คํŠธ์›Œํฌ

HTTP(HyperText Transfer Protocol) ๋ž€? (GET & POST ๋ž€?)

by Jay Din 2023. 6. 15.
728x90
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

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 message ์˜ˆ์‹œ

 

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์š”์ฒญ์„ ํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด ๋‘”๋‹ค.

์ดํ›„ ๋™์ผํ•œ ์š”์ฒญ์€ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ๊ฐ’์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.  

query string

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๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ ๋“ฑ์„ ์ ˆ์ฐจ์— ๋งž๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด ๋œ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— URL ์ž…๋ ฅ
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” DNS๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. client์—์„œ HTTP request ๋ฉ”์‹œ์ง€ ⇒ TCP/IP ํŒจํ‚ท ์ƒ์„ฑ ⇒ server๋กœ ์ „์†ก
  4. server์—์„œ HTTP requset์— ๋Œ€ํ•œ HTTP response ๋ฉ”์‹œ์ง€ ⇒ TCP/IP ํŒจํ‚ท ์ƒ์„ฑ ⇒ client๋กœ ์ „์†ก
  5. ๋„์ฐฉํ•œ HTTP response message๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์ถœ๋ ฅ(๋ Œ๋”๋ง)
* DNS(Domain Name System ๋„๋ฉ”์ธ ์ด๋ฆ„ ์‹œ์Šคํ…œ) ๋ž€?
์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„(์˜ˆ: www.jay-din.tistory.com)์„ ๋จธ์‹ ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ(์˜ˆ: 192.4.3.66)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
์ฆ‰, ๋„๋ฉ”์ธ ์ด๋ฆ„ -> IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜

 

์›น ๋™์ž‘ ๋ฐฉ์‹

  1. ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ www.google.com(URL)์„ ์ž…๋ ฅ ํ•˜๋ฉด HTTP request message๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. IP์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ์ „์†ก์„ ํ• ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, DNS lookup์„ ํ†ตํ•ด ํ•ด๋‹น domain์˜ server IP์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.
  3. ๋ฐ˜ํ™˜๋œ IP์ฃผ์†Œ(๊ตฌ๊ธ€์˜ server IP)๋กœ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€(request message) ์ „์†ก ์š”์ฒญ์„ ํ•œ๋‹ค.
    • ์ƒ์„ฑ๋œ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ TCP/IP์ธต์— ์ „๋‹ฌํ•œ๋‹ค.
    • HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ TCP/IP ํŒจํ‚ท์„ ์ƒ์„ฑํ•œ๋‹ค.
  4. ํ•ด๋‹น ํŒจํ‚ท์€ ์ „๊ธฐ์‹ ํ˜ธ๋กœ ๋žœ์„ ์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋˜๊ณ , ๋ชฉ์ ์ง€ IP์— ๋„๋‹ฌํ•œ๋‹ค.
  5. ๊ตฌ๊ธ€ server์— ๋„์ฐฉํ•œ ํŒจํ‚ท์€ unpacking์„ ํ†ตํ•ด message๋ฅผ ๋ณต์›ํ•˜๊ณ  server์˜ process๋กœ ๋ณด๋‚ธ๋‹ค.
  6. server์˜ process๋Š” HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ response data๋ฅผ ๊ฐ€์ง€๊ณ  HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ (response message)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  7. HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ client IP๋กœ ์ „์†ก์„ ํ•œ๋‹ค.
  8. HTTP response ๋ฉ”์‹œ์ง€์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ํ† ๋Œ€๋กœ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ HTML ๋ Œ๋”๋ง์„ ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ์— ๊ฒ€์ƒ‰์ฐฝ์ด ๋ณด์—ฌ์ง„๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•