๐Ÿšฉ [์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ Ch.1] ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘ (1)

NtoZยท2023๋…„ 5์›” 30์ผ
0

Study

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

๐Ÿšฉ 1.1 ์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

๐Ÿ ์›น ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

3 tier architecture

  • 3 tier architecture
    docs.aws - 3 tier architecture

  • โ‘  Client(๋ธŒ๋ผ์šฐ์ €) : ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ์กฐ์ž‘ํ•˜์—ฌ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ(Request), ์‘๋‹ต(response)

    • ๊ด€๋ จ : HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    • Presentation Tier ๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • โ‘ก ์›น ์„œ๋ฒ„ ํ˜น์€ WAS(Web Application Server) :

    โถ ์›น ์„œ๋ฒ„(Web Server) : ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ ์ œ๊ณต (์›น ์„œ๋ฒ„)
    โท WAS (Web Application Server) : ๋™์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ œ์ž‘

    • ๋Œ€๋ถ€๋ถ„์˜ WAS๋Š” ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ๋„ ๊ฒธํ•œ๋‹ค. ( ์ •์ ์ด๋ฏธ์ง€ + ๋™์  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ )
    • ๐Ÿ“ท ๊ทธ๋ ‡๋‹ค๋ฉด Web Server๋Š” WAS์˜ ํ•˜์œ„ํ˜ธํ™˜์ธ๊ฐ€? No!
      - ์ฑ…์ž„ ๋ถ„ํ• ์„ ํ†ตํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐฉ์ง€ / ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ , WAS ํ—ฌ์Šค ์ฒดํฌ / ๋ณด์•ˆ (DB๋…ธ์ถœ ๋ฐฉ์ง€) ๋“ฑ
      ์›น ์„œ๋ฒ„์™€ WAS๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ !
  • โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) :
    ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ. ๊ธฐ๋ณธ์ ์œผ๋กœ Relational DB ์‚ฌ์šฉ


์ •์  ๋ฐ์ดํ„ฐ์™€ ๋™์  ๋ฐ์ดํ„ฐ

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๊ตฌ์กฐ
    ์ถœ์ฒ˜: [JSP/Servlet] Servlet์— ๊ด€ํ•œ ๋ชจ๋“  ๊ฒƒ

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •์  ๋ฐ์ดํ„ฐ์ธ์ง€ ๋™์  ๋ฐ์ดํ„ฐ์ธ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    • ์ •์ (static) ๋ฐ์ดํ„ฐ : ํ•ญ์ƒ ๋™์ผํ•˜๊ฒŒ ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹
      - ์ฃผ๋กœ ํŒŒ์ผ๋กœ ๊ณ ์ •๋œ HTML, CSS, ์ด๋ฏธ์ง€ ํŒŒ์ผ
    • ๋™์ (dynamic) ๋ฐ์ดํ„ฐ : ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹
      - Server Side Programming : ์„œ๋ฒ„์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ
      - ex) ๋ฉ”์ผํ•จ.
  • ์›น ์„œ๋ฒ„ : ํ•ญ์ƒ ๊ฐ™์€ ์ •์ (static) ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ์—ญํ• ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ฒ„

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ : ๋™์ (dynamic) ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ

    • ํ†ฐ์บฃ์˜ ๊ฒฝ์šฐ WAS์˜ ํ•œ ์ข…๋ฅ˜์ด์ง€๋งŒ, ์‚ฌ์‹ค์ƒ ๋Œ€๋ถ€๋ถ„์˜ WAS๋Š” ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ๋„ ๊ฐ™์ด ํฌํ•จํ•˜๋ฏ€๋กœ ์ด๋ฏธ์ง€, CSS/JS์™€ ๊ฐ™์€ ์ •์ ์ธ ์ž์›๊ณผ ์„œ๋ธ”๋ฆฟ/JSP ๊ฐ™์€ ๋™์  ์ž์› ๋ชจ๋‘ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ!


๐Ÿ์‚ฌ์šฉ ์ŠคํŽ™

ํ†ฐ์บฃ(Tomcat)์„ค์ •๊ณผ ์›น ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

