김영한 대장님의 스프링MVC1 편을 참고해서 작성 한 글 입니다.
우리가 회원 가입 할 때 를 떠올려보자.
웹에서 데이터를 기입하고 버튼을 누르면 회원 가입이 완료되었다고 한다.
이게 어떻게 진행되는지 알아보자.

전송을 누르면, 요청 http 메세지를 만들어서 서버에 보낸다.
- POST/save HTTP1.1 -> post 방식으로 보내고 url 은 save 야.
http1.1 버전으로 보낼게.
- HOST : 보낸 사람은 localhost:8080이야
- Content Type : 안에 있는 내용은 urlencoded 로 되어 있고,
들어 있는 값은 username=kim, age= 20이야
서버에서 http 메세지를 받고 응답을 하기 위해서는 아래와 같은 절차가 있다.
1. 프로토콜로 통신을 하기 위해서는 tcp/ip 로 연결하기 때문에 연결을 대기 시키고,
값을 받아올 소켓을 연결해둔다.
2. http 메세지를 받아온 후 컨텐트 타입에 따라서 바디 내용을 해석한다.
그리고 그에 따른 액션을 시킨다.
3. 액션을 실행 시킨 후, 값을 디비에 저장하고, 결과 값을 반환하기 위한 '
http 메세지 를 만들어서 보낸다.
모든 개발자들이 서버를 구현 하기 위해서는 이 절차를 따라야 하는데, 만들려는 서비스에 따라 비지니스 로직만 변경해주면 훨씬 더 효율적이지 않을까?
서블릿은 이 절차 중 액션을 취하는 (비지니스 로직- 디비 저장) 만 제외하고 전부를 대신 처리해준다.

- urlPatterns ="/hello'
웹 브라우저에 이 url 을 치게 되면 서블릿 핼로우 라는 클래스가 자동으로 실행된다.
그대신 꼭 extends HttpServlet 을 상속받을 것
- httpServletReauest
위에서 http 요청 메세지를 해석했던 부분 기억하는가? 그 부분을 자동으로 해석하기 쉽게 만들어준다.
- httpServletResponse
내 결과 값을 응답 메세지로 만들어서 보내주기 위해 사용함.


1. localhost:8080/hello 라는 url 이 들어움
그러면 http 요청 메세지도 함께 들어오겠죠?
-> 그걸 기반으로 request, response 객체를 생성함
2. helloServlet 클래스를 실행하고,
결과 값을 위에서 만든 객체에 담아서 보냄.
WAS 안에는 서블릿 컨테이너 라는 게 존재하고 우리는 아까 extends 받아서 내용만 구현했던
코드처럼 구현 하면 된다.
그러면 그 컨테이너가 서블릿을 생성, 호출, 삭제 등등을 관리해준다 ~~
톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함생명주기관리를 함싱글톤으로 관리한다.최초 로딩 시점에서 서블릿 객체를 미리 만들어두고, 재활용을 한다. 동일한 서블릿 객체 인스턴스에 접근한다. 함께 종료된다. 서블릿 덕분에 http 메세지 요청, 응답을 수월하게 했었구나 깨달았다.