CodeGym/ํ–‰๋™/All lectures for KO purposes/์›น ์„œ๋ฒ„ ํ•„ํ„ฐ

์›น ์„œ๋ฒ„ ํ•„ํ„ฐ

์‚ฌ์šฉ ๊ฐ€๋Šฅ

ํ•„ํ„ฐ ์†Œ๊ฐœ

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๋‹ค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ •๋ง ์„œ๋ธ”๋ฆฟ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๋ฏธ ๋ถ„์„ํ•œ ์„œ๋ธ”๋ฆฟ ์™ธ์—๋„ ์†Œ์œ„ "์œ ํ‹ธ๋ฆฌํ‹ฐ ์„œ๋ธ”๋ฆฟ"์ธ ํ•„ํ„ฐ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๋“ค์€ ์„œ๋ธ”๋ฆฟ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฃผ๋œ ์—ญํ• ์€ ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋•๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๋Š” ๋น„์„œ์™€ ๊ฐ™๊ณ  ์„œ๋ธ”๋ฆฟ์€ ๋””๋ ‰ํ„ฐ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๊ฐ€ ๊ฐ๋…์˜ ์ฑ…์ƒ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ๋น„์„œ์˜ ์†์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๋…์ด ์„œ๋ช…ํ•˜๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฏธ ๋ฐœ์‹  ์„œ์‹ ์œผ๋กœ ๋น„์„œ์—๊ฒŒ ๋‹ค์‹œ ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋น„์„œ๋Š” ๋””๋ ‰ํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ถ€ ์š”์ฒญ(์˜ˆ: ์ŠคํŒธ)์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๊ทธ์—๊ฒŒ ์•Œ๋ ค์ง„ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค ( "๊ฐ๋…์ด ์ œ์ž๋ฆฌ์— ์—†์Šต๋‹ˆ๋‹ค"). ๋“ฑ๋“ฑ. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋น„์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ช… ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๋””๋ ‰ํ„ฐ์— ๋Œ€ํ•œ ์ŠคํŒธ์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ๋น„์„œ๋Š” ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ ๊ฐ„์— ์š”์ฒญ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์œ ํ‹ธ๋ฆฌํ‹ฐ ์„œ๋ธ”๋ฆฟโ€

ํด๋ž˜์Šค Filter, FilterChain, FilterConfig

ํ•„ํ„ฐ๋Š” ์„œ๋ธ”๋ฆฟ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ž‘์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์œ ํ•œ ํ•„ํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์—์„œ ์ƒ์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค javax.servlet.Filter.

ํ•„ํ„ฐ์—๋Š” ๋ฉ”์„œ๋“œ init()๋ฐ destroy(). ๋ฉ”์„œ๋“œ ๋Œ€์‹  service()ํ•„ํ„ฐ์—๋Š” doFilter(). ๊ทธ๋ฆฌ๊ณ  ์ž์ฒด ํด๋ž˜์Šค์ธ FilterConfig๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋Š” web.xml ํŒŒ์ผ์˜ ์„œ๋ธ”๋ฆฟ์— ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ @WebFilter ์ฃผ์„์„ ํ†ตํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• ๋ชฉ๋ก:

ํ–‰๋™ ์–‘์‹ ์„ค๋ช…
1 init(FilterConfig config) ํ•„ํ„ฐ ์ดˆ๊ธฐํ™”
2 destroy() ํ•„ํ„ฐ ์–ธ๋กœ๋“œ
์‚ผ doFilter(ServletRequest , ServletResponse, FilterChain) ์š”์ฒญ ์ฒ˜๋ฆฌ(ํ•„ํ„ฐ๋ง)

์„œ๋ธ”๋ฆฟ๊ณผ ํ•„ํ„ฐ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—ฌ๋Ÿฌ ํ•„ํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์š”์ฒญ(๋ฐ ์‘๋‹ต)์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ์†Œ์œ„ ์ฒด์ธ์œผ๋กœ ๊ฒฐํ•ฉ๋˜๋ฉฐ ์ด๋“ค์„ ์œ„ํ•œ ํŠน์ˆ˜ ํด๋ž˜์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค FilterChain.

