스프링 개발자이지만, 스프링의 동작 원리에 대해서 한 번도 돌이켜 본 적이 없었다. 원리보다 개발이 더 중요하다 생각해서 일어난 일이라고 생각한다. 현재는 개발을 하면서 생긴 동작 원리의 궁금증에 대해 해소하고자 한다.
스프링 부트의 동작에 대해서 알기 위해서는 서블릿이라는 개념을 알아야 한다. 서블릿은 자바를 사용하여 웹을 만들기 위해 필요한 기술이다.
조금 더 얘기하면 클라이언트로 부터 http 요청을 받으면 이를 자바 단에서 받아 요청을 처리하고 응답을 보내줘야 하는데 이러한 역할을 수행해 주는 것이다.
기존에 다룬 WEB과 WAS 서버에서 차이를 느꼈듯이 WEB은 정적인 자원만을 제공해준다. 회원가입을 한다고 가정했을 때, 회원가입에 대한 정적인 페이지를 보는 것은 WEB 서버에 의해 제공 받는다. 회원가입을 하고 로그인 페이지로 넘어 가려면 응답을 처리해주어야 하는데 이를 서블릿이 한다고 보면 된다.
서블릿을 이해했다면 서블릿 컨테이너에 대해 알아보자. 서블릿이 생성되었다고 서블릿은 스스로 동작하지 않는다. 이를 관리해주는 부분이 필요한데 이 관리를 서블릿 컨테이너가 해준다. 클라이언트의 요청을 받아주고 응답을 보내주는 역할을 한다고 생각하면 된다
요청이 들어오면 서블릿 컨테이너에서 해당 서블릿이 있는지 확인하고 없다면 이를 new 클래스 객체를 호출하듯이 init() 메소드를 호출해서 생성해준다.
서블릿이 호출되면 service() 메소드를 통해 doGet, doPost 메소드를 실행시키고 HttpServletRequest, HttpServletResponse에 의해 요청과 응답 객체가 생성된다.
종료 요청을 하게 되면 destory() 메소드를 통해 선언된 서블릿을 파기한다.