Spring Boot - Servlet

ChoiDevv·2022년 12월 13일
0

스프링 부트 동작 원리

스프링 개발자이지만, 스프링의 동작 원리에 대해서 한 번도 돌이켜 본 적이 없었다. 원리보다 개발이 더 중요하다 생각해서 일어난 일이라고 생각한다. 현재는 개발을 하면서 생긴 동작 원리의 궁금증에 대해 해소하고자 한다.

서블릿

스프링 부트의 동작에 대해서 알기 위해서는 서블릿이라는 개념을 알아야 한다. 서블릿은 자바를 사용하여 웹을 만들기 위해 필요한 기술이다.

조금 더 얘기하면 클라이언트로 부터 http 요청을 받으면 이를 자바 단에서 받아 요청을 처리하고 응답을 보내줘야 하는데 이러한 역할을 수행해 주는 것이다.

기존에 다룬 WEB과 WAS 서버에서 차이를 느꼈듯이 WEB은 정적인 자원만을 제공해준다. 회원가입을 한다고 가정했을 때, 회원가입에 대한 정적인 페이지를 보는 것은 WEB 서버에 의해 제공 받는다. 회원가입을 하고 로그인 페이지로 넘어 가려면 응답을 처리해주어야 하는데 이를 서블릿이 한다고 보면 된다.

서블릿의 특징

  1. MVC 패턴 중 Controller의 역할을 담당한다.
  2. HTTP 프로토콜 서비스는 HttpServlet 클래스가 지원해준다.
  3. 자바의 스레드로 동작한다.
  4. HTML을 사용해 요청에 응답한다.

서블릿 동작 원리

  1. 클라이언트로부터 요청을 받는다.
  2. 서블릿 컨테이너에 요청이 도착한다.
    -> 요청을 받으면 HttpServletRequest, HttpServletResponse 객체를 생성한다.
  3. 사용자가 요청한 URL이 어디 요청인지 확인하기 위해 web.xml을 기반으로 찾는다.
  4. 찾은 서블릿을 통해 service 메소드를 호출하고 doGet, doPost와 같은 메소드를 실행시켜 HttpServletResponse 객체에 응답을 보낸다.
  5. 응답을 클라이언트로 보내고 생성했던 두 객체는 파기한다.

서블릿 컨테이너

서블릿을 이해했다면 서블릿 컨테이너에 대해 알아보자. 서블릿이 생성되었다고 서블릿은 스스로 동작하지 않는다. 이를 관리해주는 부분이 필요한데 이 관리를 서블릿 컨테이너가 해준다. 클라이언트의 요청을 받아주고 응답을 보내주는 역할을 한다고 생각하면 된다

서블릿 컨테이너 특징

  1. 서블릿 컨테이너가 없다면 개발자가 직접 소켓을 만들어 열고 listen, accept 등을 api로 생성해 요청과 응답을 할 수 있도록 해야 하는데 서블릿 컨테이너로 인해 이를 하지 않아도 된다.
  2. 서블릿이 호출되고 객체를 생성해서 응답 값을 보내면 이를 파기하고 적절히 가비지 컬렉션을 진행해 편의를 제공한다.
  3. 서블릿 컨테이너는 요청이 올 때마다 자바의 스레드를 생성해주는데 다중 스레드를 허용해 안정성에 대해 보장해준다.

서블릿 생명주기

요청이 들어오면 서블릿 컨테이너에서 해당 서블릿이 있는지 확인하고 없다면 이를 new 클래스 객체를 호출하듯이 init() 메소드를 호출해서 생성해준다.

서블릿이 호출되면 service() 메소드를 통해 doGet, doPost 메소드를 실행시키고 HttpServletRequest, HttpServletResponse에 의해 요청과 응답 객체가 생성된다.

종료 요청을 하게 되면 destory() 메소드를 통해 선언된 서블릿을 파기한다.

profile
기억보단 기록을

0개의 댓글