๐Ÿ› ๏ธBackend/๐ŸŒณSpring

[Spring Framework] Servlet API, HttpServlet, DispatcherServlet, Tomcat ์•Œ์•„๋ณด๊ธฐ

junbin2 2025. 6. 28. 00:46

โœ… 1. Servlet API ๋ž€?

package jakarta.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException; // Servlet ์ƒ์„ฑ

    ServletConfig getServletConfig();

    // ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy(); // Servlet ์‚ญ์ œ
}
  • ์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ์ˆ ์ด๋‹ค. ์ฆ‰, ์›น์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์š”์ฒญ-์‘๋‹ต ๋ชจ๋ธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๊ฑฐ์˜ 100%์— ๊ฐ€๊น๊ฒŒ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›น ๊ธฐ์ˆ  ์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง.
  • ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ์ด๋ผ๊ณ  ํ•˜๋ฉด HttpServlet ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋œปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.
  • ํ•˜์ง€๋งŒ, HttpServlet ์€ ๊ฒฐ๊ตญ Servlet API ํ˜•์‹์— ๋งž๊ฒŒ ๊ตฌํ˜„ ๋œ ํด๋ž˜์Šค์ด๋‹ค.
  • Servlet ์€ ์ž๋ฐ” ํ”Œ๋žซํผ ์ „์šฉ ๊ธฐ์ˆ  ์ด๋‹ค. ์ฆ‰, ์ž๋ฐ”์—์„œ๋งŒ ์‚ฌ์šฉ์„ ํ•˜๋Š” ๊ฐœ๋…์ด Servlet์ด๋ฉฐ, ์ž๋ฐ”์—์„œ ๋งŒ๋“  ๊ฐœ๋…์ด๋‹ค.
  • ํ•ด๋‹น Servlet ์€ API ์ฆ‰, ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ์œผ๋ฉฐ, API ํ˜•์‹์— ๋งž๊ฒŒ ๊ตฌํ˜„์„ ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ •๋ฆฌํ•˜๋ฉด, Servlet API ์ž์ฒด๋Š” ์„œ๋ธ”๋ฆฟ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์›์น™์„ ์ •์˜ํ•œ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

(1) Servlet ์–ด์›

  • ์„œ๋ฒ„(Server) + ์•ฑ๋ฆฟ(Applet) ์˜ ํ•ฉ์„ฑ์–ด์ด๋‹ค.

[ Applet ์ด๋ž€? ]

  • ์ž๋ฐ” ์ดˆ์ฐฝ๊ธฐ์— ์‚ฌ์šฉ๋˜๋˜ ์šฉ์–ด๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Application + let ์˜ ํ•ฉ์„ฑ์–ด ์ด๋‹ค.
  • Application: ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ, ํŠนํžˆ ๋ฐ์Šคํฌํƒ‘์ด๋‚˜ ์„œ๋ฒ„ ๋“ฑ์—์„œ ์‹คํ–‰๋˜๋Š” ์ „์ฒด์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์˜๋ฏธํ•จ.
  • let: ์˜์–ด์—์„œ "์ž‘์€ ๊ฒƒ"์„ ์˜๋ฏธํ•˜๋Š” ์ ‘๋ฏธ์‚ฌ์ด๋‹ค.
  • ์ •๋ฆฌํ•˜๋ฉด ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฆ‰, ๊ฒฝ๋Ÿ‰ํ™” ๋˜๊ณ  ์ œํ•œ๋œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค.

โœ… 2. Servlet API ๊ตฌ์กฐ

package jakarta.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException; // Servlet ์ƒ์„ฑ

    ServletConfig getServletConfig();

    // ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy(); // Servlet ์‚ญ์ œ
}

 

(1) init(ServletConfig var1)

  • ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋กœ, ์„œ๋ธ”๋ฆฟ์ด ์ƒ์„ฑ๋œ ํ›„ ์ตœ์ดˆ๋กœ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ์ด ๋œ๋‹ค.
  • ์ฆ‰, ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ์ด ๋˜์–ด์„œ ์„œ๋ธ”๋ฆฟ์ด ์ƒ์„ฑ์ด ๋˜๊ณ  ์‚ฌ์šฉ์ด ์ข…๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ œ๊ฑฐ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ์ด ๋œ๋‹ค.
  • ServletConfig ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ „๋‹ฌ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
  • ์ฆ‰, ์„œ๋ธ”๋ฆฟ์ด ์ตœ์ดˆ ์ƒ์„ฑ๋  ๋•Œ, ServletConfig ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ init() ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ์„ ํ•˜๊ฒŒ ๋จ.

