Part.2 HTTP

claireยท2022๋…„ 4์›” 19์ผ
0

WEB

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

๐Ÿ“Œ ์ด ๊ธ€์„ ์™œ ์“ฐ๋Š”๊ฐ€
์‚ฌ์‹ค ์ด ๊ธ€์„ ์“ฐ๊ธฐ ์œ„ํ•ด ์›น ์„œ๋ฒ„๋ž€ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ํ‰์†Œ ๋„คํŠธ์›Œํฌ์— ๊ด€์‹ฌ์ด ๋งŽ์•„ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ๋˜ ๋ฐฑ์—”๋“œ API get, post๋“ฑ์˜ ์›๋ฆฌ๊ฐ€ ์ •ํ™•ํžˆ ์ดํ•ด๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋งˆ์นจ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๊ฐ€ ๋ˆˆ์— ๋„์—ˆ๊ณ  ์ง€๊ธˆ ์ด๊ฑธ ๊ณต๋ถ€ํ•ด๋„ ๋˜๋‚˜? ์‹ถ์€ ํƒ€์ด๋ฐ์ด์—ˆ์ง€๋งŒ ๊ถ๊ธˆํ•  ๋•Œ ํ•ด๋‘ฌ์•ผ ์–ธ์  ๊ฐ€ ์“ฐ๋ฆฌ ํ•˜๋ฉฐ ์ฟจ๊ฒฐ์ œ ํ›„ ๋ฐ”๋กœ 5h30m ์‹œ์ฒญ์„ ํ–ˆ๋‹ค. ์‚ฌ์‹ค ๋งˆ์ง€๋ง‰ API ์„ค๊ณ„, ์ƒํƒœ ์ฝ”๋“œ, ํ—ค๋” ๋“ฑ์€ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ด์•ผ๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ญ, http๋ฅผ ์ •ํ™•ํžˆ ์•ˆ ๊ฒƒ๋งŒ์œผ๋กœ ์ฒซ ๊ณต๋ถ€๋Š” ์„ฑ๊ณต์ด๋‹ค! ๊ณ ๋กœ ๊ทธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋ณด๋ ค ํ•œ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์‚ฌ ๊ณต๋ถ€ ๋‹ค์‹œ ํ•ด์•ผํ•˜๋Š”..

๐Ÿ”ฅ ๊ฐ•์˜ ์ •๋ณด: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

1. ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ

  • ์ธํ„ฐ๋„ท์ƒ์—์„œ ์–ด๋–ค์‹์œผ๋กœ ํ†ต์‹ ์ด ์ผ์–ด๋‚˜๋Š”๊ฐ€
  • ์–ด๋–ค ๊ทœ์น™์œผ๋กœ ๋ชฉ์ ์ง€๊นŒ์ง€ ์•ˆ์ „ํ•˜๊ฒŒ ๋„์ฐฉํ• ๊นŒ?
  • IP, TCP, UDP, PORT, DNS ๋“ฑ ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณผํ…Œ๋‹ค

1-1. IP

  • ip(์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ): ์ตœ์†Œํ•œ์˜ ๊ทœ์น™

    • ์ง€์ •ํ•œ ip์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ(ํŒจํ‚ท)
    • ์™”๋‹ค๊ฐ”๋‹ค ๋ฃจํŠธ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•œ๊ณ„: ๋น„์—ฐ๊ฒฐ์„ฑ(๋Œ€์ƒ์ด ์„œ๋น„์Šค ๋ถˆ๋Šฅ์ธ๋ฐ ํŒจํ‚ท ์ „์†ก), ๋น„์‹ ๋ขฐ์„ฑ(์ค‘๊ฐ„ ์„œ๋ฒ„๊ฐ€ ๋ฌธ์ œ ์ƒ๊ฒจ์„œ ํŒจํ‚ท ์†Œ์‹ค), ํ”„๋กœ๊ทธ๋žจ ๊ตฌ๋ถ„ X(ํŒจํ‚ท ์ „๋‹ฌ ์ˆœ์„œ ๋ฌธ์ œ ๋ฐœ์ƒ)
    • ์ด๊ฑธ ํ•ด๊ฒฐํ•ด ์ฃผ๋Š”๊ฒŒ TCP
  • ip ์œ„์— tcp๋ฅผ ์–น์–ด์„œ ๋ณด์™„ํ•ด์ค€๋‹ค.

  • ํ”„๋กœํ† ์ฝœ ๊ณ„์ธต: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, os, ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค

