๐ŸŒผ Spring ๊ธฐ์ดˆ โ‘  - HTTP, Web Application / TIL - day 20

ํ•˜๋ฆฌ๋น„ยท2025๋…„ 3์›” 18์ผ
1

๐ŸŒผ Spring

๋ชฉ๋ก ๋ณด๊ธฐ
2/11
post-thumbnail

โ–ช๏ธ HTTP โ–ช๏ธ


๐Ÿ“– HTTP(HyperText Transfer Protocol)

๐Ÿ’ก JSON ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ HTTP๋ฅผ ํ†ตํ•ด ์ „์†ก
์ฃผ๋กœ HTML/1.1 TCP๋ฅผ ์‚ฌ์šฉ / ์ตœ๊ทผ HTML/2, HTML/3 UDP์˜ ์‚ฌ์šฉ๋Ÿ‰๋„ ์ฆ๊ฐ€์ค‘

๐Ÿ“Œ ๋™์ž‘ ์ˆœ์„œ

  • ํด๋ผ์ด์–ธํŠธ : ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค

  • ์„œ๋ฒ„ : ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•œ๋‹ค


๐Ÿ“Œ ํŠน์ง•

  • HTTP๋Š” ์ธํ„ฐ๋„ท ์ƒ์—์„œ ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ํ†ต์‹ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ๋‹ค
    (๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์™€ ์ƒํƒœ๋‚˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๋ฉด - ๋งŽ์€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค)

1๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ๊ฐ๊ฐ ๋…๋ฆฝ์  ๊ตฌ์„ฑ

2๏ธโƒฃ ๋ฌด์ƒํƒœ Stateless

- ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ˆ˜ํ‰ ํ™•์žฅ์„ฑ ๋†’๋‹ค
- ํ•œ๊ณ„ : ๋ฌด์ƒํƒœ์˜ ํ•œ๊ณ„ ( = ์ „๋ถ€ Statelessํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜๋Š” ์—†๋‹ค)
โžก๏ธŽ ์บ์‹œ, ์„ธ์…˜, ํ† ํฐ์œผ๋กœ ํ•ด๊ฒฐ

3๏ธโƒฃ ๋น„์—ฐ๊ฒฐconnectionless

- ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž์› ํšจ์œจ์  ์‚ฌ์šฉ
- ํ•œ๊ณ„ : ๋น„์—ฐ๊ฒฐ์˜ ํ•œ๊ณ„ ( = ๋งค ์š”์ฒญ๋งˆ๋‹ค ์—ฐ๊ฒฐํ•˜๊ณ  ์ •์ ์ž์› ๋‹ค์šด๋กœ๋“œ )
โžก๏ธŽ HTTP ์ง€์†์—ฐ๊ฒฐ๋กœ ํ•ด๊ฒฐ

๐ŸŒŸ๊ธฐ์–ต ์•ˆ๋‚˜๋ฉด ์šฉ์–ด๋ชจ์Œ์ง‘ ์‚ดํŽด๋ณด์ž๐ŸŒŸ



๐Ÿ“– HTTP Message ๊ตฌ์กฐ

๐Ÿ’ก์š”์ฒญ๋ฉ”์„ธ์ง€ ์‘๋‹ต๋ฉ”์„ธ์ง€ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  • <๊ธฐ๋ณธ ๊ตฌ์กฐ>

๐Ÿ“Œ ๊ตฌ์กฐ ๋ถ„์„ํ•˜๊ธฐ

์š”์ฒญ ๋ฉ”์„ธ์ง€(Request Message)์‘๋‹ต ๋ฉ”์„ธ์ง€(Response Message)
HTTP Method - GET, POST, PUT, PATCH, DELETE ๋“ฑHTTP Version
Start Linepath - ์ „์†ก๋˜๋Š” ๋Œ€์ƒ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ(์ฟผ๋ฆฌํฌํ•จ)Status Code-์š”์ฒญ ์„ฑ๊ณต์—ฌ๋ถ€ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ
HTTP VersionStatus Text-์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ „๋‹ฌ๋  ๋ฉ”์„ธ์ง€
Header- ์š”์ฒญ์˜ ์ถ”๊ฐ€ ์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.- ์‘๋‹ต์— ์“ฐ๋Š” Header ๊ฐ’ ๋”ฐ๋กœ ์กด์žฌ
Empty Line- ๊ณต๋ฐฑ ํ•œ ์ค„- ๊ณต๋ฐฑ ํ•œ ์ค„
Message Body- ์‹ค์ œ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๋ถ€๋ถ„- ์‹ค์ œ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๋ถ€๋ถ„
* OWS : ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ
* field-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
* ์„œ๋ฒ„๊ฐ€ ๊ฐ’์„์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค


๐Ÿ“– HTTP Method

๐Ÿ“Œ ์ฃผ์š” ๋ฉ”์„œ๋“œ (CRUD)

