본문 바로가기

Back End/Server

[Server] Java Servlet(자바 서블릿) 그리고 JSP(Java Server Page)

Java Servlet(자바 서블릿) 그리고 JSP(Java Server Page)


개요

  Java 언어를 통해  웹서버에서 동적으로 웹 페이지를 생성할 수 있는 Servelt 과 JSP에 대하여 알아보고, 둘 의 차이점을 이해한다.

 

목차

 

소개

 1. Java Servlet(자바 서블릿) 

Servlet 이란?

  Java Servlet 이란, 자바(Java) 언어를 사용하여 웹 페이지를 동적으로 생성할 수 있도록 하는 자바 클래스의 일종으로 구성된 서버측 프로그램이다. 쉽게 풀어 설명하면, 클라이언트가 서버측으로부터 무언가를 요청하면, 서버는 이러한 요청을 확인하고 다시 응답을 반환하여 주어야 하는데 이러한 역할을 하는 자바 프로그램이라고 할 수 있다. 

 

Servlet의 동작방식

출처: https://programmingnote.tistory.com/61

Servlet Register

① 소스 작성: 개발자가 소스 코드를 먼저 작성한다.

② 컴파일: 작성한 서블릿 소스코드를 컴파일하여 자바 클래스의 객체로 생성한다.

③ 등록: 생성된 서블릿을 등록해두어, 후에 요청이 들어올 때 web.xml을 기반으로 서블릿을 찾을 수 있도록 하여준다. 이 때 생성된 서블릿은 처음 실행될 때만 init() 을 통해 호출되며, 초기화 후 thread가 생성된다. 만약 서블릿 컨테이너에서 등록한 서블릿이 두 번 이상 사용된다면, 생성되어 있는 인스턴스에 thread가 생성된다.

 

Servlet Application

④ 요청: 클라이언트가 Url을 통해 요청을 입력하면 HTTP Request가 Servlet Container로 전송되며, HttpServletRequest 객체 및 HttpServletResponse 객체가 생성된다.

⑤ 실행: web.xml을 기반으로 사용자가 요청한 Url이 어느 서블릿인지 찾는다

⑥ 서블릿 메소드 실행: 찾은 서블릿에서 service() 메소드를 호출하며, 클라이언트의 GET or POST에 따라  doGet() 또는 doPost() 메소드를 호출하여 요청을 처리한다.
⑦ 데이터베이스 연동: 실행된 메소드에 맞게 연동된 DB에서 데이터를 가져와 생성된 동적 웹페이지를   HttpServletResponse 객체에 담아 서블릿 컨테이너로 넘긴다.

⑧ 응답: HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 바꾸어 요청한 클라이언트에게로 넘긴다.

⑨ 소멸: 요청 및 응답이 모두 끝나면 동적으로 생성된 HttpServletRequest 객체와 HttpServletResponse 객체는 메모리가 소멸되고 생성된 스레드는 종료된다.

 

 2. Servlet Container(서블릿 컨테이너) 

Servlet Container 란?

  Servlet Container란, Web Server Component 중 하나로 Java Servlet과 상호작용을 이루며,  Servlet을 관리 및 수행해주는 Container라고 할 수 있다. 구체적으로 Servlet의 객체를 생성하여주고, 생명주기를 관리하여주며 서블릿을 로드 및 클라이언트로부터 요청객체 및 응답객체를 생성 및 관리하여준다. 즉, Servlet이 설계도라고 한다면, Container는 이러한 설계도를 바탕으로 실질적인 작업이 이루어지는 공간이라고 할 수 있다.

 

Servlet Container의 역할

① 웹 서버와의 통신 지원

    서블릿 컨테이너는 웹 서버와의 통신을 API로 제공하여 지원해주기 때문에, 소켓을 만들거나 listen, accept 등의 작업 을 직접 처리해주지 않아도 되어 웹 서버와 손쉽게 통신 할 수 있도록 하여준다.

② 서블릿 생명주기(Life Cycle) 관리

    서블릿 컨테이너는 서블릿의 생성 및 소멸을 관리한다. 예로, 서블릿 클래스를 로딩하여 인스턴스화 하여주고, 처음 호출 시 초기화 메소드를 호출하여주며, 요청이 들어오면 요청에 맞는 서블릿을 호출하여준다. 또한 서블릿의 생명이 다 하였을 때에는 자바의 Garbage Collection(가비지 컬렉션)를 진행하여 성능 개선을 도와준다.

③ 멀티쓰레드 지원 및 관리

    서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성하고, HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 소멸한다. 원래는 이러한 쓰레드를 관리해주어야 하지만 서버가 다중 쓰레드를 생성 및 운영하여 주므로, 쓰레드의 안전성을 신경쓰지 않을 수 있도록 하여준다.

④ 선언적인 보안 관리

    일반적으로 보안관리는 XML 배포 서술자에 기록하여 관리되므로, 서블릿 혹은 컨테이너에 구현하지 않아도 되어 보안에 관한 소스코드를 수정할 일이 생겨도, 자바 소스코드를 다시 컴파일 하지 않아도 되도록 하여준다.

 

 3. JSP(Java Server Page) 

JSP(Java Server Page)란?

    웹 애플리케이션 서버에서 동작하며, HTML 내부에 Java 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 전달하여 주는 서버 사이드 스크립트 언어이다. JSP는 기존 Servlet의 복잡한 규칙에 의해 등장하여, 작성한 JSP 페이지를 웹 서버의 디렉토리에만 추가해주면 사용가능하도록 해주었기 때문에, 웹 프로그래머가 소스코드를 수정할 경우에도 디자인을 제외한 JSP 페이지만을 수정하면 되기 때문에 편리성이 높은 언어이다.

 

JSP(Java Server Page)의 동작방식

(출처) 좌:https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%84%9C%EB%B2%84_%ED%8E%98%EC%9D%B4%EC%A7%80#/media/%ED%8C%8C%EC%9D%BC:JSP_Model_2.svg 우:https://mangkyu.tistory.com/14

① Coding: 개발자가 JSP 코드를 작성한다. 

② 서블릿 변한: 작성한 JSP 소스코드를 Servlet으로 변환(브라우저가 최초로 JSP를 요청하였을 때)하여 자바 파일을 생성한다.

③ 컴파일: 변환된 Java 파일을 Class 객체(실행 가능한 파일)로 만들어준다.

④ 요청: 서블릿 클래스를 로딩하여 인스턴스를 생성한다.

⑤ 실행: 서블릿이 실행되어 요청을 받고 그에 맞는 응답을 하게 된다.

 

즉, JSP는 최초 요청시 Servlet으로 변환되어 인스턴스가 생성되고, 그 후에 JSP 객체는 요청시 마다 Servlet 형태로 응답을 주고받게 된다.

 

 4. Servlet vs JSP 

Servlet JSP
응답 시간이 짧기 때문에 JSP에 비해 빠르다.  JSP Life Cycle의 첫 단계는 JSP를 Java 코드로 변환 후 코드를 컴파일하는 것이기 때문에 상대적으로 느리다.
Java 기반 코드 HTML 기반 코드
HTML 코드가 Java로 작성되기 때문에, 코딩하기가 어렵다. HTML 내부에서 Java가 작성되기 때문에 코딩하기 비교적 쉽다.
MVC 아키텍처에서 컨트롤러 역할 MVC 아키텍처에서 사용자에게 출력을 제공하는 보기 역할
service() 함수 재정의 가능 service() 함수 재정의 불가능 
모든 유형의 프로토콜 요청을 수락 가능 HTTP 요청만 수락 가능
수정시 서버를 다시 로드하고 컴파일 후 재시작 하여야 하므로, 수정시 시간이 오래 걸리고 어렵다. 페이지를 새로 고치기만 하면 되기 때문에 수정이 쉽다.
기본 세션 관리를 제공하지 않으므로 사용자가 기본 세션 관리를 명시적으로 활성화해야 한다.  기본적으로 세션 관리를 제공한다.
서블릿을 사용하려면 동일한 서블릿 파일에 비즈니스 로직과 프레젠테이션 로직을 구현해야 한다.  JSP는 javaBeans를 사용하여 프레젠테이션 로직에서 비즈니스 로직을 분리할 수 있는 유연성을 제공한다. 
광범위한 데이터 처리를 할 수 있다.  데이터를 효율적으로 처리 할 수 없다. 
사용자 정의 태그를 작성하는 기능을 제공하지 않는다.  JSP는 JavaBeans를 직접 호출할 수 있는 JSP 태그를 쉽게 빌드하는 기능을 제공한다. 
암시적 객체가 없다. 암시적 객체를 지원한다. 
서블릿은 웹 서버에서 호스팅되고 실행된다.  JSP는 실행 전에 Java 서블릿에서 컴파일 된다. 그 후 서블릿과 유사한 수명 주기를 갖는다. 
서블릿의 맨 위에 있는 모든 패키지를 가져와야 한다.  JSP에서는 파일의 어느 곳에서나 패키지를 가져올 수 있다.






 

참고사이트

1. https://www.upgrad.com/blog/jsp-vs-servlet/#Difference_between_Servlet_and_JSP

 

JSP vs Servlet: Difference Between JSP & Servlet [2021] | upGrad blog

The article provides an elaborated view of the differences between the JSPs and Servlets. Read further to know which one will be a better choice for you.

www.upgrad.com

2. https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%84%9C%EB%B2%84_%ED%8E%98%EC%9D%B4%EC%A7%80

 

자바서버 페이지 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

3. https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF

 

자바 서블릿 - 위키백과, 우리 모두의 백과사전

서블릿은 여기로 연결됩니다. 다른 뜻에 대해서는 서블렛 문서를 참고하십시오. 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하

ko.wikipedia.org