1-2. TCP

  • TCP segment: ์ถœ๋ฐœ์ง€ port, ๋ชฉ์ ์ง€ port, ์ „์†ก ์ œ์–ด, ์ˆœ์„œ, ๊ฒ€์ฆ ์ •๋ณด ๋“ฑ์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • TCP(์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ)ํŠน์ง•: ์—ฐ๊ฒฐ์ง€ํ–ฅ(์—ฐ๊ฒฐ ํ™•์ธ), ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ(์ค‘๊ฐ„์— ๋ˆ„๋ฝ๋˜๋ฉด ๋‚ด๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋‹ค), ์ˆœ์„œ ๋ณด์žฅ, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ, ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„ tcp ์‚ฌ์šฉ
    • ์—ฐ๊ฒฐ์ง€ํ–ฅ: TCP 3 way handshake(๊ฐ€์ƒ์—ฐ๊ฒฐ์ž„)
      SYN(์ ‘์†์š”์ฒญ) -> SYN(์—ฐ๊ฒฐ ์™”์–ด? ์˜ค์ผ€ ๋‚˜๋„ ์—ฐ๊ฒฐ ๊ฐˆ๊ฒŒ ์‘๋‹ต) -> ACK(์š”์ฒญ์ˆ˜๋ฝ) -> ACK(์‘ ๋‚˜๋„ ์š”์ฒญ์ˆ˜๋ฝ) -> ๋ฐ์ดํ„ฐ ์ „์†ก
    • ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ: ๋ฐ์ดํ„ฐ ์ „์†ก -> ๋ฐ์ดํ„ฐ ์ž˜ ๋ฐ›์•˜์Œ ์ด๋ผ๊ณ  ๋ณด๋‚ด์คŒ(์‘๋‹ต ์ž˜ํ•ด์ค€๋‹ค)
    • ์ˆœ์„œ๋ณด์žฅ: ์ˆœ์„œ ์ž˜๋ชป ๊ฐ€๋ฉด ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ์„œ๋ฒ„๊ฐ€ "์•ผ ํŒจํ‚ท2๋ถ€ํ„ฐ ๋‹ค์‹œ๋ณด๋‚ด"ํ•˜๊ณ  ์•Œ๋ ค์คŒ

1-3. UDP

  • UDP(์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ) ํŠน์ง•: ํ•˜์–€ ๋„ํ™”์ง€์— ๋น„์œ (๊ธฐ๋Šฅ์ด ๊ฑฐ์˜ ์—†์Œ) ํ•˜์ง€๋งŒ, +port(ํ•˜๋‚˜์˜ ip์—์„œ ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ณด๋‚ด์•ผํ•˜๋Š”์ง€ ์•„๋Š” ๊ฒƒ) + ์ฒดํฌ์„ฌ(๋ฉ”์„ธ์ง€ ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ) ์ •๋„๋งŒ ์ถ”๊ฐ€ so ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ถ”๊ฐ€ ์ž‘์—… ํ•„์š”
  • tcp 3 way handshake ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋‹ค ๋„ฃ๊ณ  ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์–‘๋„ ํฌ๊ณ  ์ „์†ก์†๋„๋„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ฆ‰ tcp๋Š” ์ด๋ฏธ ์†์„ ๋ชป๋Œ„๋‹ค. ๊ทธ๋ž˜์„œ ๋” ์ตœ์ ํ™” ํ•˜๋ ค๊ณ  udp์— ์†์„ ๋Œ€๋Š” ๊ฒƒ
  • http3 ์ŠคํŽ™์ด udpํ”„๋กœํ† ์ฝœ ์“ฐ๋ฉด์„œ ๊ต‰์žฅํžˆ ๋œจ๊ณ  ์žˆ์Œ

1-4. PORT

  • ํด๋ผ์ด์–ธํŠธ pc๊ฐ€ ํ•œ๋ฒˆ์— ๋‘ ๊ฐœ ์ด์ƒ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋ฉด?
  • port: ip๋Š” ๋ชฉ์ ์ง€ ์„œ๋ฒ„๋ฅผ ์ฐพ๋Š” ๊ฒƒ, port๋Š” ์„œ๋ฒ„ ์•ˆ์—์„œ ๋Œ์•„๊ฐ€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฐพ๋Š” ๊ฒƒ ์ฆ‰ ๊ฐ™์€ ip ๋‚ด์—์„œ ํ”„๋กœ์„ธ์Šค ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ( ip๋Š” ์•„ํŒŒํŠธ port๋Š” ๋ช‡๋™ ๋ช‡ํ˜ธ)
  • port: 0 ~ 65535 ํ• ๋‹น ๊ฐ€๋Šฅ/ 0 ~ 1023 ์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ/ FTP 20,21/ TELNET 23/ HTTP 80/ HTTPS 443