1๏ธโƒฃ POST - ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ

  • ๋ณดํ†ต ์ƒ์„ฑ๋  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•ด์„œ id๊ฐ’(์‹๋ณ„์ž) ์ƒ๊น€

  • html form์— ์‚ฌ์šฉ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹(๋ฆฌ์†Œ์Šค)์— ์ •ํ•ด์ง„ ๊ฒƒ์€ ์—†๋‹ค

  • message body๋ฅผ ํ†ตํ•ด ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค


2๏ธโƒฃ GET - ๋ฆฌ์†Œ์Šค ์กฐํšŒ

  • โถ Query String ๋ฏธํฌํ•จ์‹œ
    : message body๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๊ถŒ์žฅ์•ˆํ•œ๋‹ค
  • โท Query String ํฌํ•จ์ธ ๊ฒฝ์šฐ
    : ์„œ๋ฒ„์— ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ํ•„์š”ํ•˜๋ฉด query string ์„ ์‚ฌ์šฉ!

3๏ธโƒฃ PUT - ๋ฆฌ์†Œ์Šค ๋ฎ์–ด์“ฐ๊ธฐ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ญ์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•ด์•ผํ•œ๋‹ค (post์™€ ๋‹ค๋ฆ„)
โถโทโธ
  • โถ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค ์กด์žฌํ•œ๋‹ค๋ฉด โž ๋ฆฌ์†Œ์Šค ์ „์ฒด ์ˆ˜์ •

  • โท ๊ธฐ์กด ๋ฆฌ์†Œ์Šค์—์„œ ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€๋ฐ? โž ๊ทธ๋ž˜๋„ ๋ฆฌ์†Œ์Šค ์™„์ „ํžˆ ๋ฎ์–ด์”Œ์›Œ์ง

  • โธ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ โž ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ


4๏ธโƒฃ PATCH - ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ์ˆ˜์ •

  • put์ด๋ž‘ ๋‹ค๋ฅด๋‹ค, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค


5๏ธโƒฃ DELETE - ๋ฆฌ์†Œ์Šค ์‚ญ์ œ

๐Ÿ“ HTTP Method ์†์„ฑ

๐Ÿ’ก ์†์„ฑํ‘œ
*optional : ์žˆ์„์ˆ˜๋„ ์—†์„์ˆ˜๋„

๐Ÿ’ก ์•ˆ์ „์„ฑ (Safe)

  • ๐ŸŒŸ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค
    - ์•ˆ์ • : GET (์กฐํšŒ๋งŒ ํ•˜๋‹ˆ๊นŒ)
    - ๋ถˆ์•ˆ์ • : POST, DELETE, PUT, PATCH

๐Ÿ’ก ๋ฉฑ๋“ฑ์„ฑ (Idempotent)

  • ๐ŸŒŸ ํ•œ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ฒœ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ•ญ์ƒ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค(์š”์ฒญ์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์žฌ์‹œ๋„ ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”)
    - โญ•๏ธ ๋ฉฑ๋“ฑ์„ฑ ๋ณด์žฅ
    GET โ†’ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๊ณ„์† ์กฐํšŒ๋œ๋‹ค. (๋ฆฌ์†Œ์Šค ์กฐํšŒ ์žฌ์š”์ฒญ์ค‘ ์ˆ˜์ •์š”์ฒญ์ด ์ถ”๊ฐ€๋œ๋‹ค๋ฉด? ๋ฉฑ๋“ฑ์„ฑ ๊ณ ๋ คX)
    PUT โ†’ ์ˆ˜์ •ํ•ด์„œ ๋Œ€์ฒด๋œ ํ›„์˜ ๊ฒฐ๊ณผ๋Š” ๊ณ„์† ๊ฐ™๋‹ค.
    DELETE โ†’ ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆํ•ด๋„ ์‚ญ์ œ๋œ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.
    - โŒ ๋ฉฑ๋“ฑ์„ฑ ๋ณด์žฅ ์•ˆํ•จ
    POST โ†’ ๊ณ„์ขŒ ์†ก๊ธˆ์„ ๋‘๋ฒˆํ•œ๋‹ค๋ฉด?, ๊ฒŒ์‹œํŒ ๊ธ€์“ฐ๊ธฐ, ํšŒ์›๊ฐ€์ž…

๐Ÿ’ก ์บ์‹œ๊ฐ€๋Šฅ์„ฑ (Cacheable)

  • ๐ŸŒŸ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€
    - ์บ์‹œ(Cache) : ๋งค๋ฒˆ ์š”์ฒญ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž„์‹œ๋ณด๊ด€ํ•˜๋Š” ์žฅ์†Œ
    - ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์€ ์ •์ ์ž์›์„ ์ฃผ๋กœ ์บ์‹ฑ
    - ์บ์‹œ ๊ฐ€๋Šฅ : GET, HEAD, POST


