728x90
반응형
🔗 참고자료
- 블로그 <Taes-k DevLog> Tomcat, Spring MVC의 동작 과정 => 링크
- 블로그 <heejeong Kwon> [SpringMVC] Spring MVC Framework란 => 링크
- 블로그 <진열사랑> [tomcat] 동작원리 => 링크
- 블로그 <일단은 내 이야기> [Java]Apache? Tomcat?? 둘이 무슨 차이지? => 링크
✍ 공부하게 된 계기
Dispatcher Servlet을 직접 구현해보면서 Tomcat과 Spring MVC의 동작 과정을 알고 있어야 구현하는데 도움이 된다고 생각했습니다. 기본적으로 작동하는 원리를 모르고 구현을 하는건 제 기준에서는 거의 불가능하다고 생각했습니다.
설령 구현을 한다고 해도 나 자신에게 도움되는게 거의 없을 것 같다고도 느꼈습니다.
Spring Boot를 사용하면서 내장 Tomcat이 있어서 개발자가 직접 실행을 시키지 않아도 된다고만 알고있습니다.
단순히 위의 개념만 가지고는 너무 부족한 것 같아서 이렇게 공부하게 되었습니다.
❓ 톰캣(Tomcat)이란
- 일반적으로 톰캣(Tomcat)은 'WAS(Web Application Server)' 의 대표적인 미들웨어 서비스로 알려져 있다.
하지만 톰캣은 일반적으로 아파치 톰캣(Apache Tomcat)이라 불리며 회사명이자 웹서버의 대표적인 미들웨어인
아파치(Apache)의 기능 일부분을 가져와 함께 사용되면서 웹서버(Web Server)의 기능과 웹 애플리케이션 서버(Web Application Server) 모두를 포함하고 있다고 생각해도 무방하다.
Tomcat의 동작원리
- Http Request를 Servlet Container에 전송
- Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성
- 사용자가 요청한 URL을 분석해 어느 서블릿에 대한 요청인지 탐색
- 만약 해당 서블릿이 한번도 실행된 적 없거나, 현재 메모리에 생성된 인스턴스가 없다면
인스턴스를 생성하고 init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성한다.
이미 인스턴스가 존재할 경우에는 스레드만 하나 생성한다.
(각 서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재하기 때문이다.) - 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET 여부에 따라 doGet()또는 doPost()를 호출
- 실행된 메소드는 동적인 페이즈를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
- 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸한다.
아파치(Apache)와 톰캣(Tomcat)의 차이
- 아파치 서버란 클라이언트에서 요청하는 HTTP요청을 처리하는 웹서버를 의미한다.
이는 정적타입(HTML, CSS, 이미지 등)의 데이터만을 처리한다. - 톰캣 WAS(Web Application Server)는 컨테이너 웹 컨테이너 서블릿 컨테이너로도 불린다.
- 컨테이너 : 동적인 테이터들을 가공하여 정적인 파일로 만들어주는 모듈
- 서블릿 : 클라이언트의 요청을 받고 요청을 처리하여 결과를 클라이언트에게 제공하는 자바 인터페이스.
java.servlet.package에 정의된 인터페이스로서 서블릿의 라이프 사이클을 위한 세 가지 필수적인 메소드를 정의
- init(), service(), destory() - 서블릿 컨테이너 : 서블릿들을 모아 관리하고 새로운 요청이 들어올 때마다 새로운 스레드를 생성한다.
작업이 끝난 서블릿 스레드는 자동 제거된다. - WAS : DB처리, 로직 처리를 요구하는 동적타입을 제공하는 소프트웨어 프레임워크를 의미한다.
기본적으로 사용되는 기능 3가지는 아래와 같다.
- 프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다.
- 여러 개의 트랜잭션을 관리한다.
- 업무를 처리하는 비즈니스 로직을 수행한다.
정리하면
아파치 서버는 정적인 파일을 처리해주는 웹서버(80포트)이고,
톰캣은 DB처리와 같은 동적인 기능을 가공하여 HTML파일로 만들어 클라이언트에게 제공(8080포트)한다.
하지만 아파치 톰캣으로 불리는 경우가 있는 그 이유는
기본적으로 아파치와 톰캣의 기능은 분리되어 있지만 톰캣 안에 있는 컨테이너를 통해 일부 아파치의 기능을 발휘하기 때문이다. 보통 아파치 톰캣으로 합쳐서 부르곤 한다.
❓ Spring MVC란
- Spring MVC는 Spring에서 제공하는 웹 모듈로, Model, View, Controller 세가지 구성요소를 사용해
사용자의 다양한 HTTP Request를 처리한다. - 단순한 텍스트 형식의 응답부터 REST 형식의 응답은 물론 View를 표시하는 html을 return하는 응답까지 다양한 응답을 할 수 있도록 하는 프레임워크이다.
Spring Framework가 제공하는 Class와 동작과정
- DispatcherServlet
Spring Framework가 제공하는 Servlet 클래스로 사용자의 요청을 최초로 받는 Front Controller이다.
Dispatcher가 받은 요청은 HandlerMapping으로 넘어간다. - HandlerMapping
사용자의 요청을 처리할 Controller를 찾는다.(Controller URL Mapping)
요청 url에 해당하는 Controller 정보를 저장하는 table을 가진다.
즉, 클래스에 @RequestMapping("/url") 어노테이션을 명시하면 해당 URL에 대한 요청이 들어왔을 때
table에 저장된 정보에 따라 해당 클래스 또는 메서드에 Mapping한다. - ViewResolver
Controller가 반환한 View Name(the logical names)에 prefix, suffix를 적용하여
View Object(the physical view files)를 반환한다.
예를 들어 view name:home, prefix: /WEB-INF/views/, suffix: .jsp는
"/.WEB-INF/views/home.jsp"라는 위치의 View(JSP)에 Controller에게 받은 Model을 전달한다.
이 후에 해당 View에서 이 Model data를 이용하여 적절한 페이지를 만들어 사용자에게 보여준다.
반응형
'프로그래밍언어 & 프레임워크 > 스프링(Spring)' 카테고리의 다른 글
[Spring] schema.sql과 data.sql이란? (0) | 2022.12.21 |
---|---|
DispatcherSevlet 직접 구현해보기(구현 중) (0) | 2022.12.08 |
스프링 시큐리티(Spring Security)와 JWT란? (0) | 2022.11.29 |
[Spring] 게시글 수정 로직 위치 Entity vs Service (0) | 2022.05.18 |
[Spring] Jasypt를 활용한 yml 암호화해보기(gradle, intellij) (4) | 2022.05.10 |