๋ฉ”์„œ๋“œ์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ฒด์ธ์—์„œ ๋‹ค์Œ ํ•„ํ„ฐ์˜ doFilter()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . doFilter()์˜ˆ:

public class MyFilter implements Filter {

  public void init(FilterConfig arg0) throws ServletException {
  }

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws Exception {

      PrintWriter out = resp.getWriter();
      out.print("Adding something before the body of the response");

      chain.doFilter(req, resp); // call the next filter in the chain

      out.print("Adding something after the body of the response");
    }

  public void destroy() {
  }
}

์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ์‘๋‹ต ๋ณธ๋ฌธ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ๊ณต์‹์ ์œผ๋กœ ํ•„ํ„ฐ์™€ ์„œ๋ธ”๋ฆฟ์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด๋ฉฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ ๊ธฐ๋Šฅ์€ ์„œ๋น„์Šค ๊ธฐ๋Šฅ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ(๋ฐ ์‘๋‹ต) ๋กœ๊น…
  • ๋ฐ์ดํ„ฐ ์••์ถ•
  • ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”(๋ฐ ๋ณตํ˜ธํ™”)
  • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์š”์ฒญ
  • ์›ํ•˜๋Š” ํ—ค๋” ์ถ”๊ฐ€/์ œ๊ฑฐ
  • ๋ฆฌ๋””๋ ‰์…˜ ์š”์ฒญ
  • ์•ก์„ธ์Šค ์ œ์–ด(์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ํ™•์ธ)

RequestDispatcher ํด๋ž˜์Šค

๋•Œ๋•Œ๋กœ ํ•„ํ„ฐ๊ฐ€ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ doFilter() ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์—๋Š” ํŠน์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค RequestDispatcher.

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ์ฒด์—์„œHttpServletRequest
  • ๊ฐœ์ฒด์—์„œServletContext

์ด ๊ฐœ์ฒด๋Š” ๊ธฐ์กด ์š”์ฒญ์„ ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ๊ณ  ์Šน์ธ๋œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋˜๋Š” ์„œ๋ฒ„์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค :)

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
           String path = "/error.html";
           ServletContext servletContext = this.getServletContext();
           RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(path);
           requestDispatcher.forward(request, response);
    }
}

RequestDispatcherํ•„ํ„ฐ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค .

public class MyFilter implements Filter {

  public void init(FilterConfig arg0) throws ServletException {
  }

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws Exception {
           String path = "/error.html";
           ServletContext servletContext = req.getServletContext();
           RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(path);
           requestDispatcher.forward(req, resp);
    }

  public void destroy() {
  }
}

์š”์ฒญ์€ ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ์‚ฌ์šฉ ํ›„ forward()ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค .doFilter()RequestDispatcher

๋ฆฌ๋””๋ ‰์…˜๊ณผ ์ „๋‹ฌ์˜ ๋น„๊ต

๊ทธ๋ฆฌ๊ณ  ํ•œ ๊ฐ€์ง€ ๋” ์ค‘์š”ํ•œ ์ . ์‚ฌ์šฉ์ž๋ฅผ ์„œ๋ธ”๋ฆฟ์˜ ๋‹ค๋ฅธ URI๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • redirect
  • forward

์ด๋ฏธ ๋ถ„์„ํ–ˆ์ง€๋งŒ ํŽธ์˜์ƒ ๋‹ค์‹œ ๋ง์”€ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ฆฌ๋””๋ ‰์…˜ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์‘๋‹ต ๊ณผ ์ง€์ •ํ•œ ๋งํฌ๋ฅผ response.sendRedirect("link")๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๋กœ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค . 302๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„ ์‘๋‹ต์„ ๋ถ„์„ํ•œ ํ›„ ์ „๋‹ฌํ•œ ๋งํฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €์˜ ๋งํฌ๊ฐ€ ์ƒˆ ๋งํฌ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ „๋‹ฌ ํ•˜๋ฉด requestDispatcher.forward()์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ธ”๋ฆฟ์˜ ์‘๋‹ต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)์— ์‘๋‹ต์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ƒˆ ์„œ๋ธ”๋ฆฟ์—์„œ ์‘๋‹ต์„ ๋ฐ›์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์˜ ๋งํฌ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค