Servlet

img

Servlet์€ ์œ„ ์ดˆ๋ก์ƒ‰ ์ƒ์ž์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋‹ค ์ž๋™ํ™” ํ•ด์ค€๋‹ค.

  • ๋™์  ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋™์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ณ , ์‘๋‹ต์€ html์„ ์ด์šฉ.

  • java thread์ด์šฉํ•˜์—ฌ ๋™์ž‘(๊ฐ€์žฅ ํฐ ๊ฐ•์ )

    • thread๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค.

  • MVCํŒจํ„ด์—์„œ Controller๋กœ ์ด์šฉ๋จ.

Servlet ๊ธฐ๋ณธ ๊ตฌํ˜„

Servlet Class๋Š” HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Servlet ์ธํ„ฐํŽ˜์ด์Šค์™€ GenericServlet, HttpServlet์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Servlet์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ Servlet Container๊ฐ€ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค. Servlet์— ์˜ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ Servlet ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ˜ธ์ถœ๋˜๊ณ  ์‚ฌ๋ผ์ง„๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ๊ฐ์ฒด๋“ค์ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์„ IoC(Inversion of Control)๋ผ๊ณ  ํ•œ๋‹ค.

  • @WebServlet : ์„œ๋ธ”๋ฆฟ ์–ด๋…ธํ…Œ์ด์…˜

    • name: ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„

    • urlPatterns: url ๋งคํ•‘

HTTP ์š”์ฒญ์„ ํ†ตํ•ด ๋งคํ•‘๋œ url์ด ํ˜ธ์ถœ๋˜๋ฉด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค์Œ ๋ฉ”์„œ๋“œ(protected void service(HttpServletRequest request, HttpServletResponse response))๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์š”์ฒญ / ์‘๋‹ต ์ฒ˜๋ฆฌ

์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ์ฒด ๋ฐ ์‘๋‹ต ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋ฅผ Tomcat์—์„œ ๋ฐ›๋Š”๋‹ค.

HttpServletRequest

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ์ฒด

HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ํŒŒ์‹ฑํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ๋งค์šฐ ๋ถˆํŽธํ•  ๊ฒƒ์ด๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž ๋Œ€์‹ ์— HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HttpServletRequest ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์ œ๊ณตํ•ด์ค€๋‹ค.

  • HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€

    • START LINE

      • HTTP ๋ฉ”์†Œ๋“œ

      • URL

      • ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง

      • ์Šคํ‚ค๋งˆ, ํ”„๋กœํ† ์ฝœ

    • ํ—ค๋”

    • ๋ฐ”๋””

      • form ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹ ์กฐํšŒ

      • message body ๋ฐ์ดํ„ฐ ์ง์ ‘ ์กฐํšŒ

  • ์ž„์‹œ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ

    • ํ•ด๋‹น HTTP ์š”์ฒญ์ด ์‹œ์ž‘๋ถ€ํ„ฐ ๋๋‚ ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ

    • ์ €์žฅ : request.setAttribute(name, value)

    • ์กฐํšŒ: request.getAttribute(name)

  • ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

    • request.getSession(create: true)

HttpServletRequest ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋“ค์„ ์กฐํšŒํ•ด๋ณด๋Š” ์˜ˆ์ œ์ด๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ

  • GET : ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

    • url?username=hello&age=30

    • ๋ฉ”์„ธ์ง€ ๋ฐ”๋”” ์—†์ด url์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ์ „๋‹ฌ

    • ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ํŽ˜์ด์ง•๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

    ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์ด ํ•œ๊ฐœ์ธ๋ฐ, ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋„˜์–ด์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” request.getParameterValues ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ค‘๋ณต๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, request.getParameter ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์ค‘ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    ์—ฌ๊ธฐ์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, content-type์ด ์—†๋‹ค.

  • POST : HTML-form ๋ฐฉ์‹

    • content-type: application/x-www-form-urlencoded

    • ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ(username=hello&age=30)

    • ํšŒ์›๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, HTML form ์‚ฌ์šฉ

    form ์ „์†ก์œผ๋กœ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์— input์— ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    request.getParameter() ๋Š” GET๊ณผ POST ํ˜•์‹ ๋‘๊ฐœ ๋‹ค ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. POST HTML form ํ˜•์‹์€ HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ๋ณด๋‚ด๊ธฐ๋•Œ๋ฌธ์— ๋ฐ”๋””์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ํ˜•์‹์ธ์ง€ content-type์„ ๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์„œ ๋ณด๋‚ด์•ผํ•œ๋‹ค. Form ํ˜•์‹์€ application/x-www-form-urlencoded ํ˜•์‹์ด๋‹ค.

  • HTTP message body

    • HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

    • JSON, XML, TEXT(์ฃผ๋กœ JSON ์‚ฌ์šฉ)

    • POST, PUT, PATCH