Jakarta EE ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • ๋‹ค๋ฅธ ์  : JDK๊ฐ€ Amazone Corretto version์ด ์•„๋‹Œ zulu-11์ด๋‹ค.
    VM option์ด ๊ธฐ์กด์— ์ˆ˜์ •๋˜์–ด ์žˆ์—ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ ์„ค์ •

  • ์ฃผ์†Œ ๊ฒฝ๋กœ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๋ฏ€๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ์˜ ๋ฐ˜์˜

  • ํ†ฐ์บฃ์˜ ์žฌ์‹œ์ž‘์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ Edit Configurations - On Update action๊ณผ On frame deactivation ์„ค์ • ์กฐ์ •. (ํ†ฐ์บฃ ํ•œ๊ธ€ ์„ค์ •๋„ VM options๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ •)์ด์ œ jsp ํŒŒ์ผ์„ ๋ณ€๊ฒฝ ํ›„ ๊ฐ€๋™ ์„œ๋ฒ„๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด๋„ ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜์˜๋œ ๊ฒƒ์„ ํ™•์ธ ๊ฐ€๋Šฅ

  • ๋‹จ, HelloServlet๊ณผ ๊ฐ™์€ ์ž๋ฐ” ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์€ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋จ.





๐Ÿšฉ 1.2 ์›น ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹ ์ดํ•ดํ•˜๊ธฐ

๐Ÿ Request(์š”์ฒญ) / Response (์‘๋‹ต)

HTTP(S), ์›น ๋ฐ์ดํ„ฐ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์•ฝ


1) 3 ํ‹ฐ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต

  • 3ํ‹ฐ์–ด ์•„ํ‚คํ…์ฒ˜์—์„œ ์ด๋ค„์ง€๋Š” ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)

  • ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ (์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ

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

    ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค!

  • ์–ด๋–ป๊ฒŒ?

    • HTTP(S)๋ผ๋Š” ํ†ต์‹  ๊ทœ์•ฝ์„ ํ†ตํ•ด์„œ!

2) HTTP(S) ๋ผ๋Š” ์•ฝ์†

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ๊ณผ ์„œ๋ฒ„ ์‘๋‹ต ์‚ฌ์ด์—๋Š” ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์•ฝ์†์ด ํ•„์š”ํ•˜๋‹ค.
    ์ด๋ฅผ, ํ”„๋กœํ† ์ฝœ(Protocol)โญ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ์›น์—์„œ๋Š” HTTP(Hyper Text Transfer Protocol)โญ ๋ผ๋Š” ํ†ต์‹  ๊ทœ์•ฝ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    URL, URI์˜ ๊ฐ€์žฅ ์ฒ˜์Œ ์ฃผ์†Œ๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์„ ํ•  ๊ฒƒ์ธ์ง€ ๊ทธ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ช…๊ธฐ๋˜์–ด ์žˆ๋‹ค.

  • HTTPS๋Š” HTTP์— ๋ณด์•ˆ์„ฑ์ด ๊ฐ•ํ™”๋œ ํ”„๋กœํ† ์ฝœ์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์•ˆ์ „ํ•˜๊ณ  ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ๋‹ค.



