🔗 참고자료

  • 블로그 <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의 동작원리

  1. Http Request를 Servlet Container에 전송
  2. Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성
  3. 사용자가 요청한 URL을 분석해 어느 서블릿에 대한 요청인지 탐색
  4. 만약 해당 서블릿이 한번도 실행된 적 없거나, 현재 메모리에 생성된 인스턴스가 없다면
    인스턴스를 생성하고 init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성한다.
    이미 인스턴스가 존재할 경우에는 스레드만 하나 생성한다.
    (각 서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재하기 때문이다.)
  5. 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET 여부에 따라 doGet()또는 doPost()를 호출
  6. 실행된 메소드는 동적인 페이즈를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
  7. 응답이 완료되면 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를 이용하여 적절한 페이지를 만들어 사용자에게 보여준다.

 

 

반응형

+ Recent posts