HTTP

์ด์ˆ˜ํ˜„ยท2022๋…„ 5์›” 31์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
19/23

๐Ÿ“šHTTP

HTTP๋ž€?

HTTP๋ž€ Hyper Text Transfer Protocol์˜ ๋‘๋ฌธ์ž์–ด๋กœ, ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • ํ”„๋กœํ† ์ฝœ์€ ๊ทœ์•ฝ ๋˜๋Š” ๊ทœ์น™์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ปดํ“จํ„ฐ๋“ค๋ผ๋ฆฌ HTML ํŒŒ์ผ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ†ต๋ฐฉ์‹ ๋˜๋Š” ์•ฝ์†

HTTP ๋ฉ”์‹œ์ง€์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

HTTP ๋ฉ”์‹œ์ง€์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ชฉ๋ก๋“ค์„ ๋ชจ๋‘ ๋‹ด์•„์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • HTML, TEXT
  • ์‚ฌ์ง„, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ
  • JSON, XML(API)
    => ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

HTTP/1.1, HTML/2, HTML/3?

  • HTTP/1.1๊ณผ HTTP/2๋Š” TCP ๊ธฐ๋ฐ˜์ด๊ณ , HTTP/3๋Š” UDP์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค.
  • UDP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” HTTP/3๋Š” ๋น ๋ฅธ ์†๋„๋ผ๋Š” ์žฅ์  ๋•Œ๋ฌธ์— ์ ์  ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ๋ž€ ๊ฒฐ๊ตญ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๊ตฌ์กฐ๋ฅผ ๋œปํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ๋Œ€๊ธฐํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

Stateful, Stateless

stateful, stateless์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž.

stateful

  • ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ํ†ต์‹  ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ฐ”๋€Œ๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋ฐ”๋€๋‹ค๋ฉด ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ฐ”๋€” ๋•Œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ์„œ๋ฒ„์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„๊ฐ€ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

stateless

  • ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ฐ”๋€Œ์–ด๋„ ๋œ๋‹ค.
  • ๊ฐ‘์ž๊ธฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธ‰์ฆํ•ด๋„ ์„œ๋ฒ„๋ฅผ ๋Œ€๊ฑฐ ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์ „๋‹ฌ.
    => stateless๋Š” ์‘๋‹ต ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. => ๋ฌดํ•œํ•œ ์„œ๋ฒ„ ์ฆ์„ค ๊ฐ€๋Šฅ
  • stateful์€ ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ค‘๊ฐ„์— ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์น˜๋ช…์ ์ด๋‹ค.
  • stateless๋Š” ์•„๋ฌด ์„œ๋ฒ„๋‚˜ ํ˜ธ์ถœํ•ด๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ํ†ต์‹ ํ•˜๋˜ ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋‹ค์‹œ ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • stateless๋Š” scale out์— ์œ ๋ฆฌํ•˜๋‹ค.

Stateless ์‹ค๋ฌด ํ•œ๊ณ„

๋ชจ๋“  ๊ฒƒ์„ statelessํ•˜๊ฒŒ ์„ค๊ณ„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

  • stateless : ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†๋Š” ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์†Œ๊ฐœ ํŽ˜์ด์ง€
  • stateful : ๋กœ๊ทธ์ธ

๋น„ ์—ฐ๊ฒฐ์„ฑ(Connectionless)

๋น„ ์—ฐ๊ฒฐ์„ฑ์ด๋ž€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•˜๊ณ ๋‚˜์„œ๋„ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๋ฉด ์„œ๋ฒ„ ์ž์›์ด ์†Œ๋ชจ๋˜๋ฏ€๋กœ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฐœ๋…์ด ๋น„ ์—ฐ๊ฒฐ์„ฑ์ด๋‹ค. ๋น„ ์—ฐ๊ฒฐ์„ฑ์€ ์œ„์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต์„ ํ•˜๊ณ  ๋” ์ด์ƒ ์š”์ฒญ์ด ์—†๋‹ค๋ฉด ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • HTTP๋Š” ๊ธฐ๋ณธ์ด ๋น„ ์—ฐ๊ฒฐ์„ฑ ๋ชจ๋ธ์ด๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„ ์—ฐ๊ฒฐ์„ฑ ๋ชจ๋ธ์€ ์ดˆ ๋‹จ์œ„ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ตํ•œ๋‹ค.
  • ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

HTTP ๋ฉ”์‹œ์ง€

HTTP ๋ฉ”์‹œ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋‹ค.

Request ๋ฉ”์‹œ์ง€

  • Start line : ์š”์ฒญ์˜ ์ฒซ๋ฒˆ์งธ ์ค„์— ํ•ด๋‹นํ•œ๋‹ค. ์ด ์‹œ์ž‘ ์ค„๋„ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
  • Headers : ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด(๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.
  • Body : ํ•ด๋‹น ์š”์ฒญ์˜ ์‹ค์ œ ๋‚ด์šฉ. ์ฃผ๋กœ Body๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” POST๋‹ค.

Response ๋ฉ”์‹œ์ง€

  • Status line : ์‘๋‹ต์˜ ์ƒํƒœ ์ค„์ด๋‹ค. ์‘๋‹ต์€ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋ฉด์„œ ๋‚ด์šฉ์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • Headers : ์š”์ฒญ์˜ ํ—ค๋”์™€ ๋™์ผํ•˜๋‹ค. ์‘๋‹ต์˜ ์ถ”๊ฐ€ ์ •๋ณด(๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๋‹ค๋งŒ, ์‘๋‹ต์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”์˜ ์ •๋ณด๋“ค์ด ์žˆ๋‹ค.
  • Body : ์š”์ฒญ์˜ Body์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•˜๋‹ค. ์š”์ฒญ์˜ ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ผ Body๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋“ฏ์ด. ์‘๋‹ต๋„ ์‘๋‹ต์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—” Body๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Body ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ JSON(JavaScript Object Notation) ์ด๋‹ค.

HTTP ๋ฉ”์„œ๋“œ

GET : ๋ฆฌ์†Œ์Šค ์กฐํšŒ

  • ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” query(์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง)๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ด ๋งŽ์•„์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
GET /members/100 HTTP/1.1
Host:localhost:8080
โฌ‡๏ธ
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34

{
	"username":"lee",
    "age":28
}

POST : ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ๋“ฑ๋ก์— ์‚ฌ์šฉ

  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ(๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ => ์ด ๊ฒฝ์šฐ๋Š” ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ.)
    - ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ฃผ๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋กœ ์‹ ๊ทœ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ
POST /members HTTP/1.1
Content-Type: application/json

{
	"username":"lee",
    "age":28
}
โฌ‡๏ธ
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/100

{
	"username":"lee",
    "age":28
}

DELETE : ๋ฆฌ์†Œ์Šค ์‚ญ์ œ

DELETE /members/100 HTTP/1.1
Host:localhost:8080

PUT : ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒด, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ

  • ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ๋ฎ์–ด๋ฒ„๋ฆผ.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„(=> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ์•Œ๊ณ  URI ์ง€์ •-POST์™€์˜ ์ฐจ์ด์ )
PUT /members/100 HTTP/1.1
Content-Type: application/json

{
	"username":"lee",
    "age":28
}

PATCH : ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ

PATCH /members/100 HTTP/1.1
Content-Type: application/json

{
    "age":10
}

HTTP ์ƒํƒœ

200: OK

  • ๊ฐ€์žฅ ์ž์ฃผ ๋ณด๊ฒŒ๋˜๋Š” Status Code
  • ๋ฌธ์ œ์—†์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์ด๋ฃจ์–ด์ง€๊ณ  ๋‚˜์„œ ์˜ค๋Š” ์‘๋‹ต์ฝ”๋“œ
  • ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ 200 OK ๋ฅผ ์›ํ•œ๋‹ค

201: Created

  • ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ž˜ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ์—(Successfully Created) ์˜ค๋Š” Status Code
  • ๋Œ€๊ฒŒ POST ๋ฉ”์†Œ๋“œ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์ƒ์„ฑ ๋˜๋Š” ์ˆ˜์ • ๋˜์—ˆ์„ ๋•Œ์— ๋ณด๋‚ด๋Š” ์ฝ”๋“œ

400: Bad Request

  • ํ•ด๋‹น ์š”์ฒญ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ๋ณด๋‚ด๋Š” Status Code
  • ์ฃผ๋กœ ์š”์ฒญ์˜ Body์— ๋ณด๋‚ด๋Š” ๋‚ด์šฉ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ
    ex) ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”๋ฐ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๊ฐ€ ๋Œ€์‹  Body์— ๋‹ด๊ฒผ์„ ๊ฒฝ์šฐ

401: Unauthorized

  • ์œ ์ €๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € ๋กœ๊ทธ์ธ์„ ํ•˜๊ฑฐ๋‚˜ ํšŒ์›๊ฐ€์ž…์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ
    ex) wish list, ์ข‹์•„์š” ๊ธฐ๋Šฅ์€ ํšŒ์›์ด ์•„๋‹ˆ๋ฉด ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์—†์Œ

403: Forbidden

  • ์œ ์ €๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ๋œป
  • ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ •๋ณด์— ์ ‘๊ทผํ–ˆ์„ ๊ฒฝ์šฐ
    ex) ์˜ค์ง ์œ ๋ฃŒํšŒ์›๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ํ–ˆ์„ ๋•Œ

404: Not Found

  • ์š”์ฒญ๋œ URI ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ

500: Internal Server Error

  • ์„œ๋ฒ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ์˜ Status Code
  • API ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‹ซ์–ดํ•˜๋Š” ์ฝ”๋“œ (ํ”„๋ก ํŠธ๋Š” ๋‚ด ์ž˜๋ชป ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ)

์ฐธ๊ณ ์ž๋ฃŒ

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹-๊น€์˜ํ•œ
hanamon

0๊ฐœ์˜ ๋Œ“๊ธ€