1-5. DNS

  • ip๋Š” ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ๋  ์ˆ˜๋„ ์žˆ์Œ.
  • DNS(๋„๋ฉ”์ธ ๋„ค์ž„ ์‹œ์Šคํ…œ): ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๊ฐ™์€ ์„œ๋ฒ„๋ฅผ ์ œ๊ณต, ๋„๋ฉ”์ธ ๋ช…์„ ip์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด ์คŒ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ DNS์„œ๋ฒ„์— ๋„๋ฉ”์ธ ๋ช… ๋“ฑ๋ก -> ip์ฃผ์†Œ๋กœ ์‘๋‹ต -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ ‘์†

1-6. URI

  • URI(uniform Resource Identifier): resource๋ฅผ ์‹๋ณ„ํ•˜๋Š” ํ†ตํ•ฉ๋œ ๋ฐฉ๋ฒ•

  • URI: URL/ URN: URI๋Š” ๋กœ์ผ€์ดํ„ฐ(locator)(๊น€์„œํ˜„์ด ์—ฌ๊ธฐ์— ์žˆ์–ด์š”)(๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ง€์ •), ์ด๋ฆ„(name)(๊น€์„œํ˜„)(๋ฆฌ์†Œ์Šค์— ์ด๋ฆ„์„ ๋ถ€์—ฌ). (doc์ฐธ๊ณ )

  • URL: scheme(ํ”„๋กœํ† ์ฝœ ์ •๋ณด) - authority(ํ˜ธ์ŠคํŠธ๋ช…) - path(ํฌํŠธ๋ฒˆํ˜ธ, ๊ฒฝ๋กœ) - query(์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ) - fragmnet
    : scheme://[userinfo@]host[:port][/path][?query][#fragment]

    • ์Šคํ‚ค๋งˆ: ์ฃผ๋กœ ํฌ๋กœํ† ์ฝœ ์‚ฌ์šฉ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€ ํ•˜๋Š” ์•ฝ์† ๊ทœ์น™/ http๋Š” 80ํฌํŠธ, https๋Š” 443ํฌํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ, ํฌํŠธ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ
    • ํ˜ธ์ŠคํŠธ๋ช…: ๋„๋ฉ”์ธ๋ช… ๋˜๋Š” ip๋ช… ์ง์ ‘ ์ž…๋ ฅ
    • ํฌํŠธ: ์ ‘์† ํฌํŠธ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๋žต
    • path: ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ, ๊ณ„์ธต์  ๊ตฌ์กฐ
    • query: key=value ํ˜•ํƒœ/ ?๋กœ ์‹œ์ž‘, &๋กœ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ/ query parameter, query string ๋“ฑ์œผ๋กœ ๋ถˆ๋ฆผ, ์›น์„œ๋ฒ„์— ์ œ๊ณตํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฌธ์ž ํ˜•ํƒœ(์ˆซ์ž๋ฅผ ์ ์–ด๋„ ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ„๋‹ค)
    • fragment: ์ž˜ ์‚ฌ์šฉํ•˜์ง„ ์•Š๋Š”๋ฐ html ๋‚ด๋ถ€ ๋ถ๋งˆํฌ ๋“ฑ์— ์‚ฌ์šฉ, ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ์ •๋ณด ์•„๋‹˜
  • URN:scheme - path

  • ์œ„์น˜๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฆ„์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. urn ์ด๋ฆ„๋งŒ์œผ๋กœ ์‹ค์ œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ณดํŽธํ™” ๋˜์ง€ ์•Š์Œ. ๊ทธ๋Ÿฌ๋‹ˆ ์•ž์œผ๋กœ uri๋ฅผ url๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์ด์•ผ๊ธฐํ•˜๊ฒ ์Œ

1-7 ์›น ๋ธŒ๋ผ์šฐ์ € ์š”์ฒญ ํ๋ฆ„

  1. ์›น ๋ธŒ๋ผ์šฐ์ € ์š”์ฒญ ํ๋ฆ„: ์›น ๋ธŒ๋ผ์šฐ์ € ์˜คํ”ˆ -> DNS ์กฐํšŒ -> ip๋‚˜์˜ด -> port ์ •๋ณด ์ฐพ์Œ -> http ์š”์ฒญ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ -> http ๋ฉ”์„ธ์ง€ ์ „์†ก(์›น๋ธŒ๋ผ์šฐ์ € -> socket ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ(tcp/ip ์—ฐ๊ฒฐ-> ๋ฐ์ดํ„ฐ ์ „๋‹ฌ) -> tcp/ip ํŒจํ‚ท ์ƒ์„ฑ, http ๋ฉ”์„ธ์ง€ ํฌํ•จ-> ์ธํ„ฐ๋„ท->์„œ๋ฒ„)

  2. ์š”์ฒญ ํŒจํ‚ท ์ „๋‹ฌ(์ธํ„ฐ๋„ท๋ง์œผ๋กœ ๋˜์ง€๊ณ  ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„๋กœ ๊ฐ) -> ์š”์ฒญ ํŒจํ‚ท ๋„์ฐฉ(tcp/ip ํŒจํ‚ท ๋‹ค ๊นŒ์„œ ๋ฒ„๋ฆฌ๊ณ  http ๋ฉ”์„ธ์ง€๋งŒ ๋„์ง‘์–ด๋‚ด์„œ ํ•ด์„์„ ํ•œ๋‹ค) -> ์„œ๋ฒ„์—์„œ http ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ƒ„(content-type ์ค‘์š”) -> ํŒจํ‚ท ์”Œ์šฐ๊ณ  ๋˜ ์›น๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ต ๋ณด๋ƒ„ -> ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๊ณ  ๊นŒ์„œ ๋ฐ”๋กœ ์›น๋ธŒ๋ผ์šฐ์ € html ๋ Œ๋”๋ง -> ์šฐ๋ฆฌ๊ฐ€ ๋ณธ๋‹ค

2. ๋ชจ๋“ ๊ฒƒ์ด HTTP

  1. http(hypertext transfer protocol): ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ๊ฐ€๋Šฅ, ์„œ๋ฒ„๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋„ ๋Œ€๋ถ€๋ถ„ http ์‚ฌ์šฉ/ 1.1 1997๋…„: ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ, ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฒ„์ „/2 2015๋…„: ์„ฑ๋Šฅ ๊ฐœ์„ / 3 ์ง„ํ–‰์ค‘: tcp ๋Œ€์‹ ์— udp ์‚ฌ์šฉ, ์„ฑ๋Šฅ ๊ฐœ์„ ์— ์ดˆ์ 

  2. ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ: http 1.1 ์ฃผ๋กœ ์‚ฌ์šฉ(์ด ์ŠคํŽ™์„ ์ž˜ ์•Œ๋ฉด ๋Œ), 2์™€ 3๋„ ์ ์  ์ฆ๊ฐ€( f11๋ˆŒ๋Ÿฌ์„œ protocol ๋ณด๋ฉด h2,h3 ๋ณผ ์ˆ˜ ์žˆ์Œ)

  3. ํŠน์ง•: ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ/ ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(์Šคํ…Œ์ด์Šค๋ฆฌ์Šค), ๋น„์—ฐ๊ฒฐ์„ฑ, http ๋ฉ”์‹œ์ง€, ๋‹จ์ˆœํ•จ, ํ™•์žฅ ๊ฐ€๋Šฅ

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

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

  2. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•จ, ๋น„์ง€๋‹ˆ์Šค๋กœ์ง, ๋ฐ์ดํ„ฐ ๊ฐ™์€ ๊ฑด ์„œ๋ฒ„์— ๋‹ค ๋„ฃ๊ณ , ui๋ž‘ ์‚ฌ์šฉ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ์— ์ง‘์ค‘. ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋น„์ง€๋‹ˆ์Šค๊ฐ€ ์ž˜๋˜์„œ ํŠธ๋ž˜ํ”ฝ์ด ํญํŒŒ๋˜๋ฉด ์„œ๋ฒ„์˜ ์•„ํ‚คํ…์ฒ˜, ๋ฐฑ์—”๋“œ ๊ณ ๋„ํ™”๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด ๋Œ. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฑด๋“ค ํ•„์š” ์—†์ด.

2-2. Stateful, Stateless

  1. ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค stateless)
  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š”๋‹ค: stateful๊ณผ stateless์˜ ์ฐจ์ด. ๋ฐฑํ™”์ ์—์„œ ํ•œ ์…€๋Ÿฌํ•œํ…Œ ๋„์›€ ๋ฐ›์œผ๋ฉด context๋ฅผ ๋ณด์ „, ๊ฐ‘์ž๊ธฐ ์…€๋Ÿฌ๊ฐ€ ์ค‘๊ฐ„์— ๋ฐ”๋€Œ๋ฉด context ๋ณด์ „์ด ์•ˆ๋Œ.

