김영한 대장님의 스프링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 메세지 요청, 응답을 수월하게 했었구나 깨달았다.