[TIL]230305 - Servlet

insightp25ยท2023๋…„ 3์›” 5์ผ

๐Ÿ’ก์„œ๋ธ”๋ฆฟ์€ ๋™์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. HTTP ํŒŒ์‹ฑ ๋ฐ ์ฒ˜๋ฆฌ, TCP/IP์™€ ์†Œ์ผ“ ์—ฐ๊ฒฐ ๋ฐ ์ข…๋ฃŒ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ง€์› ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๋“ค์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.



Servlet์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

์„œ๋ธ”๋ฆฟ์ด ์ฒ˜์Œ ๋“ฑ์žฅํ•œ 1997๋…„์—๋Š” ์ •์ ์ธ ์›นํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฃผ๋ฅ˜์˜€๋‹ค. ์›น ์„œ๋ฒ„(Nginx, Apache ๋“ฑ)๋Š” HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์˜€์œผ๋ฉฐ ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ฃผ ๊ธฐ๋Šฅ์ด์—ˆ๋‹ค.

๊ทธ ํ›„ ๊ธฐ์กด์˜ ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์— ๋”ํ•˜์—ฌ, ๋™์  HTML, HTTP API ํ†ต์‹  ๋“ฑ์„ ์ง€์›ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(์ดํ•˜ WAS)๊ฐ€ ๋“ฑ์žฅ(Tomcat ๋“ฑ)ํ•˜์˜€๋‹ค.

WAS ๋˜ํ•œ ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ

  • ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์ฑ…์ž„์ ธ ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ์šฐ๋ ค๊ฐ€ ์žˆ๊ณ ,
  • ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ˆ˜ํ–‰์— ์ง€์žฅ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ดํ›„ ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ด์™ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊ฐ™์€ ๋™์ ์ธ ์ฒ˜๋ฆฌ๋Š” WAS๊ฐ€ ์ „๋‹ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐœ์ „ํ•ด์™”๋‹ค.

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

Servlet ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ๊ฐœ๋ฐœ์— ํž˜์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.


Servlet Container์˜ ๊ธฐ๋Šฅ

์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS๋ฅผ Servlet Container๋ผ๊ณ  ์ง€์นญํ•œ๋‹ค. Servlet์˜ ํ•ต์‹ฌ ๋™์ž‘์€ Servlet Container์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค. Servlet Container๋Š” HTTP ์š”์ฒญ์‹œ

  • Request, Response ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ 
  • Servlet ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ
  • ๊ฐœ๋ฐœ์ž๋Š” Request ๊ฐ์ฒด์—์„œ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , ๋˜ํ•œ Response ๊ฐ์ฒด์— ์‰ฝ๊ฒŒ HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉฐ
  • Response ๊ฐ์ฒด์— ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋‚˜์•„๊ฐ€

  • Servlet ๊ฐ์ฒด ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒ๊นŒ์ง€์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ(Servlet ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ),
  • Front Controller ํŒจํ„ด๊ณผ ์Šค๋ ˆ๋“œ ํ’€ ๋“ฑ์„ ์ง€์›ํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ๋•๋Š”๋‹ค.


์Šค๋ ˆ๋“œ ํ’€

Servlet Container๋Š” ํšจ์œจ์ ์ธ ๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์Šค๋ ˆ๋“œ ํ’€์„ ํ™œ์šฉํ•œ๋‹ค. ์ด ๋•Œ ์Šค๋ ˆ๋“œ ํ’€์˜ ๊ฐœ์ˆ˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

  • ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ • ์‹œ: ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋Š” ์—ฌ์œ ๋กญ์ง€๋งŒ ๊ธˆ๋ฐฉ ์‘๋‹ต ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ ,
  • ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•  ์‹œ: ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์œผ๋ฉด CPU, ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์  ์ดˆ๊ณผ๋กœ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ Servlet Container๊ฐ€ ์ฒ˜๋ฆฌํ•ด์คŒ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ด€๋ จ ์ฝ”๋“œ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์†Œ์Šค ์ฝ”๋“œ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


์ฃผ์˜์‚ฌํ•ญ

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด(Servlet, Spring bean ๋“ฑ)๋ฅผ ํŠนํžˆ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„์‹œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋“ค์ด ์ œ 3์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” ๋“ฑ ์น˜๋ช…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.



profile
backend, data-streaming, AI

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