[ ServletConfig ]

package jakarta.servlet;

import java.util.Enumeration;

public interface ServletConfig {
    String getServletName();

    ServletContext getServletContext();

    String getInitParameter(String var1);

    Enumeration<String> getInitParameterNames();
}
  • ServletConfig์˜ ์—ญํ• ์€ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ์–ด๋–ค ์„œ๋ธ”๋ฆฟ์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ์ดˆ๊ธฐ ์„ค์ •๊ฐ’๋“ค์„ ๋‹ด๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค.
  • ๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐ ์„ค์ •์„ ๋„์™€์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ฆ‰, ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„์„ ํ•ด์„œ init() ์— ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ( Tomcat์ด ํ•ด์คŒ )

(3) service(ServletRequest req, ServletResponse res)

  • ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ์ด๋ฉฐ, ์„œ๋ธ”๋ฆฟ์ด ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ค์งˆ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ๋ถ€์ด๋‹ค.
  • ์‰ฝ๊ฒŒ ๋งํ•ด, ๋ชจ๋“  ์š”์ฒญ์€ service() ๋กœ ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ์ „๋‹ฌ์ด ๋˜๊ฒŒ ๋œ๋‹ค.
  • init() ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์„œ๋ธ”๋ฆฟ์€ service() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ์ด ๋œ๋‹ค.

(4) destroy()

  • ์„œ๋ธ”๋ฆฟ์ด ๋” ์ด์ƒ ํ•„์š” ์—†๊ฑฐ๋‚˜, ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜, ์„œ๋ธ”๋ฆฟ์„ ์–ธ๋กœ๋“œ ํ•  ๋•Œ ํ˜ธ์ถœ์ด ๋œ๋‹ค.
  • ์‰ฝ๊ฒŒ ๋งํ•ด, ์„œ๋ธ”๋ฆฟ์ด ๋” ์ด์ƒ ํ•„์š” ์—†์–ด์„œ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ผ ๋ณด๋ฉด ๋œ๋‹ค.
  • ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ๋ณดํ†ต์€ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๊ฐ™์€ ์ž์› ํ•ด์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

(5) ์ •๋ฆฌ

  • Servlet API ๋Š” ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ด ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์ด ๋™์ž‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

โœ… 3. HttpServlet

// HttpServlet
public abstract class HttpServlet extends GenericServlet {
}
// GenericServlet
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
}
  • Servlet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ HTTP ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠนํ™”๋˜๋„๋ก Servlet ์„ ๊ตฌํ˜„ํ•œ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.
  • HttpServlet ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ, ์„œ๋ธ”๋ฆฟ์„ ๋งŒ๋“ค์–ด์„œ ์ด์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ( ์›น ์š”์ฒญ์„ ์ˆ˜์‹ ํ•ด์„œ ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ )

(1) HttpServlet ๊ตฌ์กฐ

// HttpServlet
public abstract class HttpServlet extends GenericServlet {
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request;
        HttpServletResponse response;
        try {
            request = (HttpServletRequest)req;
            response = (HttpServletResponse)res;
        } catch (ClassCastException var6) {
            throw new ServletException(lStrings.getString("http.non_http"));
        }

        this.service(request, response); // ์˜ค๋ฒ„๋กœ๋”ฉ ๋œ service() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
    }
}
  • ํ•ด๋‹น service() ๊ฐ€ Servlet API ๋กœ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ this.service() ๋ฅผ ํ†ตํ•ด ์˜ค๋ฒ„๋กœ๋”ฉ ๋œ service() ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

[ service() - Overloading ]