์ƒํƒœ์œ ์ง€์—์„œ ์ค‘๊ฐ„์— ์ ์›์ด ๋ฐ”๋€Œ๋ฉด ๊ผฌ์ธ๋‹ค. ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ”๋€ ์ ์›์—๊ฒŒ ๋ฏธ๋ฆฌ ๋‹ค ์•Œ๋ ค์ค˜์•ผํ•˜๋‹ˆ๊นŒ. ๊ทผ๋ฐ ๋ฌด์ƒํƒœ์—์„œ ์ค‘๊ฐ„์— ์ ์›์ด ๋ฐ”๋€Œ์–ด๋„ ๋œ๋‹ค. ๊ฐ‘์ž๊ธฐ ๊ณ ๊ฐ์ด ์ฆ๊ฐ€ํ•ด๋„ ์ ์›์„ ๋Œ€๊ฑฐ ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์ฆ๊ฐ€ํ•ด๋„ ์„œ๋ฒ„๋ฅผ ๋Œ€๊ฑฐ ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ฌด์ƒํƒœ๋Š” ์‘๋‹ต ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค -> ๋ฌดํ•œํ•œ ์„œ๋ฒ„ ์ฆ์„ค ๊ฐ€๋Šฅ

  • stateful(์ƒํƒœ์œ ์ง€): ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์„œ๋ฒ„๊ฐ€ ์ฃฝ์œผ๋ฉด ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์Œ

  • stateless(๋ฌด์ƒํƒœ): ์•„๋ฌด ์„œ๋ฒ„๋‚˜ ํ˜ธ์ถœํ•ด๋„ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋ฒ„1๋ฒˆ์ด ์žฅ์• ๊ฐ€ ๋‚˜๋„ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ค‘๊ณ„์„œ๋ฒ„๊ฐ€ ์„œ๋ฒ„2๋ฒˆ์œผ๋กœ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.

so, ์Šค์ผ€์ผ ์•„์›ƒ(์„œ๋ฒ„๋ฅผ ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ)์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ๋ฆฌํ•จ. ์ด๋ฒคํŠธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์žฅ๋น„๋ฅผ ์ˆ˜๋ฐฑ๋Œ€ ํŒ ๋Š˜๋ ค๋ฒ„๋ฆฌ๋ฉด ๋~

but, ์‹ค๋ฌด ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค

  • ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์ƒํƒœ๋กœ ์„ค๊ณ„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

  • ๋ฌด์ƒํƒœ: ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†๋Š” ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์†Œ๊ฐœ ํ™”๋ฉด/ ์ƒํƒœ์œ ์ง€: ๋กœ๊ทธ์ธ

  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํ–ˆ๋‹ค๋Š” ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์— ์œ ์ง€(๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š” ์ฟ ํ‚ค์™€ ์„œ๋ฒ„์˜ ์„ธ์…˜์„ ์กฐํ•ฉํ•ด์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์“ด๋‹ค. ์„ธ์…˜์„œ๋ฒ„๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฌ๋ฉด ๋กœ๊ทธ์ธ์ด ํ’€๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒํƒœ ์œ ์ง€๋Š” ์ตœ์†Œํ•œ๋งŒ ์‚ฌ์šฉ)

  • stateful ๋ณด๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋ณด๋‚ธ๋‹ค.