๐Ÿ“– HTTP ์ƒํƒœ ์ฝ”๋“œ

์•„๊นŒ ์‘๋‹ต ๋ฉ”์„ธ์ง€์˜ 200 ok ๋ถ€๋ถ„ , ๋ชจ๋‘ ์™ธ์šธํ•„์š” ์—†์Œ ๋ฐฑ๋‹จ์œ„๋กœ ์•Œ๊ณ  ์žˆ์œผ์…ˆ

๐Ÿ“Œ 1xx (์ •๋ณด)

  • ๐ŸŒŸ ์š”์ฒญ ์ˆ˜์‹  ํ›„ ์ฒ˜๋ฆฌ์ค‘ (์ž˜ ์‚ฌ์šฉ ์•ˆํ•จ)

๐Ÿ“Œ 2xx (์„ฑ๊ณต)

  • ๐ŸŒŸ ์ •์ƒ ์ฒ˜๋ฆฌ ์™„๋ฃŒ

    ๋Œ€ํ‘œ์ฝ”๋“œ
    200 OK์š”์ฒญ ์„ฑ๊ณต
    201 Created์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ
    202 Accepted์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์Œ (์ฃผ๋กœ Batch ์ฒ˜๋ฆฌ์—์„œ ์‚ฌ์šฉ)
    204 No Content์š”์ฒญ์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ, ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ (์ €์žฅ ๋ฒ„ํŠผ, ์ž‘์„ฑ ๋ฒ„ํŠผ )

๐Ÿ“Œ 3xx (๋ฆฌ๋‹ค์ด๋ ‰์…˜)

  • ๐ŸŒŸ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ํ–‰๋™์ด ํ•„์š”ํ•œ ์ƒํƒœ (+ ์„œ๋ฒ„๊ฐ€ ๋„ˆ ์ด๊ฑฐ ํ•ด๋ฐ”๋ฐฉ! ์•Œ๋ ค์คŒ)

  • ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ์ข…๋ฅ˜

    • ์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
      url์ด ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ - ๊ธฐ์กด url ์‚ฌ์šฉ ์•ˆํ•จ

      301 Moved Permanently๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ(get), ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ๋  ์ˆ˜๋„
      308 Permanent Redirect๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€
    • ์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
      url์ด ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ

      302 Found๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ(get)
      303 See Other๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ(get)
      307 Temporary Redirect๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€
      ๐Ÿ’ก URL์ด ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ์˜ˆ์‹œ 
      -- PRG ํŒจํ„ด : ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ(Post) โ†’ ์‘๋‹ต(Redirect) โ†’ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์š”์ฒญ(Get)
      -- ์ด ํŒจํ„ด์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ๊ณ ์นจ์„ ํ• ๋•Œ๋งˆ๋‹ค ์š”์ฒญ์ด ์ค‘๋ณต ์ฒ˜๋ฆฌ(post๋Š” ๋ฉฑ๋“ฑ์„ฑ์ด ์—†์œผ๋ฏ€๋กœ)
      -- ์ ์šฉํ•˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจ ํ• ๋•Œ get ์š”์ฒญ์„ ํ•œ๋‹ค
    • ๊ธฐํƒ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
      ์บ์‹œ๋ฅผ ํ™œ์šฉํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€

      304 Not Modified์บ์‹œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ, ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜๋‹ค -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋„๋ก ์œ ๋„
       

๐Ÿ“Œ 4xx (ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ)

  • ๐ŸŒŸ ์ž˜๋ชป๋œ ๋ฌธ๋ฒ• ๋“ฑ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ์ˆ˜ํ–‰ ๋ถˆ๊ฐ€ (์žฌ์‹œ๋„ ํ•ด๋ดค์ž ์‹คํŒจ)

    ๋Œ€ํ‘œ์ฝ”๋“œ
    400 Bad Request ์š”์ฒญ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค
    401 Unauthorized๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•˜๋‹ค (๋กœ๊ทธ์ธ๊ฐ™์€)
    403 Forbidden์Šน์ธ ๊ฑฐ๋ถ€, ์ฃผ๋กœ ์ธ๊ฐ€ ๋ฌธ์ œ (๊ถŒํ•œ ์—†์Œ)
    404 Not Found์š”์ฒญ ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋ฒ„์— ์—†๋‹ค
        

๐Ÿ“Œ 5xx (์„œ๋ฒ„ ์—๋Ÿฌ)

  • ๐ŸŒŸ ์„œ๋ฒ„ ์˜ค๋ฅ˜, ์š”์ฒญ์€ ์ •์ƒ์ด์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ (์žฌ์‹œ๋„์‹œ ์„ฑ๊ณตํ•  ์ˆ˜๋„)
  • ๋Œ€ํ‘œ์ฝ”๋“œ
    • 500 Internal Server Error ๋Œ€๋ถ€๋ถ„ ์ด๊ฑฐ์ž„
    • 503 Service Unavailable ์„œ๋น„์Šค ์ด์šฉ ๋ถˆ๊ฐ€

