본문 바로가기

Spring/Spring Boot

(SpringBoot) 내장 웹 서버 이해

스트링 부트는 서버가 아닙니다.

가끔 스프링 부트가 구동 시에 서버를 함께 구동시켜주니 서버로 생각하는 사람이 있지만 

public static void main(String[] args) {
    SpringApplication springApplication = new SpringApplication(SpringbootgettingstartedApplication.class);
    springApplication.setWebApplicationType(WebApplicationType.NONE);
    springApplication.run(args);
}

위의 코드를 보면 서버를 끄고도 잘 동작하는 것을 볼 수 있다.

스프링은 단지 Tool이다. (내장 서블릿 컨테이너를 잘 사용하게 도와주는)

 

서버는 tomcat. jetty, undertow... 등등이다.

 

 

기본적으로 SpringBoot 프로젝트를 만들면 아래와 같이 tomcat이 들어온다.


자바로 톰캣 구현

톰캣 인스턴스 선언, 포트 설정 및 context 설정 및 톰캣 실행

public static void main(String[] args) throws LifecycleException {
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(8080);
    
    Context context = tomcat.addContext("/", "/");
    
    tomcat.start();
}

서블릿 작성 후 mapping

Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);
Context context = tomcat.addContext("","/");

/*서블릿 작성*/
HttpServlet servlet = new HttpServlet() {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }
};
tomcat.addServlet("", "servlet", servlet);
context.addServletMappingDecoded("/hello", "servlet");
/*서블릿 작성*/

tomcat.getConnector();
tomcat.start();

https://jwdeveloper.tistory.com/103?category=835408

 

(SERVLET) 서블릿 애플리케이션 개발

기본 세팅 maven archetype -webapp설정 기본 골격 servlet 의존성 설정 (with pom.xml) provided - 코딩하는 시점에는 사용 가능 런타임 시점 (war packaging ) 에는 classpath 제외 javax.servlet-api는 cont..

jwdeveloper.tistory.com


이러한 설정이 어디 있길래 스프링 부트가 서블릿 컨테이너를 띄어주는 것인가?

해당 경로의 spirng.factories 내부에 ServletWebServerFactoryAutoConfiguration 설정이 존재한다.

 

톰캣 생성

클래스를 아래와 같이 타고 타고 타고 가보면

우리가 만들었던 과정과 비슷한 일련의 과정들이 있다는 것을 볼 수 있다.

서블릿 생성

DispatcherServletAutoConfiguration

DispatcherServlet에 대한 자세한 과정은 아래 링크를 통해 참고

https://jwdeveloper.tistory.com/106?category=835408

 

(SERVLET) 스프링 MVC 연동

public class HelloController { @Autowired HelloService helloService; @GetMapping("/hello") public String Hello() { return "hello, "+helloService.getName(); } } 위의 코드를 구현하려면 어떻게 해야 하..

jwdeveloper.tistory.com


정리 

톰캣 객체 생성

  • 포트 설정
  • 톰캣에 콘텍스트 추가
  • 서블릿 만들기
  • 톰캣에 서블릿 추가
  • 콘텍스트에 서블릿 맵핑
  • 톰캣 실행 및 대기
  •  - 이 모든 과정을 보다 상세히 또 유연하고 설정하고 실행해주는 게 바로 스프링 부트의 자동 설정.

ServletWebServerFactoryAutoConfiguration (서블릿 웹 서버 생성)
 - TomcatServletWebServerFactoryCustomizer (
서버 커스터마이징)

DispatcherServletAutoConfiguration

 - 서블릿 만들고 등록

 

코드 참조

https://github.com/mike6321/Spring/tree/master/SpringBoot/webServer

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com