Spring Boot - 내장 웹 서버 이해

업데이트:

스프링 부트 원리

내장 웹 서버 이해

내장 서블릿 컨테이너

  • 스프링 부트는 서버가 아니고 내장 서블릿 컨테이너를 쉽게 사용할 수 있게 해주는 툴이다.

  • 서버 : tomcat, netty

  • 스프링을 사용하지 않고 자바 코드로 톰캣 객체를 만들어서 서버를 만들 수 있다.

    // 순서
    1. Tomcat 객체 생성
    2. Port 설정
    3. Tomcat에 Context 추가
    4. Servlet 만들기
    5. Tomcat에 Servlet 추가
    6. Context에 Servlet 맵핑
    7. Tomcat 실행  대기
    
    public class Application {
      
        public static void main(String[] args) throws LifecycleException {
            Tomcat tomcat = new Tomcat();
            tomcat.setPort(8080);
      
            // context 만들기
            Context context = tomcat.addContext("/", "/");
      
            // servlet 만들기
            HttpServlet servlet = new HttpServlet() {
                @Override
                protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                    throws IOException {
                    PrintWriter writer = resp.getWriter();
                    writer.println("<html><head><title>");
                    writer.println("Hey, Tomcat");
                    writer.println("</title></head>");
                    writer.println("<body><h1>Hello Tomcat</h1></body>");
                    writer.println("</html>");
                }
            };
      
            // 만든 servlet을 servletName으로 이름지어 contextPath가 "/"인 tomcat에 등록
            String servletName = "HelloServlet";
            tomcat.addServlet("/", servletName, servlet);
      
            // 특정 url 요청이(/hello) 들어오면 만든 servlet을 보여준다.
            context.addServletMappingDecoded("/hello", servletName);
      
            tomcat.start();
            tomcat.getServer().await();
        }
    }
    
  • 내장 톰캣(EmbeddedTomcat)과 서블릿 컨테이너(ServletContainer) 그리고 서블릿(Servlet)도 자동 설정(AutoConfiguration)의 일부이다.

  • 위 과정들을 상세하고 유연하게 해주는 것이 스프링 부트의 자동 설정 기능이다.

    // 자동 설정으로 톰캣이 만들어지고, 내장 서블릿 컨테이너가 만들어진다. (서블릿 웹 서버 생성)
    org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
      
    // DispatcherServlet 만들고 서블릿 컨테이너에 등록한다.
    org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
    

댓글남기기