JSP와 Servlet

Hyeonsu Bang·2021년 9월 3일
0

Web

목록 보기
2/5
post-thumbnail

이전 포스트 : WAS와 Web server 에서 짤막하게 다루었던 WAS는 클라이언트 - 서버 간의 상호작용을 처리하기 위해 만들어진 컴포넌트라는 것을 언급했다.


이번에는 HTTP 기반으로 수행되는 웹 환경에서 WAS(tomcat)가 실제로 요청을 받아 수행하고 응답하기까지, 즉 비즈니스 로직을 처리할 수 있게 해주는 기술들을 알아본다.







자바에서 개발한 웹 애플리케이션 프로그램


먼저 JSP와 Servlet 모두 클라이언트 - 서버 간의 통신을 위해 만들어진 기술이다.



Servlet; Server Applet


자바 언어로 동작하는 server-side 프로그램이다. 즉 확장자가.java 이다. front endpoint에서 요청을 받으면, 해당 uri에 매핑된 Serlvet이 서버에 접근하여 요청을 수행하고, 동작 결과를 동적으로 생성하여 클라이언트로 응답한다.

Servlet으로 선언하고 싶은 클래스를 HttpServlet 또는 GenericServlet 클래스를 상속하거나 해당 부모 클래스가 구현하고 있는 최상위 인터페이스인 Servlet 인터페이스를 구현하여 사용한다. (Servlet의 컨테이너 생성과 요청, 응답 객체에 대한 내용도 있는데, 이는 다른 포스팅에서 다루도록 한다)

Servlet만을 통해 개발하는 방식을 Model 1이라고도 한다. 내가 느낀 이 개발방법의 가장 큰 단점은, 요청과 Servlet의 매핑이 1대1로만 가능하기 때문에 요청 개수만큼 Servlet도 생성하여야 한다는 점이다. 예를 들어 상품 목록 화면이 있을 때 상품 목록 호출, 등록, 수정, 세부 내용 등 모든 기능에 대해 Servlet이 각각 필요하다. 이런 과정에서 불필요하게 중복되는 코드들이 발생한다.







JSP; Jarkarta Server Page


html 기반의 페이지에 자바 코드를 사용할 수 있게 해주는 기술이다. 클라이언트에게 보이는 페이지를 PrintWriter 클래스로 하드 코딩 할 수 있지만, 일일이 코드를 작성해야 하는 번거로움이 있기에 등장했다. JDBC를 통해 SQL 쿼리 작성할 때 하드코딩 해야하는 번거로움을 해결하기 위해 JDBC 템플릿이나 Mybatis가 등장한 것과 같은 맥락이다.


지정해놓은 태그를 통해 자바 코드를 사용할 수 있다.
  • scriptlet: <% %> 안에 자바코드 사용
  • declaration tag : <%@ %> 선언문. 필드 선언
  • expression tag : <%= %> 표현식. 코드 실행 후 리턴 등을 출력


하지만 MVC 패턴의 개발에서는 front와 backend의 명확한 분리와 유지보수를 위해 위의 자바 태그들도 사용하지 않고, apache에서 지원하는 EL과 JSTL, 또는 mustache와 같은 템플릿 엔진을 통해 서버에서 얻은 응답을 더욱 깔끔하게 출력할 수 있다.



Servlet과 JSP의 차이점


ServletJSP
자바 코드이므로 바로 컴파일된다. 속도가 JSP에 비해 빠르다.jsp-> .java->.class로 컴파일
html을 직접 작성할 경우 하드코딩해야 하므로 번거롭다html 기반에 자바코드만 쓰면 되므로 더 쉽다
MVC패턴에서 컨트롤러의 역할과 같음view의 역할과 같음
세션 관리를 따로 설정해야 한다세션 설정이 기본적으로 포함되어 있다
비즈니스로직과 프레젠테이션(리디렉션 또는 뷰)을 모두 한 Servlet에 포함해야 한다로직과 뷰를 분리할 수 있다


이 정도의 차이점이 있다. 이렇게 굳이 Servlet을 배웠던 이유는 기본적인 웹 동작이 어떻게 되는지 알기 위해서라고 했는데, 틀린 말은 아닌 것 같다는 생각을 한다.







내가 배울 때에는 두 가지 내용에 대해 확실하게 짚어 배우지는 않았다. 어차피 Spring MVC를 많이 쓰는 환경에서 해당 주제가 크게 중요하지 않을 수도 있지만, 여전히 Servlet이 자바 웹 개발의 기본이 되는 부분인 만큼 알아두면 좋을 내용이라고 생각한다.





references : https://www.upgrad.com/blog/jsp-vs-servlet/

profile
chop chop. mish mash. 재밌게 개발하고 있습니다.

0개의 댓글