3) HTTP ๋ฉ”์„œ๋“œ [์ฐธ๊ณ ]

  • HTTP ๋ฉ”์„œ๋“œโญ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ(Request)โšก๊ณผ ์‘๋‹ต(Response)โšก ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹

  • ์ฃผ์š” HTTP ๋ฉ”์„œ๋“œ

    • GET ๋ฐฉ์‹ : ํŠน์ • ๋ฆฌ์†Œ์Šค ์กฐํšŒ
      - ์ฃผ์†Œ์ฐฝ์— ์ง์ ‘ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ ๊ฑฐ๋‚˜ ๋งํฌ๋ฅผ ํด๋ฆญํ•ด์„œ ํ˜ธ์ถœ
      - ์ฃผ์†Œ์™€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค. ํŠน์ • ์ •๋ณด๋ฅผ ์กฐํšŒ. (body ๊ฐ€ ์—†๋‹ค.)
      - ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” ?์™€ &, = ๋“ฑ์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ํ†ตํ•ด์„œ ์ „๋‹ฌ ํ•œ๋‹ค.
      - GET /members/100?username=inpa&height=200
      - ์กฐํšŒ๋Š” POST๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ GET์„ ๊ถŒ์žฅ

    • POST ๋ฐฉ์‹ : ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ๋“ฑ๋ก์— ์‚ฌ์šฉ
      - ์ž…๋ ฅ ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ ํ›„์— '์ „์†ก'๊ณผ ๊ฐ™์€ ๋ฒ„ํŠผ ๋“ฑ์„ ํด๋ฆญ, ํ˜ธ์ถœ
      - ์ฃผ์†Œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹
      - ์›น ํ™”๋ฉด์„ ํ†ตํ•ด์„œ ์‹ค์ œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…์„ ํ•จ.

    • PUT ๋ฐฉ์‹ : ๋ชฉ์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒด(๋ฎ์–ด์“ฐ๊ธฐ), ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
      - ๋ชฉ์  ๋ฆฌ์†Œ์Šค ๋ชจ๋“  ํ˜„์žฌ ํ‘œ์‹œ๋ฅผ ์š”์ฒญ payload๋กœ ๋ฐ”๊พผ๋‹ค.
      - ๋ฉฑ๋“ฑ์„ฑ(Idempotent : ์—ฌ๋Ÿฌ ๋ฒˆ ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์„ฑ์งˆ)์„ ๊ฐ€์ง
      (GET, PUT, DELETE)

    • PATCH ๋ฐฉ์‹ : ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ(PUT์ด ์ „์ฒด ๋ณ€๊ฒฝ, PATCH๋Š” ์ผ๋ถ€ ๋ณ€๊ฒฝ)
      - ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„๋งŒ์„ ์ˆ˜์ •ํ•œ๋‹ค.

    • DELETE ๋ฐฉ์‹ : ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œ
  • ๊ธฐํƒ€ ๋ฉ”์„œ๋“œ

    • HEAD : GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„(body ๋ถ€๋ถ„)์„ ์ œ์™ธํ•˜๊ณ , ์ƒํƒœ ์ค„๊ณผ ํ—ค๋”๋งŒ ๋ฐ˜ํ™˜
    • OPTIONS : ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ†ต์‹  ๊ฐ€๋Šฅ ์˜ต์…˜(๋ฉ”์„œ๋“œ)์„ ์„ค๋ช…(์ฃผ๋กœ CORS์—์„œ ์‚ฌ์šฉ)
    • CONNECT : ๋Œ€์ƒ ์ž์›์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ„ฐ๋„์„ ์„ค์ •
    • TRACE : ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฐฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰
  • HTTP ๋ฉ”์„œ๋“œ์˜ ํŠน์„ฑ

    • ์•ˆ์ •์„ฑ(Safe) : ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ์†์„ฑ (GET, HEAD)
    • ๋ฉฑ๋“ฑ์„ฑ(Idempotent) : ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณด๋‚ด๋„ ํ•œ ๋ฒˆ ๋ณด๋‚ธ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ (GET, PUT, DELETE )
    • ์บ์‹œ ๊ฐ€๋Šฅ(Cacheable) : ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ (GET, HEAD)
      - POST, PATCH ๋„ ์บ์‹œ ๊ฐ€๋Šฅํ•˜๋‚˜, Message Body ์บ์‹œ ํ‚ค ๋ณต์žก์„ฑ ๋ฌธ์ œ๋กœ ์‚ฌ์šฉ X


