Servlet โ˜•

Java

๐Ÿซ™ Servlet์ด๋ž€

์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์„œ๋ฒ„์‚ฌ์ด๋“œ ์–ธ์–ด์ธ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.

์˜ค๋ž˜์ „ ์›น์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์ด ์˜ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ผ์ผ์ด ์ •์ ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด์ค˜์•ผํ•˜๋Š” ๋…ธ์˜ค์˜ค๋ ฅ์ด ํ•„์š”ํ•œ ์ž‘์—…๋“ค์ด ์š”๊ตฌ๋˜์—ˆ๋‹ค. ํŠนํžˆ๋‚˜ ์ผ์ผ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๋„ ์ฝ”๋“œ ํ•œ์ค„ ํ•œ์ค„๋กœ ์ณ์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์›Œ์ฃผ๊ฑฐ๋‚˜ ํ•˜๋Š” ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…๋“ค์ด ํ•„์š”ํ–ˆ๋‹ค. ๐Ÿคช

ํ•˜์ง€๋งŒ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ ์  ๋ฐœ์ „ํ•˜๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์•Œ๋งž๊ฒŒ ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฆ‰ ์œ ์ €์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค!

HTTP Message

์œ„์˜ ์‚ฌ์ง„์€ HTTP ์š”์ฒญ(Request)์™€ ์‘๋‹ต(Response) ๋ฉ”์„ธ์ง€์ด๋‹ค. ๋”ฑ ๋ด๋„ ๊ท€์ฐฎ์•„ ๋ณด์ด๊ณ  ์š”์ฒญ๋ฐ›๊ธฐ ์‹ซ๊ฒŒ ์ƒ๊ธฐ์ง€ ์•Š์•˜๋‚˜?? ๐Ÿ˜จ

๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผ์ด ์ด๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๊ธด ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ท€์ฐฎ์€ ์ผ์„ ์„œ๋ธ”๋ฆฟ์ด ๋Œ€์‹  ํ•ด์ค€๋‹ค!!

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์„œ๋ธ”๋ฆฟ์ด๋ž€ ์ข‹์€ ๋…€์„์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์˜ค๋กœ์ง€ ๋กœ์ง์„ ์งœ๋Š”๋ฐ์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.


Servlet

์œ„ ์‚ฌ์ง„์€ /HelloWorld์˜ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. @WebServlet(โ€œ/HelloWorldโ€)๋ผ๊ณ  ์ ํ˜€์žˆ๋Š” ๋ถ€๋ถ„์ด url๊ณผ Servlet์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž.

๊ทธ๋ฆฌ๊ณ  HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” HttpServletRequest์™€ ์‘๋‹ต ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HttpServletResponse๊ฐ€ ์žˆ๋‹ค. ์•„ ๋ฌผ๋ก  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ HTTP ํ†ต์‹ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜จ๊ฑด์ง€์— ๋”ฐ๋ผ์„œ ์‹คํ–‰๋˜๋Š” doGet ํ˜น์€ doPost๊ฐ€ ์‹คํ–‰๋˜๊ธดํ•˜์ง€๋งŒ ๋ง์ด๋‹ค. ๐Ÿ˜…

๋ฐ‘์— ์‚ฌ์ง„์€ Servlet๊ณผ Servlet Container์˜ ๊ตฌ๋™ ์›๋ฆฌ์ด๋‹ค.

Servlet Container

โš™๏ธ Servlet์˜ ๋™์ž‘ ๋ฐฉ์‹

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น url(์˜ˆ์‹œ : localhost://8080/helloServlet)๋กœ ์ ‘์†์„ ํ•˜๋ฉด HTTP Request๊ฐ€ Servlet Container๋กœ ์ „์†ก

  • ํด๋ผ์ด์–ธํŠธ๋‹จ์˜ ์š”์ฒญ์„ ์ „์†ก๋ฐ›์€ Servlet Container๋Š” HttpRequest, HttpResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ url์ด ์–ด๋Š ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” web.xml์„ ํ†ตํ•ด ์ฐพ๊ฒŒ ๋œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์˜ GET, POST ๋‘˜ ์ค‘ ์–ด๋–ค REST API๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๊ฑด์ง€ doGet(), doPost()์ด ํ˜ธ์ถœ๋œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ›์€ ์ •๋ณด๋“ค์„ ์„œ๋ธ”๋ฆฟ์—์„œ 1์ฐจ ๊ฐ€๊ณต ํ›„ Bean ํ˜น์€ JSP๋กœ ์Šค์ฝ”ํ”„๋ฅผ ํ†ตํ•ด ๋„˜๊ฒจ์ค€๋‹ค. Forwarding์ด๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค.

  • Bean์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์ •๋ณด์ค‘์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜ฌ ์ •๋ณด๋“ค์ด ์žˆ์œผ๋ฉด 2์ฐจ๋กœ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•œ๋‹ค.

  • ์ตœ์ข…์ ์œผ๋กœ๋Š” View๋ฅผ ๋งก๊ณ  ์žˆ๋Š” JSP ๋“ฑ์˜ ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ ํ›„ HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ์‘๋‹ต์„ ๋ฐ›์•˜์œผ๋ฉด HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธํ•œ๋‹ค.

โ™ป๏ธ Servlet์˜ ๋ผ์ดํ”„์‚ฌ์ดํด

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋‹ค๋ฉด init() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ ์žฌ

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋”ฐ๋ผ Service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด doGet(), doPost()๋กœ ๋‚˜๋ˆ ์ง€๊ณ  HttpServletRequest, HttpServletResponse์— ์˜ํ•ด request์™€ response ๊ฐ์ฒด๊ฐ€ ์ œ๊ณต๋œ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ ์„œ๋ธ”๋ฆฟ์— ์ข…๋ฃŒ ์š”์ฒญ์„ ํ•˜๋ฉด destroy() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ข…๋ฃŒ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋กœ์ง์ด ์žˆ๋‹ค๋ฉด destroy() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“ฆ Servlet Container

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šค์Šค๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์›น ์„œ๋ฒ„์™€ ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค. ํ†ฐ์บฃ์ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค.

โš ๏ธ Servlet Container์˜ ์—ญํ•  ๋ฐ ํŠน์ง•

  • ํ†ฐ์บฃ์ฒ˜๋Ÿผ ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS(Web Application Server)๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒ๊นŒ์ง€ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ
  • ๋™์‹œ ์š”์ฒญ์„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ง€์› ๊ฐ€๋Šฅ