[이해x] Servlet & JSP

myeonji·2022년 1월 9일
1

Spring

목록 보기
2/22

Servlet란?

웹 프로그래밍에서 클라이언트의 요청을 처리하고, 그 결과를 클라이언트에게 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 입니다.

다시 말해서, Java를 웹 어플리케이션을 개발하기 쉽게 만들기 위한 API(라이브러리, 클래스 등)이며 이 규약에 맞는 라이브러리나 클래스들을 상속 및 구현하여 만든 클래스 입니다.

Servlet 특징

  • 클라이언트 요청에 대해, 동적으로 작동하는 웹 어플리케이션 컴포넌트 html을 사용하여 요청에 응답
  • Java thread를 통해 동작
  • MVC 패턴 중 Controller에 해당
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속

일반적으로 웹 서버는 정적인 페이지를 제공하지만, 사용자의 요청에 의해 변화되는 무언가를 제공하는 동적인 페이지를 위해 Servlet을 사용합니다.

Servlet Container

Servlet Container는 Servlet을 관리해주는 Container로 대표적으로 톰캣(Tomcat)이 있습니다.

클라이언트의 요청을 받고 응답할 수 있도록 웹 서버와 소켓으로 통신합니다.

예를 들어, servlet이 어떠한 역할을 수행하라고 알려주는 지침서 라면, servlet container는 그 지침서를 보고 행동을 하는 수행자 라고 볼 수 있습니다.

  1. 클라이언트가 URL을 입력하면 HTTP Request가 Servlet Container로 전송
  2. 요청을 받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체 생성
  3. Web.xml을 기반으로 클라이언트가 요청한 URL이 어느 servlet에 대한 요청인지 찾기
  4. 찾은 servlet에서 service 메소드를 호출하여 클라이언트의 GET, POST 여부에 따라 doGet() 혹은 doPost() 호출
  5. doGet() 혹은 doPost() 메소드는 동적 페이지를 생성한 후, HttpServletResponse 객체에 응답
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체 소멸

JSP(Java Server Page)란?

HTML 문서에 내부적으로 자바 문법을 사용할 수 있게 하는 Java Server Page 언어

html 코드 안에 Java 코드가 존재하여 데이터를 관리하고, 클라이언트에게 데이터를 보여주기 위한 View 역할을 맡을 수 있다.

즉, 비즈니스 로직과 View 역할을 모두 맡으면서 JSP 코드가 방대해지고 유지 보수가 어렵다는 단점이 있다.

Servlet과 JSP를 보완하기 위한 MVC 패턴의 등장

Servlet는 정적인 HTML 코드에 동적으로 생성한 데이터의 정보를 넣음으로써 동적인 웹 페이지를 제공합니다. 즉, 자바 코드 안에 HTML 코드를 일일이 기입해야 합니다.

JSP는 HTML 안에 자바 코드를 넣는 방식으로 동적인 웹 페이지를 제공합니다.

이 둘은 뷰와 비지니스 로직을 한 곳에서 처리한다는 점에 한계가 있습니다.

하지만,

  • Servlet 코드는 HTML 코드를 넣는 부분이 복잡할 뿐, 데이터를 읽고 DB와 통신하는 비지니스 로직을 호출하는 부분에서는 편리합니다. 따라서 Controller 역할에 적합합니다.

  • JSP 코드는 반대로 데이터 처리, DB 통신, 비지니스 로직 호출 부분이 불편하지만 HTML 코드 안에 자바 코드를 넣는 것 이므로 View 역할에 적합합니다.

이렇게 각자의 특화된 분야가 있기 때문에 둘을 합치고 업무를 분담하여 효율적인 프로그램을 만들기 위해 MVC 패턴이 등장하였습니다.

하나의 servlet이나 JSP로 처리하던 것을 Controller, View, Model 영역으로 역할을 나누어 처리하게 되었습니다.

MVC 패턴에 대해서는 다음 글에서 더 자세히 다뤄보겠습니다.

출처

https://velog.io/@qlgks1/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-Servlet-JSP

https://kohen.tistory.com/29

https://mangkyu.tistory.com/18

0개의 댓글