๐Ÿ“– HTTP header

๐Ÿ’ก ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด ์ „๋‹ฌ์— ์“ฐ์ž„ (Message Body ๋‚ด์šฉ, ํฌ๊ธฐ, ์ธ์ฆ, ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด, ์„œ๋ฒ„ ์ •๋ณด ๋“ฑ)

  • field-name: OWS field-value OWS (OWS : ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)
  • field-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž„์˜์˜ Header๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์„œ๋ฒ„๊ฐ€ ๊ฐ’์„ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•จ
  • ํ…์ŠคํŠธ (plain text)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๊ฐ๊ฐ์˜ ํ—ค๋”๋Š” ํ•˜๋‚˜์˜ ์ค„๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

โœ”๏ธ์‹ค์ œ Header ํ™•์ธํ•˜๋Š” ๋ฒ•

  • ๊ฐœ๋ฐœ์ž๋„๊ตฌ(F12) โ†’ Network ํƒญ ํด๋ฆญ โ†’ Fetch/XHR ํƒญ ํด๋ฆญ โ†’ ์šฐ์ธก Header ์ •๋ณด

๐Ÿ“Œ HTTP Header ๋ชจ์Œ

โœ”๏ธ ํ‘œ์ค€ Header

  • ์™ธ์šฐ๊ธฐ๋ณด๋‹ค ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜์ž !

โœ”๏ธ ๋Œ€ํ‘œ์ ์ธ Header

1๏ธโƒฃ ํ‘œํ˜„ ํ—ค๋”

๐Ÿ“Ž๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ‘œํ˜„ ์ •๋ณด (์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” ์ด๋Ÿฐ ํ˜•์‹์ด์—์š” ~)
๐Ÿ“Ž ์š”์ฒญ๊ณผ ์‘๋‹ต์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ

  • Content-Type : ํ˜•์‹
    - ๋ฐ์ดํ„ฐ์˜ ๋ฏธ๋””์–ด ํƒ€์ž…์ด๋‚˜ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ๋‚˜ํƒ€๋ƒ„
  • Content-Encoding : ์••์ถ• ๋ฐฉ์‹
    - ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ• ํ›„ Encoding ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ์ฝ๋Š” ์ชฝ์—์„œ ํ•ด๋‹น ์ •๋ณด๋กœ ์ด๋™
  • Content-Language : ์–ธ์–ด
  • Content-Length : ๊ธธ์ด
    - byte ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„

2๏ธโƒฃ ์ปจํ…์ธ  ํ˜‘์ƒ

๐Ÿ“Ž ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ์š”์ฒญ
๐Ÿ“Ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์กด์žฌ (1์— ๊ฐ€๊นŒ์šธ ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„ ๋†’๋‹ค, 1์ธ๊ฒฝ์šฐ ์ˆซ์ž ์ƒ๋žต ๊ฐ€๋Šฅ)

  • Accept : ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž…
  • Accept-Charset : ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
  • Accept-Encoding : ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ
  • Accept-Language : ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด

3๏ธโƒฃ ์ผ๋ฐ˜ ์ •๋ณด

  • From : ํด๋ผ์ด์–ธํŠธ ์ด๋ฉ”์ผ ์ •๋ณด - ์ž˜ ์‚ฌ์šฉ ์•ˆํ•จ
  • Referer : ํ˜„์žฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€์˜ ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ - ์œ ์ž… ๊ฒฝ๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ
  • User-Agent : ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด(PC, Mobile)- ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ์ ‘์†ํ•˜๋Š”์ง€ ํ†ต๊ณ„
  • Server : ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ORIGIN ์„œ๋ฒ„์˜ Software ์ •๋ณด
  • Date : HTTP ์š”์ฒญ์ด ๋ฐœ์ƒํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„

4๏ธโƒฃ ํŠน๋ณ„ ์ •๋ณด

  • Host : ์š”์ฒญํ•œ ๋„๋ฉ”์ธ ์ •๋ณด (ํ•„์ˆ˜)

  • Location : ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ฃผ์†Œ

    • ์‘๋‹ต์ฝ”๋“œ 3xx์™€ ํ•จ๊ป˜ ์‘๋‹ต๋˜๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ฃผ์†Œ
    • ์‘๋‹ต์ฝ”๋“œ 201(Created)์™€ ํ•จ๊ป˜ ์‘๋‹ต๋˜๋ฉด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์˜ URI
  • Allow : ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP Method

    • 405 (Method Not Allowed)์™€ ํ•จ๊ป˜ ์‘๋‹ต
  • Retry-After : ๋‹ค์Œ ์š”์ฒญ๊นŒ์ง€ ๋Œ€๊ธฐ ํ•ด์•ผํ•˜๋Š” ์‹œ๊ฐ„

    • 503 (Service Unavailable)์™€ ํ•จ๊ป˜ ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•œ์ง€ ์•Œ๋ ค์คŒ

