서블릿이 뭐죠?서블리의 특징이 뭐에요그럼?서블릿의 생명주기를 말씀하실 수 있나요?서블릿 컨테이너가 뭔가요?필터는 뭐에요?MVC 패턴에 대해서 설명해보세요그래서 어떻게 발전했죠? - JSP
서블릿이 뭐죠?
- 서블릿은 동적인 웹 페이지에서 사용되는 요청과 응답에 대한 자바 규격입니다.
- HTTP 요청과 응답의 흐름을 간단한 메서드 호출만으로 정의할 수 있도록 도와줍니다.
- 서블릿이 정의되어 있지 않다면 서비스 로직이 돌아가기 전, 항상 네트워크 연결에 대한 구현을 해줘야하기에 개발자에게 편의성을 제공해주는 장점이 존재합니다.
서블리의 특징이 뭐에요그럼?
- 기본적으로 HTML을 사용하여 응답하게 되며
- MVC 패턴에서의 컨트롤러 역할을 합니다.
- 상속 순서는 Servlet > GenericServlet > HttpServlet 구성되어 있습니다.
- 스레드 단위로 동작합니다.
서블릿의 생명주기를 말씀하실 수 있나요?

- 클래스 로더가 서블릿 클래스를 먼저 로드합니다.
- 요청이 들어오면 필요한 서블릿 클래스 인스턴스를 생성합니다.
- 생성된 서블릿 객체를 init() 메서드로 초기화합니다.
- 한번 생성된 서블릿 객체는 싱글톤으로 계속 메모리에 남아있게 되지만 GC의 대상이 되긴 합니다.
- 초기화 작업에 비용이 많이 들기 때문에 재사용을 하는 것입니다.
- service() 메서드 호출하여 서비스 로직을 실행하게 됩니다.
- 서블릿 컨테이너가 종료되면 destory() 메서드를 호출하게 됩니다.
서블릿 컨테이너가 뭔가요?
- 서블릿 객체를 관리하는 컨테이너로써 서블릿 객체의 생명주기를 관리합니다.
- 특징으로 소켓을 구현하여 스트림을 생성해 클라이언트와 통신을 책임집니다.
- 요청이 들어오면 HttpServletRequest와 HttpServletResponse 객체를 생성합니다.
- 컨테이너 로드시 스레드풀에 스레드를 만들어 놓고 요청시 스레드를 할당합니다.
- 스레드는 필요한 서블릿을 호출하여 요청을 수행합니다.
- 원래는 요청이 들어올 때 자동으로 스레드를 만들지만, 한계가 없기에 너무 많은 스레드를 생성하게 되면 서버가 다운될 수 있어 스레드 풀을 사용합니다.
필터는 뭐에요?
- 요청이 서블릿을 들어갈때와 나갈때 거치는 필터가 존재합니다.
- 생명주기는 서블릿과 유사합니다.
- 요청이 들어오면 init()으로 초기화 후 doFilter()로 작업을 수행하며 체인형태로 필터가 연쇄적으로 연결되어있어 필터를 모두 거칩니다.
- 서블릿 컨테이너가 종료되면 destory() 메서드를 호출합니다.
- 마지막 필터에는 서블릿 service()를 호출하고 호출이 끝나면 추가 작업을 정의할 수 있습니다.
MVC 패턴에 대해서 설명해보세요
- Model, View, Controller 세가지 구성요소로 이루어진 디자인 패턴입니다.
- Model : 표현하고자 하는 데이터
- View : Html과 같은 UI 요소
- Controller : Model과 View를 연결하는 인터페이스 역할을 합니다.

- 위 예시 코드를 보면 하나의 서블릿이 요청을 받고 서비스 로직을 처리 후 html에 바인딩 하는 것을 보실 수 있습니다. 모델 뷰 컨트롤러의 책임을 하나의 서블릿을 모두 맡아 처리한느 것이죠
- 누가봐도 복잡하고 유지보수하기 힘들어져 MVC 패턴이 발전하게 됩니다.
그래서 어떻게 발전했죠? - JSP
- 그래서 Java Server Page 즉 JSP가 나오게 됩니다. HTML에 자바 코드를 넣어 동적인 웹 페이지를 만드는 기술입니다.
- 오래된 기술이라고 생각할 수 있지만 사실 많은 역사가 있는 기술로 알고 있습니다.
- JSP의 초기 모델 MVC1은 다음과 같습니다.

- 자바 코드와 페이지 문법이 혼재되어 있는 형태로 보통 자바 코드블록에서 자바빈으로 등록된 모델을 불러와 사용할 수 있습니다.
- 즉 JSP의 파일 하나가 컨트롤러와 뷰의 책임을 맡는 것입니다.
