톰캣과 스프링의 관계

하루에 한걸음·2022년 3월 5일
5

스프링 공부를 하고 스프링으로 과제와 프로젝트를 수행해본지도 한 6개월 남짓 된것 같다. 그 동안 스프링을 써오면서 "내부적으로 톰캣을 사용하는구나" 라고 생각했는데 이것은 완전히 틀린 생각이었다. 거꾸로 톰캣 안에서 스프링이 돌아간다고 보는것이 맞겠다. 톰캣의 servletContainer에 스프링 부트의 DispatcherServlet가 배포된다고 보는 것이 맞겠다.

톰캣이 뭔데?

처음에는 스프링에 '내장'된 웹 서버라는 생각을 하고 있었다. 내가 @RestController를 사용하여 컨트롤러를 만들어두면 톰캣은 Client의 요청을 받고 그 request를 내가 만든 Controller에 전달하는구나 라고 생각했다.

...쓰고 보니 이 표현 자체는 그렇게까지 틀린 표현은 아닌것 같다; 중요한 점은 톰캣은 단순한 정적 Web-Server가 아니며, Web-Server와 함께 Servlet-Container를 합쳐놓은 미들웨어라는 점이다. 그리고 이 톰캣의 Server-Container에 스프링의 DispatchServlet이 배포되어 실행된다. (참조 : https://taes-k.github.io/2020/02/16/servlet-container-spring-container/)

그럼 스프링은 뭘까?

스프링이 뭐냐고 묻는다면 "자바 어플래케이션 개발을 위한 의존성 주입 프레임워크" 등 멋진말로 표현할 수 있겠지만 내게 중요한 개념은 그것이 아니다. 그 보다는 스프링 프레임워크의 중심에 있는 DispatcherServlet이 톰캣의 Servlet-Continer에 배포되어 돌아가는 Servlet중 하나일 뿐이라는 것을 아는게 더 중요하다. 어떻게 보면 우리가 그동안 짜왔던 수많은 스프링 코드들은 결국, 톰캣의 서블릿(DispatcherServlet) 하나를 배포하기 위해 해온것들이라고도 할 수 있겠다.

결론

스프링 부트가 자동으로 톰캣을 실행시키고 DispatcherServlet을 배포하여 더 헷갈리는 개념이었다.
기본기부터 차분히 공부하자. 이번에 스프링 부트 강의를 듣기로 했는데 여기서 기본개념을 확실하게 잡고 갈수 있으면 좋겠다.

profile
백엔드 공부를 위한 블로그입니다.

0개의 댓글