2-3. ๋น„ ์—ฐ๊ฒฐ์„ฑ(connectionless)

  1. ๋น„์—ฐ๊ฒฐ์„ฑ(connectionless)
  • ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•˜๋ฉด ์„œ๋ฒ„ ์ž์›์„ ์†Œ๋ชจํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๊ทผ๋ฐ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉด ์ฆ‰ ์š”์ฒญํ•  ๋•Œ๋งŒ ์—ฐ๊ฒฐ์„ ํ•˜๋ฉด ๋œ๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์ตœ์†Œํ•œ์˜ ์ž์›๋งŒ ์œ ์ง€ํ•˜๋ฉด ๋œ๋‹ค.

  • http๋Š” ๊ธฐ๋ณธ์ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ดˆ ๋‹จ์œ„์˜ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ต

  • 1์‹œ๊ฐ„ ๋™์•ˆ ์ˆ˜์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ž‘์Œ

  • ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

    but ๋‹จ์ ์ด ์žˆ๋‹ค.

  • tcp/ip ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•จ : 3 way handshake ์‹œ๊ฐ„ ์ถ”๊ฐ€

  • ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋ฉด html๋ฟ๋งŒ ์•„๋‹ˆ๋ผ js, css,์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๋“ฑ ์ˆ˜ ๋งŽ์€ ์ž์›์ด ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ

  • ์ง€๊ธˆ์€ http ์ง€์† ์—ฐ๊ฒฐ(persistent connections)๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

  • http/2, http/3์—์„œ ์ตœ์ ํ™” ๋จ(์ดˆ๊ธฐ์™€ ์ง€๊ธˆ ๋น„๊ตํ•  ๊ฒƒ)(์—ฐ๊ฒฐ-์š”์ฒญ-์‘๋‹ต ์—ฐ๊ฒฐ-์š”์ฒญ-์‘๋‹ต ์ด๋žฌ๋Š”๋ฐ ์—ฐ๊ฒฐ-์š”์ฒญ-์‘๋‹ต-์š”์ฒญ-์‘๋‹ต-์ข…๋ฃŒ ์ด๋ ‡๊ฒŒ ๋Œ)

  1. ์Šคํ…Œ์ด์Šค๋ฆฌ์Šค๋ฅผ ๊ธฐ์–ตํ•˜์ž(์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์–ด๋ ค์›Œํ•˜๋Š” ์—…๋ฌด)
  • ์ •๋ง ๊ฐ™์€ ์‹œ๊ฐ„์— ๋”ฑ ๋งž์ถ”์–ด ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ: ์ด๋• ์ง„์งœ ์ˆ˜๋งŒ๋ช…์ด ๋™์‹œ์š”์ฒญ์ž„ ์ด๋•Œ๋Š”! ์–ด๋–ป๊ฒŒ๋“  ์Šคํ…Œ์ด์Šค๋ฆฌ์Šคํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•จ! ๋Œ€์‘๋ฐฉ๋ฒ•์ด ๋งŽ์•„์ง! ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์—๋Œ€ํ•ด์„œ๋งŒ ์ƒํƒœ์œ ์ง€ํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•จ

so, ์ฒซ: ์ •์ ํŽ˜์ด์ง€(์ˆœ์ˆ˜ html) - ์ด๋ฒคํŠธ ์ฐธ์—ฌ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ฒŒ

2-4. HTTP ๋ฉ”์‹œ์ง€

  1. http ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ: ์‹œ์ž‘๋ผ์ธ - ํ—ค๋” - ๊ณต๋ฐฑ ๋ผ์ธ - message body (์š”์ฒญ/์‘๋‹ต ๋ฉ”์‹œ์ง€ ๊ธฐ๋ณธ ๊ตฌ์กฐ)

  2. ์‹œ์ž‘๋ผ์ธ(์š”์ฒญ๋ฉ”์‹œ์ง€๋Š” ๋ฆฌํ€˜์ŠคํŠธ ๋ผ์ธ)

  • request-line: method(get,post..) SP(๊ณต๋ฐฑ) request-target SP HTTP-version CRLF(์—”ํ„ฐ)
    -- method: GET ๋ฆฌ์†Œ์Šค ์กฐํšŒ/ POST ์š”์ฒญ ๋‚ด์—ญ ์ฒ˜๋ฆฌ, PUT< DELETE ...
    -- request-target: absolute-path[?query]( ์ ˆ๋Œ€๊ฒฝ๋กœ "/"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ๋กœ)
    -- HTTP ๋ฒ„์ „ ๋„ฃ์Œ
  1. ์‹œ์ž‘๋ผ์ธ(์‘๋‹ต ๋ฉ”์„ธ์ง€๋Š” status-line)
  • status-line: HTTP-version SP status-code SP reason-phrase CRLF(์—”ํ„ฐ)
    -- status-code: ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋ƒ„(200 ์„ฑ๊ณต, 400 ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์˜ค๋ฅ˜, 500 ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜)
    -- ์ด์œ ๋ฌธ๊ตฌ: ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๊ตฌ ์จ์คŒ
  1. ํ—ค๋”

: header-field = field-name":"OWS fidel-value OWS (OWS: ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)(fiedl-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ฌธ ์—†์Œ, value๋Š” ์žˆ์Œ)
: http์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๊ฐ€ ๋‹ค ๋“ค์–ด์žˆ๋‹ค/ ํ‘œ์ค€ ํ—ค๋”๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ/ ํ•„์š”์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

  1. ๋ฉ”์„ธ์ง€ ๋ฐ”๋””: ์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ

  2. http๋Š” ๋‹จ์ˆœํ•จ. ์ŠคํŽ™๋„ ์ฝ์–ด๋ณผ๋งŒ.. ๋ฉ”์„ธ์ง€๋„ ๋งค์šฐ ๋‹จ์ˆœํ•จ. ํฌ๊ฒŒ ์„ฑ๊ณตํ•˜๋Š” ํ‘œ์ค€ ๊ธฐ์ˆ ์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ˆ ์ž„

