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

HTTP ๋ž€?

  • HyperText Transfer Protocol
  • ์‘์šฉ ๋ ˆ๋ฒจ์˜ ํ”„๋กœํ† ์ฝœ (OSI 7)
  • HTTP๋Š” ์‹ ๋ขฐํ• ๋งŒํ•œ ์ „์†ก ๋˜๋Š” ์„ธ์…˜ ๋ ˆ์ด์–ด์˜ **์—ฐ๊ฒฐ(Connection)**์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ƒํƒœ๊ฐ€ ์—†๋Š” (Stateless) ์š”์ฒญ/์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • HTTP ํด๋ผ์ด์–ธํŠธ
    • ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์„ ๋งบ๊ณ , ํ•˜๋‚˜ ์ด์ƒ์˜ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ
  • HTTP ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๊ณ  (์—ฐ๊ฒฐ์„ ๋งบ๊ณ )
    • HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ

HTTP Protocol ํŠน์ง• (๊ฐ„๋žต)

  1. Message ์ข…๋ฅ˜ ๋‘ ๊ฐ€์ง€
    • Request & Response
  2. TCP ์‚ฌ์šฉ
    • Transport Layer ์œ„์— Application Layer ์กด์žฌ
  3. stateless protocol
    • ์ƒ๋Œ€๋ฐฉ ์ƒํƒœ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ
    • ๊ทธ๋ƒฅ request, responseํ›„ ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅ ์•ˆํ•œ๋‹ค.

์—ญ์‚ฌ

  • HTTP v0.9 (1996)
  • HTTP v1.0 (1996)
    • RFC2616
    • URL๊ณผ URI์˜ ์ฐจ์ด
      • URL (Uniform REsource Locator)
        • URI์˜ ํ•œ ์ข…๋ฅ˜
        • scheme์ด http์ธ ๊ฒฝ์šฐ์˜ URI๋ฅผ URL์ด๋ผ ํ•จ
      • URI (Uniform Resource Indicator)
        • ์ž์›์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฌธ์ž์—ด
    • ๋‚ ์งœ ํฌ๋งท
      • 3๊ฐ€์ง€์˜ ๋‚ ์งœ ํฌ๋งท์„ ์ง€์›
      • RFC 1123: ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ
        • Sun, 06 Nov 1994 08:49:37 GMT
      • RFC 1036
        • Sunday, 06-Nov-94 08:49:37 GMT
      • asctime
        • Sun Nov 6 08:49:37 1994
  • HTTP v1.1 (1999)
    • working group
      • wg (working group)
      • ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ๊ฐœ์ •ํ•˜๋Š” ์ž‘์—…์„ ํ–ˆ๋˜ ๊ณณ
      • ๋ฌธ์„œ๋ฅผ ๊ฐœ์ •ํ•ด์„œ ๋งŒ๋“ฆ
      • ์ƒ์„ธํ•˜๊ฒŒ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ํ•ด๋‹น ๋งํฌ์—์„œ ํ™•์ธ

๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅ ํ›„ ์ฐฝ์ด ๋ณด์ด๊ธฐ ๊นŒ์ง€ ๊ณผ์ •

  • PC (Client: User Agent)
    • User agent
      • HTTP ํ”„๋กœํ† ์ฝœ ํ—ค๋”์— ์žˆ์Œ
      • Mozilla/5.0 ~ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋…€์„
      • ์ด ์ •๋ณด๋ฅผ ์™œ ์ค„๊นŒ?
        • ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ
        • ์˜›๋‚ ์— ์„œ๋ฒ„ ์ฐจ์›์—์„œ ๋“ค์–ด์˜จ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Œ
        • ์ฆ‰, ์ด ์ •๋ณด ๋ฐ”ํƒ•์œผ๋กœ ํ˜ธํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต์œผ๋กœ ์ค˜! ๋ผ๋Š” ์–˜๊ธฐ
  • DNS
  • CDN
  • Server (Origin)
    • Application Server
      • ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด Endpoint์™€ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ๋งํ•œ๋‹ค.
      • Web Server
        • ์ฃผ๋กœ HTTP ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„
        • Apache
          • ์ •์ ์ธ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋œ ์›น์„œ๋ฒ„
          • ์ •์ ์ด๋ž€?
            • ๋ฏธ๋ฆฌ ์„œ๋ฒ„์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ์ œ๊ณต
            • ์–ด๋–ค ์š”์ฒญ์ด๋ƒ์— ์ƒ๊ด€์—†์ด ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ œ๊ณต
        • Tomcat
          • Apache์™€ ์„ธํŠธ๋กœ ๋‹ค๋‹˜
          • ๋™์ ์ฒ˜๋ฆฌ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋จ (์ •์  ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅ)
          • Servelet Container
            • Servelet์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰
            • ์›น์„œ๋ฒ„์™€ ์†Œ์ผ“์„ ๋งŒ๋“ค์–ด Servet์ด ํ†ต์‹ ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณต
            • Servelet์ด๋ž€?
              • ์›น์—์„œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌํ˜„์„ ์œ„ํ•ด ํƒ„์ƒ
              • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๋Š” ํด๋ž˜์Šค
          • Tomcat์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณดํ†ค Web Application Server๋ผ ๋ถˆ๋ฆฐ๋‹ค.
          • ํ๋ฆ„
            • Client โ†’ Apache โ†’ Tomcat โ†’ Servelet โ†’ Tomcat โ†’ Apache โ†’ Client
      • Database Server
      • File Server
      • Proxy Server

HTTP๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

  • HTTP/0.9
    • ๋ฉ”์†Œ๋“œ GET ๋ฐ–์— ์—†์Œ
    • ๋ฌธ์„œ ํฌ๋งท HTML๋งŒ ๊ฐ€๋Šฅ
    • ํ—ค๋” ์—†์Œ
    • GET /test.html
  • HTTP/1.0
    • ๋ฉ”์†Œ๋“œ POST ์ถ”๊ฐ€
      • ์“ฐ๊ธฐ ๊ฐ€๋Šฅ

Non-Persistent HTTP

Request Message ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„  ์šฐ์„  TCP Connection์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  request msg ์— ๋Œ€ํ•ด์„œ response msg ๋ฅผ ๋ฐ›๊ฒŒ๋˜๋ฉด TCP Connection ์€ ๋Š๊ธฐ๋ฉฐ ๋‹ค์‹œ ์›น์‚ฌ์ดํŠธ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋“ค๊ณ ์˜ค๊ธฐ ์œ„ํ•ด์„  TCP Connection ์„ ์žฌ์ฐจ ๋งบ์–ด์•ผํ•œ๋‹ค. Connection ์ด ์ง€์†์ ์ธ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค.

  1. HTTP client๊ฐ€ IP/PORT์— TCP ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•œ๋‹ค.
  2. HTTP server์˜ host๋Š” 80๋ฒˆ ํฌํŠธ์—์„œ TCP ์—ฐ๊ฒฐ์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด โ€œacceptโ€ ๋ผ๊ณ  client์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.
  3. HTTP client๋Š” HTTP request ๋ฉ”์‹œ์ง€๋ฅผ TCP ์—ฐ๊ฒฐ Socket์— ๋ณด๋‚ธ๋‹ค.
  4. HTTP server๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ  response๋ฅผ socket์— ๋„ฃ๋Š”๋‹ค.
  5. HTTP sever๋Š” TCP ์—ฐ๊ฒฐ์„ ๋Š๋Š” ์ค€๋น„๋ฅผ ํ•œ๋‹ค.
  6. HTTP client๋Š” ์‘๋‹ต์„ ๋ฐ›๊ณ  ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.
  7. HTTP client๊ฐ€ ๋‹ค ๋ฐ›์•˜๋‹ค๋ฉด ๋‹ค ๋ฐ›์•˜๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.
  8. ํ•จ๊ป˜ Connection์„ ๋Š๋Š”๋‹ค.

Persistent HTTP

์›นํด๋ผ์ด์–ธํŠธ (๋ธŒ๋ผ์šฐ์ €) ๋Š” ๋ณดํ†ต ๊ฐ™์€ ์‚ฌ์ดํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ TCP ์ปค๋„ฅ์…˜์„ ๋งบ๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›น ํŽ˜์ด์ง€์— ์ฒจ๋ถ€๋œ ์ด๋ฏธ์ง€๋“ค ๋Œ€๋ถ€๋ถ„์€ ๊ฐ™์€ ์›น์‚ฌ์ดํŠธ์— ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ํ•˜์ดํผ๋งํฌ๋„ ๊ฐ™์€ ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€ ๋“ฑ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ๊ทธ ์„œ๋ฒ„์— ๋˜ ๋‹ค์‹œ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ, ์ด ์†์„ฑ์„ ์‚ฌ์ดํŠธ ์ง€์—ญ์„ฑ(Site Locality)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ TCP ์ปค๋„ฅ์…˜์„ ๊ณ„์† ์œ ์ง€ํ•˜์—ฌ ์•ž์œผ๋กœ๋„ ์žˆ์„ HTTP ์š”์ฒญ์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ์ดํ›„์—๋„ ๊ณ„์† ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋กœ ์žˆ๋Š” TCP ์ปค๋„ฅ์…˜์„ Persistent Connection ์ด๋ผ๊ณ  ํ•œ๋‹ค.