Java

[Spring Boot] 내장 웹 서버 개념 및 활용(서버 변경, 포트 변경)

cob 2023. 6. 11. 15:28

 

 

1. 내장 서블릿 컨테이너(웹 서버)

스프링 부트는 서버가 아니라 내장 서블릿 컨테이너를 쉽게 사용할 수 있도록 해주는  Tool이다. 
  • 서버 : Tomcat, Netty, Jetty, undertow 

 

스프링 부트를 사용해 프로젝트를 만들면 의존성에 톰캣이 들어와 있다.

Spring-Boot-Starter 톰캣

 

 

 


2. 코드로 보는 Tomcat

아래 코드 과정을 스프링 부트에서 설정하고 실행해 준다. 서블릿 컨테이너는 설정에 따라(pom.xml) 달라질 수 있지만, 서블릿은 변하지 않기 때문에 따로 분리되어 작동한다.
- ServletWebServerFactoryAutoConfiguration : 서블릿 컨텍스를 만들어준다.
- DispatcherServletAutoConfiguration : 어떠한 컨텍스트를 사용하든 등록해 준다

 

public class DemoApplication {

    public static void main(String[] args) throws LifecycleException {
        // 1) 톰캣 객체 생성
        Tomcat tomcat = new Tomcat();
        
        // 2) 포트 설정
        tomcat.setPort(8080);

        // 3) 톰캣에 컨텍스트 추가
        Context context = tomcat.addContext("/", "/");

        // 4) 서블릿 만들기
        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";
        
        // 5) 톰캣에 서블릿 추가
        tomcat.addServlet("/", servletName, servlet);
        
        // 6) 컨텍스트에 서블릿 맵핑
        context.addServletMappingDecoded("/hello", servletName);

        // 7) 톰캣 실행 및 대기
        tomcat.start();
        tomcat.getServer().await();

    }

}

 

 

 


3. 내장 서블릿 컨테이너 응용 방법

3-1) 다른 Web 서버 사용 방법

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    
    // 1) exclusions는 가져오는 의존성들 중에서 빼고 싶은 항목을 작성한다. 
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

// 2) Jetty 의존성을 가져온다.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

 

서버 변경

  • spring-boot-starter에서 톰캣이 사라지고, 새롭게 Jetty에 관한 의존성이 추가되었다.

 

 

3-2) 웹서버 사용 안 하기

프러퍼티를 none으로 설정하면 웹 서블릿 컨테이너 의존성들이 클래스 패스에 있어도  웹서버를 사용하지 않는다.

properties

 

 

3-3) 웹서버 포트 변경

포트 변경
랜덤 포트

  • 포트 번호를 0으로 주면 사용할 수 있는 포트를 찾아 사용한다.
반응형