// HttpServlet
public abstract class HttpServlet extends GenericServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        long lastModified;
        if (method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if (lastModified == -1L) {
                this.doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader("If-Modified-Since");
                } catch (IllegalArgumentException var9) {
                    ifModifiedSince = -1L;
                }

                if (ifModifiedSince < lastModified / 1000L * 1000L) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if (method.equals("HEAD")) {
            lastModified = this.getLastModified(req);
            this.maybeSetLastModified(resp, lastModified);
            this.doHead(req, resp);
        } else if (method.equals("POST")) {
            this.doPost(req, resp);
        } else if (method.equals("PUT")) {
            this.doPut(req, resp);
        } else if (method.equals("DELETE")) {
            this.doDelete(req, resp);
        } else if (method.equals("OPTIONS")) {
            this.doOptions(req, resp);
        } else if (method.equals("TRACE")) {
            this.doTrace(req, resp);
        } else {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[]{method};
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }
    }
}
  • ๋‚ด๋ถ€์ ์œผ๋กœ Request ์— ๋‹ด๊ธด HTTP method ๋ฅผ ํ™•์ธ ํ•œ ๋’ค ์š”์ฒญ์— ๋งž๊ฒŒ doGet() ๋˜๋Š” doPost() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•ด์ค€๋‹ค.
  • ์ฆ‰, HttpServlet ์„ ๊ตฌํ˜„ํ•œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋“ค์€ service() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑด๋“œ๋ฆด ํ•„์š” ์—†์ด, doGet() ์ด๋‚˜ doPost() ๋ฉ”์„œ๋“œ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด์œ ๋Š”, ๋‚ด๋ถ€์ ์œผ๋กœ HTTP method ๋ฅผ ๊ฒ€์ฆํ•ด์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โœ… 4. DispatcherServlet

// DispatcherServlet - class
public class DispatcherServlet extends FrameworkServlet {
}
// FrameworkServlet - abstract
public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware {
}
// HttpServletBean - abstract
public abstract class HttpServletBean extends HttpServlet implements EnvironmentCapable, EnvironmentAware {
}
  • DispatcherServlet ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ถ„๋ฐฐํ•˜๋Š” ์ค‘์•™ ์—ญํ• ์„ ํ•˜๋Š” Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์„œ๋ธ”๋ฆฟ์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ๊ธฐ์กด์˜ ์„œ๋ธ”๋ฆฟ ๋ฐฉ์‹์€ HttpServlet ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ api ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ์„ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ ์˜€์Œ.
  • ํ•˜์ง€๋งŒ, DispatcherServlet ์€ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์„ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ๊ณต์œ ํ•˜๋ฉฐ, Controller ์˜ api ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ์ฆ‰, Servlet ๋งˆ๋‹ค ํŒŒ์ผ์ด ์ถ”๊ฐ€ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ DispatcherServlet ํ•˜๋‚˜๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ–ˆ์Œ.
  • DispatcherServlet ์€ ๋‚ด๋ถ€์ ์œผ๋กœ HttpServlet ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„์„ ํ•˜๊ณ  ์žˆ์Œ. ๊ฒฐ๋ก ์€ HttpServlet ๊ธฐ๋ฐ˜

โœ… 5. Tomcat (ServletContainer)

  • Tomcat ์€ ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์—์„œ ๋งŒ๋“  ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์ด์ž WAS(์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„) ์ด๋‹ค.
  • Tomcat ์€ ๋‚ด๋ถ€์ ์œผ๋กœ Servlet ์„ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ServletContainer ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ์ฆ‰, ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์ธ init() / service() / destroy() ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๊ฒƒ์ด๋‹ค.

[ ์ปจํ…Œ์ด๋„ˆ(Container)๋ž€? ]

  • ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ™˜๊ฒฝ ๋˜๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ณ , ํŒŒ๊ดดํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ์ž๋ฅผ ์˜๋ฏธํ•จ.

(1) Tomcat ์—ญํ• 

  • 1. HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ์„ ํ•ด์„œ HTTP ๋ฉ”์‹œ์ง€๋กœ ๋‹ด๊ธด ๊ฐ’๋“ค์„ ํŒŒ์‹ฑํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ „๋‹ฌ์„ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • 2. ๋‚ด๋ถ€์ ์œผ๋กœ Servlet ์„ ์ƒ์„ฑ ํ•ด์ฃผ๊ณ , init() -> service() ๋ฅผ ํ†ตํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•จ.
  • 3. ๋‚ด๋ถ€์ ์œผ๋กœ ์Šค๋ ˆ๋“œ ํ’€์„ ์šด์˜ํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ์š”์ฒญ ๋งˆ๋‹ค ์ž‘์—… ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•ด์„œ ์ฒ˜๋ฆฌ ํ•˜๋Š” ์—ญํ• ์„ ํ•ด์คŒ.
  • 4. ์ตœ์ข…์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก์„ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ.
  • ์ •๋ฆฌํ•˜๋ฉด, Tomcat์€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ฐ›์•„์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋จ.