1. Servlet 이란?
서블릿(servlet)은 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다. java 코드 안에 HTML 태그가 삽입되며 자바 언어로 되어 있다. .java 가 확장자이다.
쉽게 말하자면 '클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 servlet 클래스의 구현 규칙을 지킨 자바 프로그램' 이라고 이해하면 좋을 듯하다.
서블릿(servlet)은 자바 언어를 웹 애플리케이션에 조금 더 개발하기 쉽게 하기 위해 만든 API(라이브러리, 클래스 등)이며 이 규약에 맞는 라이브러리나 클래스들을 상속 및 구현하여 만든 클래스들을 서블릿이라고 한다.
2. JSP(Java Server Pages) 란?
자바 파일에서 HTML을 코딩하기 번거롭고 불편해서 HTML 내부에 java 코드를 삽입하는 형식이 JSP이다. 다시 말해 서블릿의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술이다. 서블릿을 이용하게 되면 웹 프로그래밍을 할 수 있지만 자바에 대한 지식이 필요하며 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면들이 있다. 때문에 서블릿을 작성하지 않고도 간편하게 웹 프로그래밍을 구현하게 만든 기술이 JSP(Java Server Pages)이다.
JSP는 JAVA 소스를 사용하여 웹페이지에 접근하고 페이지 전환을 통하여 웹 브라우저에 전달한다.
3. Servlet과 JSP의 비교
Servlet | JSP |
- 자바 코드로 구현하고 컴파일하고 배포해야 한다. - HTML 태그로 문자열("") 스트림으로 처리해야 한다. - 코드가 수정되면 다시 컴파일하고 배포해야 한다. |
- 키워드가 태그화되어 서블릿에 비해 배우기 쉽다. - 자바코드를 <%%> 태그 안에 처리해주어야 한다. - HTML 처럼 태그를 사용하여 자바코드도 사용이 가능하다. |
3. Servlet과 JSP의 역할
내용만 보게 된다면 서블릿이나 JSP나 만드는 방법에 차이가 있을 뿐 동일한 역할을 한다는 것을 알 수 있다. 초기에 자바 웹개발은 서블릿을 이용한 개발이었다. 이후 JSP 기술이 발표되면서 JSP 형태의 개발이 유행하게 되고 지금에 와서 각각의 역할을 나누어 Servlet + JSP 형태의 개발이 이루어지고 있다.
JSP는 JSP 기술의 장점을 최대한 활용할 수 있는 웹 어플리케이션 구조에서 사용자에게 결과를 보여주는 프레젠테이션 층을 담당하고 Servlet은 Servlet 기술의 장점을 최대한 활용할 수 있는 사용자의 요청을 받아 분석하고 비즈니스 층과 통신하여 처리한 결과를 다시 사용자에게 응답하는 컨트롤러 층을 담당한다.
3. Servlet과 JSP의 동작 과정
Servlet 동작 방식
- 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송한다.
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
- web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지(= 매핑할 서블릿) 찾는다.
- 해당 서블릿의 인스턴스 존재 유무를 확인하여 없으면 init() 메서드를 호출하여 생성한다.
- Servlet Container에 스레드를 생성하고, service() 메소드를 실행한다. 이후 클라이언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출한다.
- doGet() or doPost() 메서드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
- 응답이 끝나면 destory() 메서드를 이용하여 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
✅ Servlet Container 란?
- 서블릿을 관리해 주는 컨테이너
- 서블릿은 스스로 작동하는 것이 아니고 Servlet Container에 의해 관리되면서 작동된다.
- 예를 들어, Servlet이 어떠한 역할을 수행하는 정의서라고 보면, Servlet Container는 그 정의서를 보고 수행한다고 볼 수 있다.
✅ init() / service() / destroy() 메서드
- init() : 서블릿이 처음으로 요청될 때 초기화를 하는 메서드. (클래스를 new 해서 사용하듯 서블릿 클래스도 초기화해야 사용이 가능) 이렇게 초기화된 서블릿은 싱글톤으로 관리되어 다음에 한 번 더 해당 서블릿 클래스를 호출하면 다시 일어나는 것이 아니라 기존에 있던 서블릿 클래스를 호출한다.
- service() : 서블릿 컨테이너가 요청을 받고 응답을 내려줄 때 필요한 서블릿의 service 메서드. Servlet 인터페이스를 구현한 HttpServlet 클래스의 doGet(), doPost() 같은 메서드들이 호출된다.
- destroy() : 더 이상 사용되지 않는 서블릿 클래스는 주기적으로 서블릿 컨테이너가 destroy() 메서드를 호출하여 제거한다. 이 클래스를 다시 사용하기 위해서는 init() 을 다시 해주어야 한다.
✅ web.xml (서블릿 설정 파일)
- 서블릿을 작성했다면 해당 서블릿을 사용자가 요청한 경로와 매핑시켜줘야 한다. 그래야 브라우저에서 해당 URL로 HTTP 요청할 때, WAS가 매핑된 정보를 읽어서 해당 서블릿으로 요청을 전달해 줄 수 있다.
JSP 동작 방식
- 웹 서버가 사용자로부터 서블릿에 대한 요청을 받으면 서블릿 컨테이너에 그 요청을 넘긴다.
- 요청을 받은 컨테이너는 HttpRequest와 HttpResponse 객체를 만들어, 이들을 통해 서블릿 doPost()나 doGet() 메소드 중 하나를 호출한다.
- JSP를 사용하여 비즈니스 로직과 프레젠테이션 로직을 분리하는데, 여기서 서블릿은 데이터의 입력, 수정 등에 대한 제어를 JSP에게 넘겨서 프레젠테이션 로직을 수행한 후 컨테이너에게 Response를 전달한다.
- 이렇게 만들어진 결과물은 사용자가 해당 페이지를 요청하면 컴파일이 되어 자바 파일을 통해 .class 파일이 만들어지고, 두 로직이 결합되어 클래스화 된다.
4. MVC 패턴에서의 Servlet과 JSP
- MVC 모델은 View는 JSP, Controller는 Servlet으로 사용한다.
- JSP만 이용한 개발 방식(Model1)에서 유지보수 측면의 한계를 느끼면서, 서블릿과 JSP를 각각 Controller와 View의 역할로 나누어 사용하는 개발 방식(Model2)이 등장했다.
- 보여지는 부분은 HTML이 중심이 되는 JSP, 다른 자바 클래스에게 데이터를 넘겨주는 부분은 Java 코드가 중심이 되는 Servlet이 담당하며, 이를 통해 유지보수가 용이해졌다.
출처 / 참고
https://velog.io/@effirin/Servlet%EA%B3%BC-JSP%EC%97%90-%EB%8C%80%ED%95%B4
[Web] Servlet과 JSP에 대해
Servlet과 JSP 모두 동적 웹페이지(Dynamic Web Page)를 만들거나 데이터 처리를 수행하기 위해 사용되는 웹 어플리케이션 프로그래밍 기술이다. Servlet은 Tomcat이 이해할수 있는 순수 Java 코드로만 이루
velog.io
https://m.blog.naver.com/acornedu/221128616501
JSP와 Servlet(서블릿) 비교
JSP와 Servlet?? 어떤 개념을 가지고 있고 어떤 차이가 있는지 알아보도록 하겠다. 1. Servlet ...
blog.naver.com
'WEB' 카테고리의 다른 글
[WEB] 쿠키(Cookie)와 세션(Session) 이해하기 (1) | 2024.08.20 |
---|---|
[WEB] Forward와 Redirect의 차이 이해하기 (0) | 2024.08.14 |
[WEB] Apache와 Tomcat의 차이 이해하기 (0) | 2024.08.14 |