๐Ÿ“˜ Web/Network, Server

[Web] Servlet(์„œ๋ธ”๋ฆฟ)

a n u e 2022. 3. 16. 21:18
๋ชฉ์ฐจ
 Servlet(์„œ๋ธ”๋ฆฟ)์ด๋ž€
 Servlet Container?
 Servlet์˜ ๋™์ž‘๋ฐฉ์‹
 JSP์™€์˜ ์œ ์‚ฌ์„ฑ?

Servlet(์„œ๋ธ”๋ฆฟ)์ด๋ž€?

 ๋™์  ์›น ํŽ˜์ด์ง€(Dynamic Web Page)๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ Web Application ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ . ์›น ์„œ๋ฒ„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ JAVA class์˜ ์ผ์ข…. ํด๋ผ์ด์–ธํŠธ์˜ HTTP request์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ responseํ•˜๋Š” Servlet ํด๋ž˜์Šค ๊ตฌํ˜„ ๊ทœ์น™์„ ์ง€ํ‚จ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ.

 

  • ํด๋ผ์ด์–ธํŠธ์˜ Request์— ๋Œ€ํ•ด ๋™์ ์œผ๋กœ ์ž‘๋™
  • HTML์„ ์ด์šฉํ•˜์—ฌ Response
  • JAVA์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ž‘
  • MVC์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• 
  • javax.servlet.http.HttpServlet ์„ ์ƒ์†๋ฐ›๋Š”๋‹ค

Servlet Container?

์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ์š”์ฒญ์— ๋”ฐ๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋“ฑ ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ธ”๋ฆฟ ์šด์˜ํ™˜๊ฒฝ. ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹  ๋‚ด์žฅ. ๋Œ€ํ‘œ์ ์œผ๋กœ apache tomcat.


์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• 
  • ํ†ต์‹  ์ง€์›

  ํด๋ผ์ด์–ธํŠธ์˜ Request๋ฅผ ๋ฐ›๊ณ , ์ฒ˜๋ฆฌ Response๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ์„œ๋ฒ„์™€์˜ ์†Œ์ผ“์„ ๋งŒ๋“ค์–ด ํ†ต์‹ ์„ ํ•ด์ค€๋‹ค.

 

์†Œ์ผ“์ด๋ž€?
๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋ฅผ ํŠน์ • ํฌํŠธ๋ฅผ ํ†ตํ•ด ์–‘ ๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด

 

  • ์ƒ๋ช…์ฃผ๊ธฐ(Life Cycle) ๊ด€๋ฆฌ

 ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€๋™๋˜๋Š” ์ˆœ๊ฐ„, ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ํ™”. ์ดˆ๊ธฐํ™”(init) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค, ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ๋™์ž‘. ๊ทธ๋ฆฌ๊ณ  ์ƒ๋ช…์ด ๋‹คํ•˜๋ฉด GC(๊ฐ€๋น„์ง€์ปฌ๋ ‰์…˜)์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

 ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ๋•Œ ๋งˆ๋‹ค, ์ƒˆ๋กœ์šด ์ž๋ฐ” ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฌ๋Ÿฌ Request๊ฐ€ ๋“ค์–ด์™€๋„ ๋™์‹œ๋‹ค๋ฐœ์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. HTTP ์„œ๋น„์Šค๋ฅผ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด, ์Šค๋ ˆ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์†Œ๋ฉธํ•œ๋‹ค.

 

  • ๋ณด์•ˆ๊ด€๋ฆฌ

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์žฅ์ 
  • ์ž๋ฐ” ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ์ž๋ฐ” API ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์šด์˜์ฒด์ œ๋‚˜ ํ•˜๋“œ์›จ์–ด์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  • ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ํšจ์œจ์  ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ์˜ ์—ญํ•  ๋ถ„๋‹ด > ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์˜ ํ™•์žฅ์ด ์šฉ์ดํ•˜๋‹ค.

Servlet์˜ ๋™์ž‘๋ฐฉ์‹

1. Servlet Request, Servlet Response ๊ฐ์ฒด ์ƒ์„ฑ

- WAS๊ฐ€ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ์ฆ‰ ์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์ž…๋ ฅํ•˜๋ฉด HTTP request๊ฐ€ Servlet Container๋กœ ์ „์†ก.

- HttpServletRequest, HttpServletResponse(๋นˆ ๊ฐ์ฒด) ๊ฐ์ฒด ์ƒ์„ฑ. ์ƒ์„ฑ๋œ HttpServletRequest์™€ HttpServletResponse(๋นˆ ๊ฐ์ฒด)์„ ์„œ๋ธ”๋ฆฟ์— ์ „๋‹ฌ.

HttpServletRequest
 - Http ํ”„๋กœํ† ์ฝœ์˜ request ์ •๋ณด๋ฅผ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•จ
 - Header, Parameter, Cookie, URI, URL ๋“ฑ์˜ ์ •๋ณด ์ฝ์–ด๋“ค์ด๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค์ด๋‹ค.
 - Body์˜ Stream์„ ์ฝ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
HttpServletResponse
 - Content Type, ์‘๋‹ต ์ฝ”๋“œ, ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•จ

 

2. ๋งคํ•‘ํ•  Servlet ์ฐพ๋Š”๋‹ค. 

 web.xml ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ URL์ด ์–ด๋А ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์ฐพ๋Š”๋‹ค.

 

3. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์กด์žฌ ์œ ๋ฌด ํ™•์ธ. init() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋”ฉ

- ์ตœ์ดˆ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ, init() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜์Œ ์š”์ฒญ๋  ๋•Œ, ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ.

 

4. Servlet Container์— thread ์ƒ์„ฑ ํ›„, service ์‹คํ–‰

- ํด๋ผ์ด์–ธํŠธ์˜ GET/POST ์š”์ฒญ์— ๋”ฐ๋ผ doGet(), doPost() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ์ˆ˜ํ–‰

- doGet(), doPost() ๋ฉ”์„œ๋“œ๋Š” ๋™์  ํŽ˜์ด์ง€ ์ƒ์„ฑ ํ›„, HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

 

5. ์‘๋‹ต ์ฒ˜๋ฆฌ ํ›„, distory() ๋ฉ”์„œ๋“œ ์‹คํ–‰

- HttpServletRequest, HttpServletResponse ๊ฐ์ฒด ์†Œ๋ฉธ.


Servlet ์ฝ”๋“œ ์˜ˆ์‹œ

 

 


JSP์™€์˜ ์œ ์‚ฌ์„ฑ?

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

- ์„œ๋ธ”๋ฆฟ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑ๋œ ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ์ด๋‹ค(.java file). ์ด์— ๋ฐ˜ํ•˜์—ฌ, JSP๋Š” ์ž๋ฐ”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Server side script ์–ธ์–ด์ด๋‹ค. ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์œผ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ” ์ฝ”๋“œ ์•ˆ์— HTML ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ , JSP๋Š” HTML์ฝ”๋“œ ์•ˆ์— ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.  - ์„œ๋ธ”๋ฆฟ์€ ์ˆ˜์ •๋˜์–ด์ง€๋Š” ๊ฒฝ์šฐ, ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. JSP๋Š” HTML์ž‘์„ฑ ์‹œ ์œ ์šฉํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. JSP๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒฝ์šฐ ์žฌ๋ฐฐํฌ ํ•„์š” ์—†์ด WAS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.