4) HTTP ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ [์ฐธ๊ณ ]

  • HTTP ๋ฉ”์‹œ์ง€๋Š” โถstart-line ์‹œ์ž‘ ๋ผ์ธ โทheader ํ—ค๋” โธ empty line(๊ณต๋ฐฑ ๋ผ์ธ, CRLF) โน message body๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    • ๊ณต๋ฐฑ ๋ผ์ธ์€ HTTP ๋ฉ”์„ธ์ง€ ๊ฐ’ ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ธ์ด๋ฏ€๋กœ, ๋‹จ์ˆœํžˆ ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋„ฃ๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋ณด๋‚ผ ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๊ฐ€ ์—†๋‹ค๋ฉด ๊ณต๋ฐฑ๋งŒ ๋„ฃ๊ณ  ๋๋‚ด๋ฉด ๋œ๋‹ค.
      HTTP ์š”์ฒญ ์ข…๋ฅ˜์— ๋”ฐ๋ผ Message Body๊ฐ€ ํฌํ•จ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.
  • HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์™€ ์‘๋‹ต ๋ฉ”์‹œ์ง€ [์ถœ์ฒ˜: ์ธํŒŒ ๋ธ”๋กœ๊ทธ]

  • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ([F12])
    ์™ผ์ชฝ(232 requests)์€ ํ˜„์žฌ๊นŒ์ง€ ๋ช‡ ๋ฒˆ์ด๋‚˜ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ ํ•˜๋‚˜๋‹น ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.



5) HTTP์˜ ํŠน์ง• : ๋ฌด์ƒํƒœ์„ฑ(Stateless)์™€ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)

  • ๋ฌด์ƒํƒœ(Stateless) : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ ์š”์ฒญ์ด ์˜ค๋ฉด ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      ํ†ต์‹ ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ƒํƒœ ์ •๋ณด๋“ค์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์–ด ๋ณด๋‚ธ๋‹ค.
    • ์žฅ์  : ์„œ๋ฒ„ ์ƒํƒœ ์œ ์ง€์— ๋Œ€ํ•œ ๋ถ€ํ•˜๊ฐ€ ํ˜„์ €ํžˆ ์ ๋‹ค. / ์„œ๋ฒ„ ํ™•์žฅ์„ฑ ๋†’๋‹ค. (์Šค์ผ€์ผ ์•„์›ƒ)
      ์ˆ˜ํ‰ ํ™•์žฅ์— ์œ ๋ฆฌํ•˜๋‹ค.
    • ๋‹จ์  : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก (๋ฉ”๋ชจ๋ฆฌ) / ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ X
    • UDP์™€ HTTP๊ฐ€ Statelessํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

      ์ฐธ๊ณ  : ๋ฌด์ƒํƒœ์™€ ์ƒํƒœ ์œ ์ง€
    • ์ƒํƒœ ์œ ์ง€(Stateful) : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•œ๋‹ค.
      • ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ ๋“ฑ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.
      • Statefulํ•œ ํ”„๋กœํ† ์ฝœ : TCP์˜ 3-way handshaking
  • ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless) : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ Connection ์—ฐ๊ฒฐ์„ ์ง€์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    (ํ•˜๋‚˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•œ ํ›„์— ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•œ๋‹ค.)

    • 1์‹œ๊ฐ„๋™์•ˆ ์ˆ˜์ฒœ๋ช… ์ด์ƒ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ์ ๋‹ค.
      ์˜ˆ๋ฅผ๋“ค์–ด ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฒ€์ƒ‰ํŽ˜์ด์ง€์—์„œ ๊ฒ€์ƒ‰๋ฒ„ํŠผ๋งŒ ์—ฐํƒ€ํ•˜๋ฉด์„œ ์ด์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋“ฏ์ด ๋ง์ด๋‹ค.
    • ์žฅ์  : ์ด๋Ÿฌํ•œ ๋น„์—ฐ๊ฒฐ์„ฑ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•œ๊ณ„ : ๋‹จ๊ธฐ ์ปค๋„ฅ์…˜ - HTTP ์ดˆ๊ธฐ์—๋Š” ๋ชจ๋“  ์—ฐ๊ฒฐ, ์ข…๋ฃŒ์— TCP Handshake๊ฐ€ ๋ฐœ์ƒํ•จ.
    • ๊ทน๋ณต : HTTP ์ง€์† ์—ฐ๊ฒฐ(Persistent Connections) - ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€ ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ํ•œ ๋‹ค์Œ ํ•„์š”ํ•œ ์ž์›์„ ์š”์ฒญ/์‘๋‹ต์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค. ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋” ์œ ์ง€ํ•จ์œผ๋กœ์จ, ํ•„์š”ํ•œ ์ž์›๋“ค์„ ๋ชจ๋‘ ๋‹ค์šด ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์š”์ฒญ/์‘๋‹ต์ด ๋ฐ˜๋ณต๋œ ๋’ค ์ข…๋ฃŒ๋จ.