3. HTTP API๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž

  1. http API: ์ฒซ ๋‹จ๊ณ„, api url ์„ค๊ณ„ (๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค ์‹๋ณ„)
  • ๋ฆฌ์†Œ์Šค์˜ ์˜๋ฏธ๋Š” ๋ญ˜๊นŒ? ํšŒ์›์ด๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ ๋ฐ”๋กœ ๋ฆฌ์†Œ์Šค๋‹ค.
  • ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ? ํšŒ์›์ด๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ์‹๋ณ„ํ•˜๋ฉด ๋œ๋‹ค -> ํšŒ์› ๋ฆฌ์†Œ์Šค๋ฅผ url์— ๋งคํ•‘
  • ๊ณ„์ธต ๊ตฌ์กฐ์ƒ ์ƒ์œ„๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณด๊ณ  ๋ณต์ˆ˜๋‹จ์–ด ์‚ฌ์šฉ ๊ถŒ์žฅ
  • ๋ฆฌ์†Œ์Šค์™€ ํ–‰์œ„๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ ๊ทธ๋Ÿฌ๋‹ˆ uri๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ์‹๋ณ„, ํ–‰์œ„๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„?

3-1. HTTP ๋ฉ”์„œ๋“œ - GET, POST

  • http ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜

    • GET: ๋ฆฌ์†Œ์Šค(representation) ์กฐํšŒ

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

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

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

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

    • ๊ธฐํƒ€ ๋ฉ”์„œ๋“œ: HEAD(GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ , ์ƒํƒœ ์ค„๊ณผ ํ—ค๋”๋งŒ ๋ฐ˜ํ™˜), OPTIONS(๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ†ต์‹  ๊ฐ€๋Šฅ ์˜ต์…˜์„ ์„ค๋ช…),CONNECT(๋Œ€์ƒ ์ž์›์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ„ฐ๋„์„ ์„ค์ •), TRACE( ์ปค๋„ฅํŠธ๋ž‘ ํŠธ๋ ˆ์ด์Šค๋Š” ๊ฑฐ์˜ ์•ˆ์“ฐ์ž„)

1. GET

  • ๋ฆฌ์†Œ์Šค ์กฐํšŒ
  • ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” query(์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง)๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ด ๋งŽ์•„์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
  • ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„๊ฐ€ ๋งŽ๋‹ค. ๋ณดํ†ต ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ์ž˜ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์„œ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—

2. POST

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ํ•œํ…Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ• ํ…Œ๋‹ˆ๊นŒ ์ด ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค˜ ๋ผ๋Š” ๊ฒƒ(๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด)
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ(๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰)
  • ์ฃผ๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋กœ ์‹ ๊ทœ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ
  • ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ? ์ •ํ•ด์ง„ ๊ฒƒ์ด ์—†๊ณ  ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๋ฆฌ์†Œ์Šค๋งˆ๋‹ค ๋”ฐ๋กœ ์ •ํ•ด์•ผํ•œ๋‹ค.
  • ์ฃผ๋กœ ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋“ฑ๋ก/ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ(์ด๊ฒŒ ์ค‘์š”ํ•จ, ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, post์˜ ๊ฒฐ๊ณผ๋กœ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ)/ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ

3. put

  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์™„์ „ํžˆ ๋Œ€์ฒด(์ˆ˜์ •์ด ์•„๋‹ˆ๋ผ ์™„์ „ํžˆ ๊ฐˆ์•„์น˜์šฐ๋Š”๊ฑฐ์ž„), ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ, ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ๋ฎ์–ด๋ฒ„๋ฆผ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„(์ค‘์š”!!), ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์ „์ฒด ์œ„์น˜๋ฅผ ์•Œ๊ณ  uri์ง€์ •(post์™€ ํฐ ์ฐจ์ด์ )

4. patch

  • ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ
  • but ์ง€์› ์•ˆ๋˜๋Š” ์„œ๋ฒ„๋„ ์žˆ๋‹ค(๋“œ๋ญ„) ๊ทธ๋Ÿด๊ฒฝ์šฐ post ์จ์•ผํ•จ

5. delete

  • ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