HttpServletResponse

ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต ์ฒ˜๋ฆฌ ๊ฐ์ฒด

  • HTTP ์‘๋‹ต์ฝ”๋“œ ์ง€์ •

  • ํ—ค๋” ์ƒ์„ฑ

  • ๋ฐ”๋”” ์ƒ์„ฑ

ํŽธ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต

  • Content-Type, Cookie, Redirect

image-20210524003117157

์œ„์—์„œ ์„ค์ •ํ•œ ๊ฐ’์ด Response Header์— ์„ค์ •๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฟ ํ‚ค, redirect ์„ค์ •

image-20210524003813726

์‘๋‹ต ๋ฐ์ดํ„ฐ

  • ๋‹จ์ˆœ ํ…์ŠคํŠธ ์‘๋‹ต

  • HTML ์‘๋‹ต : text/html ์ง€์ • ํ•„์š”

  • HTTP API - MessageBody JSON ์‘๋‹ต

    application/json ์€ ์ŠคํŽ™์ƒ utf-8 ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, charset=utf-8 ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฐ”๋ผ๋ฏธํ„ฐ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, application/json;charset=utf-8 ์€ ์˜๋ฏธ ์—†๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๊ณ , response.getWriter() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋Š” response.getOutputStream() ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

service()

GET, POST ๋ฐฉ์‹์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค. HTTP ์š”์ฒญ์—์„œ GET๋ฐฉ์‹์œผ๋กœ ์˜ค๋ฉด, doGet() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  POST๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์ด ์˜ค๋ฉด, doPost() ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

doGet()

GET ๋ฐฉ์‹ : URL ๊ฐ’์œผ๋กœ ์ •๋ณด๊ฐ€ ์ „์†ก๋˜์–ด ๋ณด์•ˆ์— ์•ฝํ•จ

๋‹ค์Œ๊ณผ ๊ฐ™์ด url ๊ฐ’์œผ๋กœ ์ •๋ณด๊ฐ€ ์ „์†ก๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • html form ํƒœ๊ทธ์˜ method ์†์„ฑ์ด get์ธ ๊ฒฝ์šฐ ํ˜ธ์ถœ๋œ๋‹ค.

  • ์›น๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์„ ์ด์šฉํ•ด servlet์„ ์š”์ฒญํ•œ ๊ฒฝ์šฐ์—๋„ ํ˜ธ์ถœ๋œ๋‹ค.

doPost()

POST ๋ฐฉ์‹ : header๋ฅผ ์ด์šฉํ•ด ์ •๋ณด๊ฐ€ ์ „์†ก๋˜์–ด ๋ณด์•ˆ์— ๊ฐ•ํ•˜๋‹ค.

  • html form ํƒœ๊ทธ์˜ method ์†์„ฑ์ด post์ธ ๊ฒฝ์šฐ ํ˜ธ์ถœ๋œ๋‹ค.

Context Path

WAS(Web Application Server)์—์„œ ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ path ์ž…๋‹ˆ๋‹ค. ์ดํด๋ฆฝ์Šค์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์ž๋™์œผ๋กœ server.xml์— ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ์ถœ๋ ฅ

  • application.properties

๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์œ„ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด HTTP ์š”์ฒญ๊ด€๋ จํ•ด์„œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”์ฒญ URL : http://localhost:8080/hello?username=%EB%8B%A4%ED%98%9C

Servlet ์ž‘๋™ ์ˆœ์„œ

ํด๋ผ์ด์–ธํŠธ์—์„œ servlet ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์„œ๋ฒ„์—์„œ๋Š” servlet ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•ด request๋ฅผ ์ฒ˜๋ฆฌํ•ด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ ๊ฒŒ ๊ฑธ๋ฆฐ๋‹ค.

https://gmlwjd9405.github.io/images/web/web-service-architecture.png

์ด๋•Œ Servlet ์ปจํ…Œ์ด๋„ˆ์—์„œ 1. ์Šค๋ ˆ๋“œ ์ƒ์„ฑ 2. servlet ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

HTTP ์š”์ฒญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

  1. WAS๋Š” Request, Response ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

    • ์ด๋•Œ, ๊ฐœ๋ฐœ์ž๋Š” Request ๊ฐ์ฒด์—์„œ HTTP ์š”์ฒญ์ •๋ณด๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•˜๊ณ , Response ๊ฐ์ฒด์— HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž…๋ ฅํ•œ๋‹ค.

  2. WAS๋Š” Response ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Servlet Container(WAS)