์ž๋ฐ” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ์„œ๋ฒ„ ์ชฝ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ

    • ๊ณ ๋ ค์ :

    1. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ(Request)์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    2. ์„œ๋ฒ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
    3. ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
    4. ๋ถ„์‚ฐ ํ™˜๊ฒฝ์ด๋‚˜ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์€?
  • JavaEE๋ผ๋Š” ๊ธฐ์ˆ  ์ŠคํŽ™์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ๊ณ ๋ ค์  ๋ณด์™„

- 1) ์„œ๋ธ”๋ฆฟ(Servlet) ๊ธฐ์ˆ 

  • ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ  : ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” API

    • ์„œ๋ธ”๋ฆฟ์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„œ๋ธ”๋ฆฟ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.[์ถœ์ฒ˜: ์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ 35p]
    • ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐ™์€ ์›๋ฆฌ์ด์ง€๋งŒ,
      JSP๋Š” HTML์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— '์„œ๋ธ”๋ฆฟ์œผ๋กœ๋Š” ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•œ ์ฒ˜๋ฆฌ, JSP๋กœ๋Š” ํ™”๋ฉด๊ฐœ๋ฐœ'๊ณผ ๊ฐ™์ด ์—ญํ• ์„ ๋ถ„๋‹ดํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

    • ์„œ๋ธ”๋ฆฟ์˜ ์‹คํ–‰์€ ํ†ฐ์บฃ๊ณผ ๊ฐ™์ด ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ๋ฐ
      ์ด๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)โญ๋ผ๊ณ  ํ•˜๋ฉฐ ๊ณผ๊ฑฐ์—๋Š” ์„œ๋ธ”๋ฆฟ ์—”์ง„(Servlet Engine)์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ์›น ์ปจํ…Œ์ด๋„ˆ(Web Container): ์›น ์ƒ์˜ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ •์ ์ธ ํŽ˜์ด์ง€๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ
    (๋™์  ๋ฐ์ดํ„ฐ๋“ค์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜์—ฌ ์›น ์„œ๋ฒ„์— ์ •์ ์ธ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด์ค€๋‹ค.)

    • ์›น์ปจํ…Œ์ด๋„ˆ์˜ ์ž‘๋™

      1) ํด๋ผ์ด์–ธํŠธ๋Š” ์›น์„œ๋ฒ„๋กœ request(์š”์ฒญ)์„ ๋ณด๋‚ธ๋‹ค.
      2) ์„œ๋ธ”๋ฆฟ์„ ํฌํ•จํ•˜๋Š” WAS๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
      3) ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ๊ฐ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
      4) ์„œ๋ธ”๋ฆฟ ๋ฉ”์„œ๋“œ๊ฐ€ ๋กœ๋“œ๋œ๋‹ค.
      5) ์„œ๋ธ”๋ฆฟ์€ ์ปจํ…Œ์ด๋„ˆ์— ๊ด€๋ จ response(์‘๋‹ต)์„ ๋„˜๊ฒจ์ค€๋‹ค.
      6) ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•œ๋‹ค. ์„œ๋ฒ„๋Š” ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋Š” ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์ด๋ฏ€๋กœ, ์ผ๋ฐ˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ์ด ๋‹ค๋ฅด๋‹ค.

    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ์ฃผ์ฒด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์˜ ๊ด€๋ฆฌ ์ž์ฒด๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์ดํ•ด์„œ ๊ด€๋ฆฌ๋œ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ/JSP ์ฝ”๋“œ ๊ฐœ๋ฐœ์€ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฐ” API์™€ ๋”๋ถˆ์–ด ์„œ๋ธ”๋ฆฟ API๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
      (๐Ÿค” Spring ์‚ผ๊ฐํ˜• ์ค‘ POJO์˜ ์›์น™์„ ์–ด๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€?)
  • import์˜ ๊ฒฝ์šฐ javax๋กœ ์‹œ์ž‘ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋˜ํ•œ, HelloServlet ํด๋ž˜์Šค์˜ ์„ ์–ธ์ด HttpServlet์ด๋ผ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
    ๋‚ด๋ถ€์—๋Š” init(), doGet(), destroy()๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์„œ๋ธ”๋ฆฟ API์—์„œ ์ง€์ •๋œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

  • init(), doGet(), destroy()์˜ ํ˜ธ์ถœ ์ฃผ์ฒด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ํ˜ธ์ถœํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์„œ๋ธ”๋ฆฟ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด(life cycle)์ด๋ผ๊ณ  ํ•œ๋‹ค.