3-2. HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ

  1. http ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ
  • ์•ˆ์ „(safe): ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Q)๊ณ„์† ํ˜ธ์ถœํ•ด์„œ, ๋กœ๊ทธ ๊ฐ™์€๊ฒŒ ์Œ“์—ฌ์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด?
    A) ์•ˆ์ „์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋งŒ ๊ณ ๋ คํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋ถ€๋ถ„๊นŒ์ง€ ๊ณ ๋ ค ใ„ด

  • ๋‹จ, get๋งŒ ์•ˆ์ „ํ•จ. ๋‚˜๋จธ์ง„ ๋‹ค ๋ฐ”๊พธ๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์•ˆ์ „ํ•˜์ง€ ์•Š์Œ

  • ๋ฉฑ๋“ฑ(idempotent): ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  100๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™๋‹ค (get, put: ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ฒดํ•˜๋‹ˆ๊นŒ ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด๋„ ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Œ, delete/ post ๋ฉฑ๋“ฑ์ด ์•„๋‹ˆ๋‹ค! ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ™์€ ๊ฒฐ์ œ๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ)

  • ์ž๋™๋ณต๊ตฌ ๋งค์ปค๋‹ˆ์ฆ˜์— ์“ธ ์ˆ˜ ์žˆ์Œ, ์„œ๋ฒ„๊ฐ€ ํƒ€์ž„์•„์›ƒ ๋“ฑ์œผ๋กœ ์ •์ƒ ์‘๋‹ต์„ ๋ชป ์ฃผ์—ˆ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ™์€ ์š”์ฒญ์„ ๋‹ค์‹œ ํ•ด๋„ ๋˜๋Š”๊ฐ€?์˜ ํŒ๋‹จ ๊ทผ๊ฑฐ (delete๋Š” ๋˜‘๊ฐ™์€ ์š”์ฒญ์„ ๋‘๋ฒˆํ•ด๋„ ๋œ๋‹ค)

  • Q)์žฌ์š”์ฒญ ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด๋ฒ„๋ฆฌ๋ฉด?
    A)๋ฉฑ๋“ฑ์€ ์™ธ๋ถ€์š”์ธ์œผ๋กœ ์ค‘๊ฐ„์— ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ ๊นŒ์ง€๋Š” ๊ณ ๋ คํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. (์ค‘๊ฐ„์— ๋ณ€๊ฒฝ๋œ ๋ฆฌ์†Œ์Šค๋กœ ๋‚˜์˜ด)

  • ์บ์‹œ๊ฐ€๋Šฅ(cacheable): ์‘๋‹ต ๊ฒฐ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€?/ get, head, post, patch ์บ์‹œ๊ฐ€๋Šฅ/ ์‹ค์ œ๋กœ๋Š” get, head ์ •๋„๋งŒ ์บ์‹œ๋กœ ์‚ฌ์šฉ(๋˜‘๊ฐ™์€ ๋ฆฌ์†Œ์Šค์™€ ํ‚ค๊ฐ€ ๋งž์•„์•ผํ•˜๋Š”๋ฐ post๋Š” ๋ณต์žกํ•ด์„œ ๊ตฌํ˜„์ด ์ž˜ ์•ˆ๋Œ)/ post,patch๋Š” ๋ณธ๋ฌธ ๋‚ด์šฉ๊นŒ์ง€ ์บ์‹œ ํ‚ค๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š์Œ

3-4. ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€

  1. ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก
  • get
  • ์ฃผ๋กœ ์ •๋ ฌํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)
  1. ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก
  • post,put,patch
    -ํšŒ์›๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ

4๊ฐ€์ง€ ์ƒํ™ฉ

  1. ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ: ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์‚ฌ์šฉ/ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋กœ ๊ทธ๋ƒฅ ๋‚ด๋ ค์คŒ. ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ

  2. ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ: ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ/ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ ฌ ํ•„ํ„ฐ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ/ ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ์ •๋ ฌ ํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)/ ์กฐํšŒ ์กฐ๊ฑด์„ ์ค„์—ฌ์ฃผ๋Š” ํ•„ํ„ฐ, ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ •๋ ฌ ์กฐ๊ฑด์— ์ฃผ๋กœ ์‚ฌ์šฉ/ ์กฐํšŒ๋Š” get ์‚ฌ์šฉ/ get์€ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

  3. html form์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก: ๋ญ๋ผ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค! ์›น์„œ๋ฒ„ ํŒŒ์‹ฑ? ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค!

method="post, get" ๋‘˜๋‹ค ๋Œ

  1. http api๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

๋ชจ๋ฅด๊ฒ ๋‹ค!

3-5. HTTP API ์„ค๊ณ„

๊ฒฐ๋ก ์€ : api url ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ์ธ๊ฐ€

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