본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 내장 웹 서버 이해

by dev_jsk 2020. 8. 19.
728x90
반응형

스프링 부트는 웹 서버가 아니다

내장 서블릿 컨테이너, 스프링 프레임워크를 쉽게 사용할 수 있게 하는 Tool

서버는 Tomcat, Jetty, Undertow 와 같은 것

 

Tomcat 만들기

순서

  • Tomcat 객체 생성
  • Port 설정
  • Tomcat에 Context 추가
  • Servlet 생성
  • Tomcat에 Servlet 추가
  • Context에 Servlet 매핑
  • Tomcat 실행 및 대기

예시

// Application.java

public class Application {
    public static void main(String[] args) throws LifecycleException, IOException {
        // Tomcat 객체 생성
        Tomcat tomcat = new Tomcat();
        // Tomcat 포트 설정
        tomcat.setPort(8080);
        
        // Windows 환경에서는 docBase 오류로 인해 Directory 생성 과정 필요
        // Windows Error fix
        String docBase = Files.createTempDirectory("tomcat-basedir").toString();
        
        // Tomcat에 Context 추가
        Context context = tomcat.addContext("/", docBase);
        
        // Servlet 생성
        HttpServlet servlet = new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, 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>");
            }
        };
        
        String servletName = "helloServlet";
        // Tomcat에 Servlet 추가
        tomcat.addServlet("/", servletName, servlet);
        
        // Context에 Servlet 매핑
        context.addServletMappingDecoded("/hello", servletName);
        
        // Tomcat 실행 및 대기
        tomcat.start();
        tomcat.getServer().await();
    }
}

결과

 

위 작성한 코드와 같은 설정이 어디에 있길래 스프링 부트가 서블릿 컨테이너를 띄워주는가?

  • AutoConfigure 와 관련이 있다.
  • 내장 서블릿 컨테이너도 자동설정의 일부이다.

ServletWebServerFactoryAutoConfiguration

  • 서블릿 웹 서버를 설정하는 자동설정
  • 해당 클래스 내 TomcatServletWebServerFactoryCustomizer 를 이용해 서버 커스터마이징 가능

DispatcherServletAutoConfiguration

  • 서블릿을 만들고 서블릿 컨테이너에 등록하는 역할
728x90
반응형

댓글