- 2) JSP ๊ธฐ์ˆ 

  • JSP๋Š” ์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€(JavaServer Pages)์˜ ์•ฝ์ž๋กœ์„œ, ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ๊ณผ ๋™์ผํ•˜๊ฒŒ ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
    โœ”๏ธ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋Š” ๊ธฐ๋Šฅ์˜ ์ฐจ์ด๋Š” ์—†๊ณ  ์—ญํ• ์˜ ์ฐจ์ด๋งŒ ์กด์žฌํ•œ๋‹ค.

    1. Servlet
    โฆ Java ์ฝ”๋“œ ์•ˆ์— HTML ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    โฆ Data Processing(Controller)์— ์ข‹๋‹ค.
    โฆ ์ฆ‰ DB์™€์˜ ํ†ต์‹ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ˜ธ์ถœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ํ™•์ธํ•˜๋Š” ์ž‘์—… ๋“ฑ์— ์œ ์šฉํ•˜๋‹ค.
    โฆ Servlet์ด ์ˆ˜์ •๋œ ๊ฒฝ์šฐ Java ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ ํ›„ ๋™์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ ํ›„ ์žฌ๋ฐฐํฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. (๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜)

    2. JSP
    โฆ HTML ์ฝ”๋“œ ์•ˆ์— Java ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    โฆ HTML์„ ์ž‘์„ฑํ•˜๊ธฐ ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— View๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ข‹๋‹ค.
    โฆ JSP๊ฐ€ ์ˆ˜์ •๋œ ๊ฒฝ์šฐ ์žฌ๋ฐฐํฌํ•  ํ•„์š”๊ฐ€ ์—†์ด WAS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (์‰ฌ์šด ๋ฐฐํฌ)

  • JSP ์ฝ”๋“œ๋Š” ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์•„๋‹˜์—๋„ ์„œ๋ธ”๋ฆฟ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” JSP ํŒŒ์ผ ์—ญ์‹œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด์„œ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    JSP ํŒŒ์ผ์€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ์ž๋ฐ” ํŒŒ์ผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ์ด๋ฅผ ์ปดํŒŒ์ผํ•ด์„œ class ํŒŒ์ผ๋กœ๋„ ๋งŒ๋“ค์–ด ์ง„๋‹ค.

    C:\Users\์‚ฌ์šฉ์ž๋ช…\AppData\Local\JetBrains\IntelliJIdea2022.3\tomcat\59e36525-b4fa-443c-8544-1defaa71be21\work\Catalina\localhost\ROOT\org\apache\jsp

  • JSP๋Š” ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์ด์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €์— ๋ณด๋‚ด๋Š” HTML ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐ ์ข€ ๋” ํŠนํ™”๋œ ๊ธฐ์ˆ ์ด๋‹ค.

    • ์„œ๋ธ”๋ฆฟ/JSP ๋ชจ๋‘ Java EE ์ŠคํŽ™์˜ ์ผ๋ถ€์ด๋ฉฐ, ์‹คํ–‰์„ ์œ„ํ•ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ํ•„์š”
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ/JSP ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌ
    • JSP๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋จ.
    • JSP๋Š” HTML ๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ ์ถ”๊ฐ€ / ์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ” ์ฝ”๋“œ ์•ˆ์— HTML ์ฝ”๋“œ ์ถ”๊ฐ€

์ฐธ๊ณ  ์ž๋ฃŒ



๐Ÿ JSP ์ด์šฉํ•ด์„œ GET/POST ์ฒ˜๋ฆฌํ•˜๊ธฐ

JSP ์œ„์ฃผ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฌธ์ œ์  ์‚ดํŽด๋ณด๊ธฐ

GET ๋ฐฉ์‹์€ ์ž…๋ ฅ๊ณผ ์กฐํšŒ

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” GET ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

    • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ
    • ์‚ฌ์šฉ์ž ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด
  • webapp[/calc/input.jsp] ์ƒ์„ฑ

1. <form> ํƒœ๊ทธ์™€ POST ๋ฐฉ์‹

  • input.jsp : form ํƒœ๊ทธ์™€ input ํƒœ๊ทธ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ ํ™”๋ฉด ๊ตฌ์„ฑ
<body>
<form>
    <input type="number" name="num1"><br/>
    <input type="number" name="num2">
    <button type="submit">SEND</button>
</form>
</body>
  • form ํƒœ๊ทธ : ์ž…๋ ฅ ์–‘์‹. form์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๋‚ด์šฉ๋“ค์„ ์ „์†ก
  • input ํƒœ๊ทธ : ๋ฌธ์ž, ์ˆซ์ž ์ž…๋ ฅ (type์ด๋ผ๋Š” ์†์„ฑ ์ด์šฉ)
  • button ํƒœ๊ทธ : ํ™”๋ฉด์— ๋ฒ„ํŠผ ์ถœ๋ ฅ. (type=submit ์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด formํƒœ๊ทธ ๋‚ด์šฉ ์ „์†ก ๊ฐ€๋Šฅ)
  • ์ฃผ์†Œ์ฐฝ์— /calc/input.jsp ์ž…๋ ฅ โžก๏ธ <form>์˜ action ์†์„ฑ์ด ์—†์œผ๋ฏ€๋กœ ์ž๊ธฐ ์ž์‹  ํ˜ธ์ถœ

    (SEND๋ฒ„ํŠผ์˜ ์†์„ฑ์ด type = "button" ์œผ๋กœ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ input ํƒœ๊ทธ์˜ name ์†์„ฑ๊ฐ’๊ณผ ํ•จ๊ป˜ ๋ฌธ์ž์—ด์˜ ํ˜•ํƒœ๋กœ ์ „์†กํ•˜๊ฒŒ๋จ)

- ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง(query string)๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ(parameter)

  • ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์ด๋ž€?
  • query string์€ ์งˆ์˜ ๋ฌธ์ž์—ด๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ๋ฌผ์–ด๋ณด๋Š” ์šฉ๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์€ 'ํ‚ค=๊ฐ’' ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ 'ํ‚ค=๊ฐ’' ํ˜•ํƒœ๋ฅผ ํ”ํžˆ ํŒŒ๋ผ๋ฏธํ„ฐ(parameter)์ด๋ฆ„๊ณผ ๊ฐ’์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ? ์ดํ›„๋กœ ์‹œ์ž‘๋˜๋Š” ๋ถ€๋ถ„์ด ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์ด๋ฉฐ, &์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • ์ฐธ๊ณ  : ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ - ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง VS Path Variable

POST ๋ฐฉ์‹์€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์šฉ๋„

  • <form>ํƒœ๊ทธ๋Š” action๊ณผ method ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ, ์–‘์‹์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์–ด๋””๋กœ ์ „์†กํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    action = "calcResult.jsp"๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  method๋Š” post ๋ฐฉ์‹์œผ๋กœ ํ•˜๊ฒ ๋‹ค๊ณ  ๋ณ€๊ฒฝ

    ์ „์†ก์„ ๋ˆ„๋ฅด๋ฉด 404(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ URL ์š”์ฒญ์„ ํ•˜์˜€์Œ) ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    ๋‹น์—ฐํ•˜๋‹ค, ํ˜„์žฌ calcResult.jsp๋Š” ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

  • ๐ŸŒŸ์ฃผ์†Œ์ฐฝ์— (์ฃผ์†Œ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ) ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” GET๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ,
    POST ๋ฐฉ์‹์€ ์ฃผ์†Œ์™€ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ „์†กํ•œ๋‹ค.GET ์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ํ˜•ํƒœ๋กœ ์ฃผ์†Œ์ฐฝ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
    POST๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ๋งŒ ์ž…๋ ฅ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • โญ POST ๋ฐฉ์‹์€ '๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ' ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    GET ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ์ •๋ณด์˜ ํ™•์‚ฐ์ด ๋ชฉ์ ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜์ง€ ์•Š๊ณ , URL๊ณผ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค.

  • calcResult.jsp ์ž‘์„ฑ (input.jsp์—์„œ ์ „๋‹ฌ๋˜๋Š” num1, num2 ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํ™”๋ฉด)

- EL(Expression Language) '${ }'

  • ${}๋กœ ์ž‘์„ฑ๋œ ๋ถ€๋ถ„์€ JSP์—์„œ ์‚ฌ์šฉํ•˜๋Š” EL(Expression Language)โญ์ด๋‹ค.
    ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์šฉ๋„๋กœ ์›น์—์„œ System.out.println๊ณผ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
    • ์ฐธ๊ณ  : JSP - EL ํ‘œํ˜„์‹ ๋ฌธ๋ฒ•๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    • ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    • param์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ง€์ •๋œ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ ์š”์ฒญ์— ์ „๋‹ฌ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.(${param.num1}, ${param.num2})

์›น์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ชจ๋‘ ๋ฌธ์ž์—ด

  • JSP๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋‹จ์ˆœํžˆ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ๋Š” ํŽธ๋ฆฌํ•˜๋‹ค.
    BUT ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ๋ฐ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
    โœ”๏ธ JSP์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    EL ์•ˆ์—์„œ Integer.parseInt๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด param.num[1|2]๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ์–ด ๊ณ„์‚ฐ ๊ฐ’ ์ถœ๋ ฅ

JSP์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•

  • โถ JSP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ GET/POST ๋ฐฉ์‹์˜ ํ˜ธ์ถœ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ๋•Œ๋ฌธ์— POST ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” calcResult.jsp๋ฅผ GET ๋ฐฉ์‹์œผ๋กœ๋„ ์–ผ๋งˆ๋“ ์ง€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.(๐Ÿง ๋‹จ, GET ๋ฐฉ์‹์œผ๋กœ ์ฃผ์†Œ์ฐฝ์— ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด Param.num1์ด ๋นˆ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— Integer.parseInt๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธด ํ•œ๋‹ค.)
  • โท ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
    JSP ํŒŒ์ผ๋ช…์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ JSP ํŒŒ์ผ์„ ๊ต์ฒดํ–ˆ์„ ๊ฒฝ์šฐ ์ด์ „ ์ฃผ์†Œ๋กœ ๊ต์ฒด๋œ ์ฃผ์†Œ๋กœ์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋‹ค์‹œ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

  • ์ตœ๊ทผ JSP ์šฉ๋„๋Š” ์ œํ•œ์ ์ด๋‹ค.

    • JSP์—์„œ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์ด๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. - JSP ๋Œ€์‹  ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ
    • JSP๋Š” ์ž…๋ ฅ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ง์ ‘ JSP ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์„œ๋ธ”๋ฆฟ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด์„œ JSP๋ฅผ ๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ
  • โญ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ์žฅํ•œ ๋ฐฉ์‹์ด '์›น MVC' ๋ฐฉ์‹์œผ๋กœ JSP๋Š” ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅํ•˜๊ณ , ์ฒ˜๋ฆฌ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™”ํ–ˆ๋‹ค.


๐Ÿšฉ ์ถœ์ฒ˜ | ์ฐธ๊ณ  ์ž๋ฃŒ

profile
9์—์„œ 0์œผ๋กœ, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๋ธ”๋กœ๊ทธ

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