5๏ธโƒฃ ์ธ์ฆ

  • Authorization : ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด

  • WWW-Authenticate : ๋ฆฌ์†Œ์Šค์— ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•

    • 401 (Unauthorized) ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“Ž Cookie๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค (์„ธ์…˜๊ด€๋ฆฌ๋‚˜ ๊ด‘๊ณ  ํŠธ๋ž˜ํ‚น์— ์ฃผ๋กœ ์‚ฌ์šฉ)

  • Set-Cookie : ์„œ๋ฒ„์—์„œ ์‘๋‹ต์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ Cookie ๊ฐ’ ์ „๋‹ฌ

    • ๋งŒ๋ฃŒ๊ธฐ๊ฐ„(expire, max-age), ์‚ฌ์šฉ๋  ์œ„์น˜(domain, path) ์„ค์ •
    • ์ฃผ์˜ โŒ
      ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋‹ˆ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์ ํ™” ์‹œ์ผœ์•ผ ํ•œ๋‹ค
      ํƒˆ์ทจ ๋‹นํ•˜๊ธฐ ์‰ฌ์šฐ๋‹ˆ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๊ฐœ์ธ์ •๋ณด ๋“ฑ์€ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค
  • Cookie : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ Cookie ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ „์†กํ•œ๋‹ค.

  • Secure : ํ•ด๋‹น ํ—ค๋”๊ฐ€ ์ ์šฉ๋˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•œ๋‹ค.

  • HttpOnly : http ์ „์†ก์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
  • SameSite : ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•œ๋‹ค.

7๏ธโƒฃ cache

  • Cache-Control : ์‘๋‹ต์‹œ ์‚ฌ์šฉ

    • Cache-Control: max-age
      • ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋‹ค์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต๋ฐ›๊ณ  ์บ์‹œ๋ฅผ ๊ฐฑ์‹ 
    • Cache-Control: no-cache
      • ์บ์‹œ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์ง€๋งŒ, ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ
    • Cache-Control: no-store
      • ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ, ์บ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค
  • if-modified-since : ์บ์‹œ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ

  • Last-Modified : ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ์‹œ๊ฐ„

  • ETag : ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ๋‚ ์งœ, ์‹œ๊ฐ„์ด ์•„๋‹Œ ์ด๋ฆ„์„ ์ง€์ •



๐Ÿ“– Restful API

๐Ÿ’ก REST๋ฅผ ์ž˜ ์ค€์ˆ˜ํ•˜๋Š” API , HTTP API๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๋Š” ๊ทœ์น™

โœ”๏ธ REST(Representational State Transfer) ?

  • ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ
  • URL๋กœ ์ž์› ๋ช…์‹œ, ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด CRUD๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ

โœ”๏ธ ์„ค๊ณ„ ์›์น™

  1. ๋ฆฌ์†Œ์Šค๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  2. ๋‹จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ณต์ˆ˜ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  3. ๋งŒ์•ฝ, REST๋งŒ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๋ผ๋ฉด ๋™์‚ฌ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.
  4. ์ž์›์˜ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ์Šฌ๋ž˜์‹œ(/)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  5. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—๋Š” ์Šฌ๋ž˜์‹œ(/)๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.
  6. ์–ธ๋”๋ฐ”(_)๊ฐ€ ์•„๋‹Œ ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  7. ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  8. URI์— ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ํฌํ•จํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  9. CRUD ํ•จ์ˆ˜๋ช…์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , HTTP Method๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  10. ์ •๋ ฌ, ํ•„ํ„ฐ๋ง, ํŽ˜์ด์ง•์€ ์‹ ๊ทœ API๋ฅผ ๋งŒ๋“œ๋Š”๊ฒƒ์ด ์•„๋‹Œ Query Parameter๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ Maturity Model (์„ฑ์ˆ™๋„ ๋ชจ๋ธ)

REST์˜ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ API๋ฅผ ๋“ฑ๊ธ‰ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

level 0 - URL๋งŒ ๋งŒ๋“ฆ
level 1 - ์˜๋ฏธ์žˆ๋Š” URL, but http ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๋ถ€์ ์ ˆ
level 2 (์ตœ์†Œ ๊ถŒ์žฅ ๋ ˆ๋ฒจ) - crud์™€ ๋งค์นญ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒƒ
level 3 - ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒํƒœ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋„˜๊ฒจ์ค€๋‹ค



โ–ช๏ธ Web Application โ–ช๏ธ


๐Ÿ“– Web Server

๐Ÿ’ก HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘, ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต
*์ •์ ๋ฆฌ์†Œ์Šค : ์ด๋ฏธ ์™„์„ฑ๋œ ์ฑ„๋กœ ์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค, ์›๋ณธ ๊ทธ๋Œ€๋กœ ๋Œ€๋‹ตํ•˜๋Š” ๋ฐ์ดํ„ฐ


