1. 내장 서블릿 컨테이너(웹 서버)
스프링 부트는 서버가 아니라 내장 서블릿 컨테이너를 쉽게 사용할 수 있도록 해주는 Tool이다.
- 서버 : Tomcat, Netty, Jetty, undertow
스프링 부트를 사용해 프로젝트를 만들면 의존성에 톰캣이 들어와 있다.
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으로 설정하면 웹 서블릿 컨테이너 의존성들이 클래스 패스에 있어도 웹서버를 사용하지 않는다.
3-3) 웹서버 포트 변경
- 포트 번호를 0으로 주면 사용할 수 있는 포트를 찾아 사용한다.
반응형
'Java' 카테고리의 다른 글
[Spring Boot] HTTPS와 HTTP 동시 적용 방법 (0) | 2023.06.13 |
---|---|
[Spring Boot] 사설 SSL 인증서 생성 및 적용 방법 (0) | 2023.06.12 |
[Spring Boot] 자동 설정 JAR 파일 생성 및 사용 방법 (0) | 2023.06.05 |
[Java] CompletableFuture 클래스 사용 방법 (0) | 2023.06.02 |
[Java] Optional 클래스 개념 및 사용 방법 (0) | 2023.05.31 |