HTTP

๋ฑ…๊ธฐ๋ฑ…๊ทœยท2022๋…„ 4์›” 7์ผ
0

๐Ÿš€ ํ•™์Šต ๋ชฉํ‘œ

  1. HTTP์˜ ํŠน์ง•์ธ Stateless๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. Request, Response ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. HTTP request method์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๊ณ  ์„œ๋กœ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ๋Œ€ํ‘œ์ ์ธ Status code์˜ ์ข…๋ฅ˜๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

HTTP?

HTTP๋ž€ HyperText Transfer Protocol์˜ ์•ฝ์ž๋กœ ์ปดํ“จํ„ฐ ๊ฐ„์˜ HTMLํŒŒ์ผ์„ ์„œ๋กœ๊ฐ„์˜ ์†Œํ†ต์˜ ์˜คํ•ด ์—†์ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์†Œํ†ต ๊ทœ์•ฝ์ž…๋‹ˆ๋‹ค.

  • HyperText: ๋ฌธ์„œ์™€ ๋ฌธ์„œ๊ฐ€ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ
  • Transfer: HTMLํ˜•์‹์˜ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ
  • Protocol: ์†Œํ†ต๋ฐฉ์‹๊ณผ ๊ทธ์— ๋Œ€ํ•œ ์•ฝ์†

Stateless

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

Request & Response์˜ ๊ตฌ์กฐ

HTTP request๋Š” ์‚ฌ์‹ค ํ”„๋ก ํŠธ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ) ์—์„œ ๋ฐฑ์—”๋“œ(์„œ๋ฒ„)์— ์ผ(๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ)์„ ์‹œ์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๋‚ด๋Š” ๋ฉ”์„ธ์ง€ ์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„ธ์ง€์˜ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Start Line: ์š”์ฒญ์˜ ์ฒซ๋ฒˆ์งธ ์ค„์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ž‘ ์ค„๋„ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
    • HTTP Method: ํ•ด๋‹น ์š”์ฒญ์ด ์˜๋„ํ•œ ์•ก์…˜์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„. ์ฃผ๋กœ GET, POST, DELETE๊ฐ€ ๋งŽ์ด ์“ฐ์ž„
    • Request target: ํ•ด๋‹น request๊ฐ€ ์ „์†ก๋˜๋Š” ๋ชฉํ‘œ url
    • HTTP Version: ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋˜๋Š” HTTP ๋ฒ„์ „์„ ๋œปํ•œ๋‹ค. ์ฃผ๋กœ 1.1 ๋ฒ„์ „์ด ๋„๋ฆฌ ์“ฐ์ž„
    GET /login HTTP/1.1
    # ํ•ด์„: GET ๋ฉ”์†Œ๋“œ๋กœ login ์ด๋ผ๋Š” ์š”์ฒญ ํƒ€๊ฒŸ์— HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ๋‹ค!


  2. Headers: ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด(๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

    • Key: Value ๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค (JavaScript์˜ ๊ฐ์ฒด, Python์˜ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค)
    • Host: ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ชฉํ‘œ(ํƒ€๊ฒŸ)์˜ ์ฃผ์†Œ. ์ฆ‰, ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์›น์‚ฌ์ดํŠธ์˜ ๊ธฐ๋ณธ ์ฃผ์†Œ๊ฐ€ ๋œ๋‹ค. (ex. www.apple.co.kr)
    • User-Agent: ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋Œ€ํ•œ ์ •๋ณด (ex. chrome, firefox, safari, ~~explorer~~)
    • Content-Type: ํ•ด๋‹น ์š”์ฒญ์ด ๋ณด๋‚ด๋Š” ๋ฉ”์„ธ์ง€ body์˜ ํƒ€์ž… (ex. application/json)
    • Content-Length: body ๋‚ด์šฉ์˜ ๊ธธ์ด
    • Authorization: ํšŒ์›์˜ ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ํ† ํฐ์„ Authroization ์— ๋‹ด๋Š”๋‹ค
    Headers: {
    	Host:  
        User-Agent: 
        Content-Type: 
        Content-Length: 
        Authorization:
    }


  3. Body: ํ•ด๋‹น ์š”์ฒญ์˜ ์‹ค์ œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ Body๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” POST ์ž…๋‹ˆ๋‹ค.

    ex) ๋กœ๊ทธ์ธ ์‹œ์— ์„œ๋ฒ„์— ๋ณด๋‚ผ ์š”์ฒญ์˜ ๋‚ด์šฉ
    Body: {
    "user_email":"wecode@gmail.com" "user_password": "wecode"
    }

Response์˜ ๊ตฌ์กฐ๋Š” Request์˜ ๊ตฌ์กฐ์™€ Start Line์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  1. Response์˜ Start Line: ์‘๋‹ต์˜ ์ƒํƒœ์ค„์ž…๋‹ˆ๋‹ค.
    • ์‘๋‹ต์€ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋ฉด์„œ ๋‚ด์šฉ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜, ํŽธ์ง€์˜ ์‘๋‹ต์— "์‘. ์ž˜ ์ง€๋ƒˆ์–ด" ๋ผ๊ณ  ์•ˆ๋ถ€ ์ธ์‚ฌ๋ฅผ ๊ฑด๋„ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‘๋‹ต์˜ Status Line ๋„ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • HTTP Version: ์š”์ฒญ์˜ HTTP๋ฒ„์ „๊ณผ ๋™์ผ
    • Status Code: ์‘๋‹ต ๋ฉ”์„ธ์ง€์˜ ์ƒํƒœ ์ฝ”๋“œ
    • Status Text: ์‘๋‹ต ๋ฉ”์„ธ์ง€์˜ ์ƒํƒœ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๋Š” ํ…์ŠคํŠธ
    HTTP/1.1 404 Not Found
    # ํ•ด์„: HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด๋‚ธ ์š”์ฒญ(ex. ๋กœ๊ทธ์ธ ์‹œ๋„)์— ๋Œ€ํ•ด์„œ
    # ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—(Not Found) 404 ์ƒํƒœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.
    
    HTTP/1.1 200 SUCCESS
    # ํ•ด์„: HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ์„ฑ๊ณตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—
    # 200 ์ƒํƒœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

HTTP Request Method

HTTP Request Method๋Š” ์š”์ฒญ์ด ์˜๋„ํ•œ ์•ก์…˜์„ ์ •์˜ํ•œ๋‹ค๊ณ  ์–˜๊ธฐํ–ˆ๊ณ , ์ข…๋ฅ˜์—๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GET
    • ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ฌ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๋งŒ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค
    • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” HTTP ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.
    • ex) ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ์ œํ’ˆ์„ ์กฐํšŒํ•œ๋‹ค
  2. POST
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ/์ˆ˜์ • ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ • ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ธฐ์— ๋Œ€๋ถ€๋ถ„ ์š”์ฒญ์— body๊ฐ€ ํฌํ•จ๋˜์„œ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค
    • ex) ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ œํ’ˆ์„ ์ถ”๊ฐ€๋กœ ๋‹ด๋Š”๋‹ค
  3. DELETE
    • ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์ฒ˜๋Ÿผ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ์‚ญ์ œ ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    • ex) ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์ œํ’ˆ์„ ์‚ญ์ œํ•œ๋‹ค

๋Œ€ํ‘œ์ ์ธ Status Code

ํด๋ผ์ด์–ธํŠธ์—๋Ÿฌ์„ฑ๊ณต์„œ๋ฒ„์—๋Ÿฌ
400: Bad Request(์š”์ฒญ์ด ์ž˜๋ชป๋จ)200: OK(์ œ๋Œ€๋กœ ์ ‘๊ทผํ–ˆ์„๋•Œ, ์ฃผ๋กœ GET๋ฉ”์†Œ๋“œ)500: Internal Server Error(ํ•ด๋‹น์„œ๋ฒ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚œ ๊ฒฝ์šฐ)
401: UnAuthorized(์ธ์ฆ์ด ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ)201: Created(์ž˜ ์ƒ์„ฑ์ด ๋˜์—ˆ์„๋•Œ, ์ฃผ๋กœ POST๋ฉ”์†Œ๋“œ)
403: Forbidden(๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ)204: No Content(์š”์ฒญ์— ์„ฑ๊ณตํ•ด ์‘๋‹ต ๋ฉ”์‹œ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ฃผ๋กœ DELETE๋ฉ”์†Œ๋“œ)
404: Not Found(์š”์ฒญํ•œ URI๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ)

Finale

์‚ฌ์‹ค ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ๋„ ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅด๊ณ  ๋ฌธํ™”๋‹ค๋ฅด๋ฉด ์†Œํ†ต๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๋ฒ•์ด๋‹ค. ์ปดํ“จํ„ฐ๋ผ๊ณ  ๋‹ค ํ†ต์ผ๋œ ํšŒ์‚ฌ์—์„œ ๋‚˜์˜ค์ง€๋„ ์•Š๊ณ  OS๋“ฑ๋„ ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐ๋„ท์€ ๋‹ค ์—ฐ๊ฒฐ๋˜์—ˆ๊ธฐ๋•Œ๋ฌธ์—, ํ˜ผ๋ž€์Šค๋Ÿฝ์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ทœ์•ฝ์ด ํ•„์š”ํ•˜๋‹ค๋Š”๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ๋„ ๊ฐœ๋ฐœ์ž๋กœ์จ HTTP์— ๋Œ€ํ•œ ์ง€์‹์ด ์ˆ™์ง€๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด, ๊ณค๋ž€ํ• ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

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