๐Ÿ“– WAS (Web Application Server)

๐Ÿ’ก HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘, ์›น์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จ
(์ถ”๊ฐ€์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ โž ๋กœ์ง ์ˆ˜ํ–‰ โž ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉ ํ›„(CRUD) ๋™์  ์ปจํ…์ธ  ์ƒ์„ฑ)

  • ๋Œ€ํ‘œ์ ์ธ WAS : Tomcat - spring boot์— ๋‚ด์žฅ๋˜์–ด์žˆ๋‹ค

โœ”๏ธ Web Server ๐Ÿ†š WAS

  1. ์‹ค์ œ๋กœ๋Š” ์›น์„œ๋ฒ„์—์„œ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ํฌํ•จํ•  ์ˆ˜๋Š” ์žˆ๋‹ค
  2. ์™€์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋”์šฑ ํŠนํ™”๋˜์–ด ์žˆ๋‹ค
  3. ์ž๋ฐ”์—์„œ๋Š” Servlet Container ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด ์™€์Šค์ด๋‹ค


๐Ÿ“– Web System ๊ตฌ์„ฑ

๐Ÿ“Œ WAS๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

(WAS ์•ˆ์— ๋กœ์ง ์ •์ ๋ฆฌ์†Œ์Šค ๋‹ค ๋„ฃ๊ณ  ์“ฐ๊ธฐ)

1๏ธโƒฃ WAS๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ํ•˜๊ฒŒ๋œ๋‹ค -> ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜
2๏ธโƒฃ WAS์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ๋ฐ ์ •์  ๋ฆฌ์†Œ์Šค ๋•Œ๋ฌธ์— ๋กœ์ง ์ˆ˜ํ–‰ ๋ถˆ๊ฐ€ํ•  ์ˆ˜๋„
3๏ธโƒฃ WAS์— ์žฅ์• ๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ™”๋ฉด ์ถœ๋ ฅ ๋ถˆ๊ฐ€ (+ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์˜ค๋ฅ˜์ž„์„ ์‘๋‹ตํ•  ์ˆ˜ ์—†๋‹ค)

๐Ÿ“Œ ์‹ค์ œ ์›น์‹œ์Šคํ…œ ๊ตฌ์„ฑ

  • ์›น์„œ๋ฒ„๋Š” ์ •์ ์ž์› ์ฒ˜๋ฆฌ ์™€์Šค๋Š” ๋กœ์ง๋งŒ! ๋ถ„์—…์„ ์‹œํ‚ค์ž

โœ”๏ธ ์žฅ์ 

  • ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ : ์ž์› ๋Š˜์–ด๋‚˜๋ฉด ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ˆ˜ํ‰์  ํ™•์žฅ ๊ฐ€๋Šฅ
    ( ์ •์  ์ž์›์ด ๋งŽ์ด ์“ฐ์ด๋ฉด Web Server / App๊ด€๋ จ ์ž์›์ด ์ฆ๊ฐ€๋˜๋ฉด WAS๋ฅผ ์Šค์ผ€์ผ ์•„์›ƒ )
  • WAS๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ Web Server๋Š” ์ •์ƒ ๋™์ž‘ (+ ์—๋ŸฌํŽ˜์ด์ง€ ์ „๋‹ฌ ๊ฐ€๋Šฅ)

๐Ÿ“– Servlet

  • ๐Ÿ’ก HTTP ํ†ต์‹ ์—์„œ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค
    ์ž๋ฐ”์—์„œ๋Š” Http servlet์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„

๐Ÿ“Œ ์—ญํ• 

๐Ÿ“Ž ์›๋ž˜ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •

1. ์„œ๋ฒ„์™€ TCP/IP ์—ฐ๊ฒฐ
2. HTTP Request Message ํ•„์š”ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฝ๊ธฐ
    1. HTTP Method ๋ฐ URL ๋ถ„์„
    2. HTTP Header ๋ถ„์„
    3. HTTP Message Body ์ฝ๊ธฐ ๋ฐ ๋ณ€ํ™˜
3. ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
๐ŸŒŸ4. ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰
5. HTTP Response Message ์ƒ์„ฑ
    1. HTTP Start Line ์ƒ์„ฑ
    2. Header ์ƒ์„ฑ
    3. HTTP Message Body์— ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ ํ˜•์‹์— ๋งž์ถฐ ์‘๋‹ต
    4. ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ
6. ์‘๋‹ต ์ „๋‹ฌ
7. ์—ฐ๊ฒฐ ์ข…๋ฃŒ

๐ŸŒŸ Servlet์ด 4๋ฒˆ๋นผ๊ณ  ๋‹คํ•ด์คŒ, ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ๋งŒ ํ•˜๋ฉด๋œ๋‹ค