ํ†ฐ์บฃ๊ณผ ๊ฐ™์ด ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค.

  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌ(์‹ฑ๊ธ€ํ†ค)

    • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ๊ณ„์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ

    • ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ์ ์— ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ์žฌํ™œ์šฉ

    • ๋ชจ๋“  ๊ณ ๊ฐ ์š”์ฒญ์€ ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ

    • ์ด๋•Œ, ๊ณต์œ  ๋ณ€์ˆ˜๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ์‹œ ํ•จ๊ป˜ ์ข…๋ฃŒ

  • JSP๋„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‚ฌ์šฉ

  • ๋™์‹œ ์š”์ฒญ์„ ์œ„ํ•œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ ์ง€์›

๋™์‹œ์š”์ฒญ - ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ

์“ฐ๋ ˆ๋“œ๋ž€?

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰

  • ์ž๋ฐ” ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด main ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰

  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅ

  • ์“ฐ๋ ˆ๋“œ๋Š” ํ•œ๋ฐ˜์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ผ์ธ๋งŒ ์ˆ˜ํ–‰

  • ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ

์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด?

img
  • ์žฅ์ 

    • ๋™์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ)๊ฐ€ ํ—ˆ์šฉํ•  ๋•Œ๊นŒ์ง€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

    • ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ง€์—ฐ๋˜์–ด๋„, ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” ์ •์ƒ ๋™์ž‘

  • ๋‹จ์ 

    • ์“ฐ๋ ˆ๋“œ๋Š” ์ƒ์„ฑ ๋น„์šฉ์ด ๋งค์šฐ ๋น„์‹ธ๋‹ค.

      • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์‘๋‹ต ์†๋„๊ฐ€ ๋Šฆ์–ด์ง„๋‹ค.

    • ์“ฐ๋ ˆ๋“œ๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ๋ฐœ์ƒ

    • ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์— ์ œํ•œ์ด ์—†๋‹ค.

      • ๊ณ ๊ฐ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์˜ค๊ฒŒ๋˜๋ฉด, CPU, ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์ ์„ ๋„˜์–ด ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ๋‹ค.

์“ฐ๋ ˆ๋“œ ํ’€

Threadpool

Thread Pool์— ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ ํ’€์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.(ํ†ฐ์บฃ์€ 200๊ฐœ๊ฐ€ default ๊ฐ’)

์ด๋•Œ, ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ด๋ฏธ ์“ฐ๋ ˆ๋“œํ’€์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉ์„ ์™„๋ฃŒํ•˜๋ฉด, ์“ฐ๋ ˆ๋“œ ํ’€์— ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ˜๋‚ฉํ•œ๋‹ค. ๋งŒ์•ฝ ์“ฐ๋ ˆ๋“œ ํ’€์— ์žˆ๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด, ์š”์ฒญ์„ ๊ฑฐ์ ˆํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์ˆซ์ž๋งŒํผ๋งŒ ๋Œ€๊ธฐํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์“ฐ๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

  1. ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด, ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๋น„์šฉ(CPU)์ด ์ ˆ์•ฝ๋˜๊ณ , ์‘๋‹ต ์‹œ๊ฐ„์ด ๋นจ๋ผ์ง„๋‹ค.

  2. ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์™€๋„ ๊ธฐ์กด ์š”์ฒญ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ตœ๋Œ€ ์“ฐ๋ ˆ๋“œ ์ˆ˜(max thread) ์„ค์ •์ด ๊ฐ€์žฅ ์ฃผ์š” ํŠœ๋‹ ํฌ์ธํŠธ์ด๋‹ค.

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

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

๊ทธ๋ ‡๋‹ค๋ฉด ์ ์ • ์ˆ˜๋Š” ์–ด๋–ป๊ฒŒ ์ฐพ์„๊นŒ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์˜ ๋ณต์žก๋„, CPU, ๋ฉ”๋ชจ๋ฆฌ, IO ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ์‹ค์ œ ์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•ด๋ด์•ผํ•œ๋‹ค. (์•„ํŒŒ์น˜ ab, ์ œ์ด๋ฏธํ„ฐ, nGrinder )

์ฆ‰, ํ•ต์‹ฌ์€ WAS๊ฐ€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋“ฏ์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

Servlet life cycle(์ƒ๋ช…์ฃผ๊ธฐ)