๐Ÿ“Œ ๋™์ž‘ ์ˆœ์„œ

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋Š” ์ผ
    1. Request ๊ฐ์ฒด์— ๋‹ด๊ฒจ์ ธ์žˆ๋Š” HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉ
      • ์š”์ฒญ ์ •๋ณด(URL, Method, Message Body)๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(๋น„์ง€๋‹ˆ์Šค ๋กœ์ง)์„ ์ˆ˜ํ–‰
    2. ์ƒ์„ ๋œ Response ๊ฐ์ฒด์— HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ž…๋ ฅ


๐Ÿ“– Servlet Container

Servlet์„ ์ง€์›ํ•˜๋Š” WAS ๋‚ด๋ถ€์— ์กด์žฌํ•œ๋‹ค
๐Ÿ’กServlet์„ ์ดˆ๊ธฐํ™”, ์ƒ์„ฑ, ๊ด€๋ฆฌ, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค

  • ์ƒ๋ช…์ฃผ๊ธฐ
    ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐ์ฒดํ™” ์•ˆํ•ด๋„, ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์•Œ์•„์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•Œ์•„์„œ Servlet์„ ์ƒ์„ฑํ•œ๋‹ค
    WAS๊ฐ€ ์ข…๋ฃŒ๋ ๋•Œ Servlet๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ

  • Servlet Container๊ฐ€ ํ•˜๋Š”์ผ
    Servlet์„ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์—ญํ•  - ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ
    ๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›

*์‹ฑ๊ธ€ํ†ค? ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ


๐Ÿ“– Thread

์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
ํ•œ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด Thread๋ฅผ ์ถ”๊ฐ€ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค

๐Ÿ“Œ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ - ๋‹จ์ผ ์š”์ฒญ

  • Thread๊ฐ€ ํ•˜๋‚˜ / ์š”์ฒญ๋„ ํ•˜๋‚˜
    ์š”์ฒญ์ด ์ข…๋ฃŒ๋˜๋ฉด ์›๋ž˜์œ„์น˜๋กœ ๋Œ๋ ค๋†“๋Š”๋‹ค

๐Ÿ“Œ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ - ๋™์‹œ ์š”์ฒญ

  • Thread๊ฐ€ ํ•˜๋‚˜ / ์š”์ฒญ์ด ์—ฌ๋Ÿฌ๊ฐœ
    ๋‘๋ฒˆ์งธ ์š”์ฒญ์ด์˜ค๋ฉด Thread๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ์œ„ํ•ด ๋Œ€๊ธฐํ•œ๋‹ค
    ์ฒซ๋ฒˆ์งธ ์š”์ฒญ์ด ๋๋‚˜๊ณ  Thread๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ๊ทธ๋•Œ ๋‹ค์‹œ ํ• ๋‹น๋ฐ›๊ณ ,,,๋ฐ˜๋ณต


๐Ÿ“– Multi Thread

๐Ÿ’ก ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ž˜๋“œ๋ฅผ ๋งŒ๋“ค์ž! WAS๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค

๐Ÿ“Œ 1. ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด Thread๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ

โœ”๏ธ ์žฅ์ 

  • ๋™์‹œ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํ•˜๋‚˜์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‚˜๋จธ์ง€ Thread๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค

โœ”๏ธ ๋‹จ์ 

  • Thread๋“œ ์ƒ์„ฑ์ˆ˜์— ์ œํ•œ์ด ์—†๊ณ  ์ƒ์„ฑ ๋น„์šฉ์ด ๋†’๋‹ค
    (๋™์‹œ์š”์ฒญ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ์œผ๋กœ ์„œ๋ฒ„ ๋‹ค์šด)
  • Thread๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด context switching ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค

*context switching ?
์œˆ๋„์šฐ์˜ ์ž‘์—…๊ด€๋ฆฌ์ž - ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค(์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ)
1๋ฒˆ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋‹ค 2๋ฒˆ์œผ๋กœ ์Šค์œ„์นญ ํ• ๋•Œ ์ด ์‚ฌ์ด์— ์ƒ๊ธฐ๋Š” ๊ฒƒ !

๐Ÿ“Œ 2. Thread Pool์„ ์ด์šฉํ•˜๊ธฐ

๐ŸŒŸ ๋ฏธ๋ฆฌ Thread๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด ๋‘๊ณ  ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ, ์š”์ฒญ ์ข…๋ฃŒ์‹œ ๋ฐ˜๋‚ฉ

  • ๋ชจ๋“  Thread๊ฐ€ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด?
    ์ผ์„ ๋งˆ์นœ Thread๊ฐ€ ์ƒ๊ธธ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ฑฐ๋‚˜ ๊ฑฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค (์˜ˆ์‹œ - ๋Œ€๊ธฐ๋ฒˆํ˜ธ)

๐Ÿ’ก ์ •๋ฆฌํ•˜๊ธฐ

1๏ธโƒฃ WAS๋Š” Multi Thread๋ฅผ ์ง€์›

  • ๊ฐœ๋ฐœ์ž๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ด€๋ จ์ฝ”๋“œ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„๋œ๋‹ค
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ์‚ฌ์šฉ โ†’ ๊ณต์œ ๋ณ€์ˆ˜ ์กฐ์‹ฌ

2๏ธโƒฃ Thread Pool

  • ์ƒ์„ฑ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ์˜ ์ตœ๋Œ€๊ฐฏ์ˆ˜๋ฅผ ๊ด€๋ฆฌ (tomcat? ๊ธฐ๋ณธ 200๊ฐœ ์„ค์ •, ๊ฐฏ์ˆ˜ ๋ณ€๊ฒฝ๊ฐ€๋Šฅ)

  • ์žฅ์ 
    - ์š”์ฒญ๋งˆ๋‹ค ์ƒ์„ฑํ•˜๋Š” ๋‹จ์  ๋ณด์™„
    - ๋ฏธ๋ฆฌ Thread๋ฅผ ์ƒ์„ฑํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•˜๋Š” ๋น„์šฉ ์ ˆ์•ฝ + ์‘๋‹ต์ด ๋น ๋ฅด๋‹ค
    - Thread์˜ ์ตœ๋Œ€๊ฐฏ์ˆ˜๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ดˆ๊ณผ ์š”์ฒญ์ด ์™€๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

  • ๋‹จ์ 
    - ์ตœ๋Œ€ Thread ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ํ•œ๋‹ค๋ฉด ์‘๋‹ต ์ง€์—ฐ
    - ์ตœ๋Œ€ Thread ์ˆ˜๊ฐ€ ๋†’์œผ๋ฉด ์š”์ฒญ ์ฆ๊ฐ€์‹œ ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ์œผ๋กœ ์„œ๋ฒ„ ๋‹ค์šด



โ–ช๏ธ SSR, CSR โ–ช๏ธ


๐Ÿ“– SSR (Server Side Rendering)

๐Ÿ’ก ์„œ๋ฒ„์—์„œ ํ™”๋ฉด์„ ๊ทธ๋ ค์ค€๋‹ค! ๋™์ ์œผ๋กœ html์„ ๋งŒ๋“ค์–ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ 
*Java์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ : JSP, Thymeleaf

๐Ÿ“Œ ๋™์ž‘ ํ๋ฆ„

โœ”๏ธ ์žฅ์ 

  • ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ ์™„์ „ํ•˜๊ฒŒ ๋žœ๋”๋ง๋œ html์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ์ด ๋น ๋ฅด๋‹ค
  • SEO์— ์œ ๋ฆฌ

*SEO?
๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ์ƒ์œ„ ๋…ธ์ถœ๋  ์ˆ˜์žˆ๋„๋ก ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •

โœ”๏ธ ๋‹จ์ 

  • ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•ด์•ผํ•จ
  • ๋งŒ๋“ค์–ด ์ง„ ์ฑ„๋กœ ์‘๋‹ตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค

๐Ÿ“– CSR

๐Ÿ’ก ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค! ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ html์„ ์ƒ์„ฑ

๐Ÿ“Œ ๋™์ž‘ ํ๋ฆ„

  • ํด๋ผ์ด์–ธํŠธ- html์„ ์„œ๋ฒ„๋กœ ์š”์ฒญ
  • ์„œ๋ฒ„ - ๋น„์–ด์žˆ๋Š” html + js ๋งํฌ ( ํด๋ผ์ด์–ธํŠธ ๋กœ์ง, ๋ Œ๋”๋ง ํฌํ•จ )
  • ๋™์ž‘ํ•˜๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํ˜•ํƒœ(json ๋“ฑ)๋กœ ์‘๋‹ต๋ฐ›๋Š”๋‹ค
  • ์ด ์‘๋‹ต ๋ฐ์ดํ„ฐ๋กœ html์„ ๋™์ ์œผ๋กœ ๊ทธ๋ฆฐ๋‹ค

โœ”๏ธ ์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ Œ๋”๋ง์„ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ๋น ๋ฅด๋‹ค
    (๊ตฌ๊ธ€๋งต ๊ธฐ์–ต - ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”๋กœ๋ฐ”๋กœ ์›€์ง์ธ๋‹น)
  • ์ดˆ๊ธฐ ๋กœ๋”ฉ(๋ชจ๋“  ๋กœ์ง๊ณผ js ๋งํฌ ์ „๋‹ฌ) ํ›„์—๋Š” ์„œ๋ฒ„์™€ ํ†ต์‹ ์—†์ด ๋ฐ”๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ

โœ”๏ธ ๋‹จ์ 

  • ์ดˆ๊ธฐ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ๋‹ค
  • ๊ฒ€์ƒ‰์—”์ง„์ด js๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋ฉด SEO์— ๋ถˆ๋ฆฌ

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