Servlet์˜ ์‚ฌ์šฉ๋„๊ฐ€ ๋†’์€ ์ด์œ ๋Š” ๋น ๋ฅธ ์‘๋‹ต ์†๋„ ๋•Œ๋ฌธ์ด๋‹ค. Servlet์€ ์ตœ์ดˆ ์š”์ฒญ ์‹œ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋˜๊ณ , ์ดํ›„ ์š”์ฒญ์—๋Š” ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋™์ž‘ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

servlet life cycleรฌย—ย รซยŒย€รญย•ยœ รฌยยดรซยฏยธรฌยงย€ รชยฒย€รฌยƒย‰รชยฒยฐรชยณยผ

์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด doGet๋งŒ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋А ์‹œ์ ์— ํ˜ธ์ถœ์ด ๋˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

Servlet ์„ ์ฒ˜๋ฆฌ / ํ›„์ฒ˜๋ฆฌ

Servlet ์„ ์ฒ˜๋ฆฌ, ํ›„์ฒ˜๋ฆฌ

์„ ์ฒ˜๋ฆฌ @PostConstruct

init์ „์— ํ•œ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ

ํ›„์ฒ˜๋ฆฌ @PreDestroy

destroy ํ›„์— ํ˜ธ์ถœ๋œ๋‹ค.

HTML Form tag

formํƒœ๊ทธ๋Š” ์„œ๋ฒ„์ชฝ์œผ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํƒœ๊ทธ์ด๋‹ค.[HTML - form ]ํƒœ๊ทธ์™€ ๊ด€๋ จํ•ด์„œ ์ •๋ฆฌํ•ด๋‘” ์ž๋ฃŒ์ด๋‹ค.

์š”์ฒญํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์—๋Š” ์ด๋™ํ•  ์œ„์น˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. (ex) join.jsp, info.html, HWorldServlet Parameter

Servlet Parameter

form ํƒœ๊ทธ์˜ submit ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฉด, ํ•ด๋‹นํŒŒ์ผ(servlet)์—์„œ๋Š” HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ Parameter๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’์€ ๋‹ค String์ด๋‹ค.

  • getParameter(name) : name์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ’์„ ๋ฆฌํ„ด

  • getParameterValues(name) : value๊ฐ’๋“ค์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ(์ฒดํฌ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)์— ์‚ฌ์šฉ

  • getParameterNames() : name๋“ค์˜ ๋ฐฐ์—ด์ด ๋„˜์–ด์˜จ๋‹ค.

ServletConfig

ํŠน์ • Servlet์ด ์ƒ์„ฑ๋  ๋•Œ ์ดˆ๊ธฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

web.xml ์— ๊ธฐ์ˆ ํ•˜๊ณ  ServletํŒŒ์ผ์—์„œ๋Š” ServletConfing ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผ(์‚ฌ์šฉ)ํ•œ๋‹ค.

+web.xml์ด ์•„๋‹Œ ServletํŒŒ์ผ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

web.xml์ด์šฉํ•˜๊ธฐ

Servlet ํŒŒ์ผ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•˜๊ธฐ

๋ฐ์ดํ„ฐ ๊ณต์œ  : ServletContext

์—ฌ๋Ÿฌ Servlet์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์•ผํ•  ๊ฒฝ์šฐ context parameter๋ฅผ ์ด์šฉํ•ด์„œ web.xml ์— ๊ธฐ์ˆ ํ•˜๊ณ , Servlet์—์„œ ๊ณต์œ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ <servlet>๋ณด๋‹ค ์œ„์ชฝ์— ์žˆ์–ด์•ผํ•œ๋‹ค.

์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์‹œ

์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ(LifeCycle)๋ฅผ ๊ฐ์‹œํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ(Listener)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ServletContextListener ์ž…๋‹ˆ๋‹ค.

๋ฆฌ์Šค๋„ˆ์˜ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.(contextInitialized(), contextDestroyed())

(ํด๋ž˜์Šค ์ƒ์„ฑ + implements ServletContextListener)๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

ํ•œ๊ธ€ ์ฒ˜๋ฆฌ

Tomcat ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ ๋ฌธ์ž ์ฒ˜๋ฆฌ๋ฐฉ์‹์€ IOS-8859-1 ๋ฐฉ์‹์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ์„ ํ•˜์ง€์•Š์œผ๋ฉด ํ•œ๊ธ€์ด ๊นจ์ ธ๋ณด์ธ๋‹ค.

Get๋ฐฉ์‹ - server.xml ์ˆ˜์ •

Post ๋ฐฉ์‹ - .setCharacterEncoding

Last updated

Was this helpful?