[Back-end] 서블릿과 JSP

2025. 2. 24. 14:07·Development/Back-end
참고 : 쉽게 배우는 JSP 웹 프로그래밍 2판 - 송미영

 

Intro

 

웹 프로그래밍 언어는 클라이언트 측 실행 언어와 서버 측 실행 언어로 구분된다.

자바를 기반으로 하는 서블릿과 JSP는 서버 측 웹 프로그래밍 언어이다.

 

선마이크로시스템스가 자바를 기반으로 하는 서버 측 프로그래밍 방식인 서블릿을 먼저 개발했다. 하지만 서블릿 개발 방식이 쉽지 않아서 HTML 코드에 직접 삽입할 수 있도록 개발된 기술이 JSP이다. JSP는 웹 애플리케이션 서버에서 클라이언트에게 서비스될 때는 서블릿으로 변경되는 것을 보면 서블릿과 동떨어지지 않았음을 알 수 있다.

 

서블릿 : 자바 코드 안에 HTML 코드 추가

JSP : HTML 코드 안에 자바 코드 추가

 

 

1. 서블릿이란?

서블릿(Servlet)이란, 자바를 사용해 웹 페이지를 동적으로 생성하는 서버 측 웹 프로그래밍을 뜻한다. 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이며, 자바 코드 안에 HTML 코드를 포함하고 있다.

 

2. 서블릿의 특징

  • 이식 가능 (플랫폼에 독립적)
  • 클라이언트의 요청을 즉시 이행 가능
  • 자바의 멀티스레딩 기능 사용 → 여러 클라이언트 요청을 동시에 서블릿에서 채우기 가능
  • 메모리 관리 문제 & 메모리 낭비 감소

 

3. JSP란?

JSP(Java Server Pages / Jakarta Server Pages)는 자바 언어를 기반으로 하는 스크립트 언어이다. HTML 코드 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성해 웹 브라우저에 전달한다. 서블릿과 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. JSP 태그 라이브러리를 사용하는 경우 자바 코딩 없이 태그만으로 간략히 기술 가능하므로 생산성을 높일 수 있다.

 

 

4. JSP의 특징

  • 서블릿 기술의 확장 (서블릿의 모든 기능 사용 가능)
  • 유지 관리 용이 (프레젠테이션 로직/비지니스 로직으로 분리 가능)
  • 빠른 개발 (다시 컴파일하고 배포할 필요 X)
  • 서블릿에 비해 코드 길이가 짧음

 

5. 서블릿의 동작 과정

1) 클라이언트가 URL 입력 → 해당 HTTP Request 를 서버의 서블릿 컨테이너로 전송 → 서블릿 컨테이너가 HttpServletRequest, HttpServletResponse 객체를 생성

 

2) web.xml(배포 서술자)을 기반으로 사용자가 요청한 URL 분석 (어느 서블릿 객체에 대한 요청인지)

 

3) 서블릿 객체에서 service 메소드 호출 → 클라이언트의 POST, GET 여부에 따라 doGet(), doPost()를 호출 → doGet(), doPost()  메소드가 동적 페이지 생성 후 HttpServletResponse 객체에 응답

 

4) 웹 브라우저가 새로 가공된 HTML 페이지를 동적으로 처리한 결과를 보여줌. 응답이 완료되면 HttpServletRequest,  HttpServletResponse 객체 소멸

 

 

6. JSP의 동작 과정

1) 웹 브라우저가 웹 서버에 JSP 요청 → 웹 서버가 JSP 페이지임을 확인하고 웹 서버에 있는 JSP 컨테이너에 전달

 

2) JSP 컨테이너가 JSP 페이지를 서블릿 프로그램으로 변환 (*.java)

 

3) JSP 컨테이너가 서블릿 프로그램 컴파일 → *.class 생성해 웹 서버에 전달

 

4) 웹 브라우저가 새로 가공된 HTML 페이지를 동적으로 처리한 결과를 보여줌

 

 

7. 서블릿의 생명 주기

1) 로딩 단계

 

처음 요청된 경우라면? 서블릿 클래스를 메모리에서 로딩해 객체 생성함. 생성된 객체는 메모리에 계속 존재하기 때문에 이후부터는 메모리에 있는 서블릿 객체 사용

 

2) 초기화 단계 - init()

 

서블릿이 처음 요청될 때 초기화하는 메소드. 객체가 생성되면서 최초에 한 번만 호출됨. 해당 서블릿 클래스를 호출할 경우 init() 메소드 호출할 필요 없이 기존 서블릿 클래스 호출.

 

3) 실행 단계 - service()

 

서블릿 컨테이너가 요청을 받고 응답을 줄 때 필요한 서블릿 메소드. 서블릿 인터페이스를 구현한 HttpServlet 클래스의 doGet(), doPost() 등의 메소드 호출. 클라이언트의 요청이 있을 때 GET, POST 여부에 따라 실행. 여러 클라이언트의 동시 요청에도 스레드가 생성되므로 수행 속도 빠름.

 

4) 소멸 단계 - destroy()

 

서블릿 클래스 더 이상 사용 X? 서블릿 컨테이너가 주기적으로 destroy() 메소드를 호출해 제거. 제거된 서블릿 클래스를 다시 사용하려면 초기화 단계를 거쳐야함 (init() 메소드 호출)

 

 

8. JSP의 생명 주기

1) 번역 단계

 

JSP 컨테이너가 JSP 소스 파일을 서블릿으로 변환함. 또한 JSP 파일을 읽고 구분을 분석함. JSP 페이지와 페이지에 사용된 태그 라이브러리를 참조하는 사용자 정의 태그와 표준 디렉티브, 액션 태그의 구문 정확성을 검증.

 

※ 꼭 거쳐야하는 단계인가?

 

JSP 컨테이너가  페이지를 변환할 필요가 있는지 확인함. 즉, 서블릿 클래스가  JSP 페이지보다 오래된 것인지 확인. JSP 파일이 수정된 경우 서블릿으로 변환하는 작업을 수행.

 

2) 컴파일 단계

 

번역 단계에서 생성된 서블릿을 컴파일해 클래스 파일 생성. 자바 코드의 모든 구문을 검사. 즉, JSP 페이지 내의 스크립트 태그를 사용하여 삽입된 자바 코드의 구문 오류 검사.

 

3) 로딩 및 초기화 단계 - jspInit()

 

JSP 컨테이너가 앞의 번역, 컴파일 단계에서 생성된 *.class를 로딩하고 클래스의 인스턴스 작성 (인수가 없는 생성자를 사용해야함). JSP 컨테이너는 jspInit() 메소드를 호출해 인스턴스가 된 객체를 초기화함. 일반적으로 한 번만 수행되고, DB 연결, 파일 열기, 룩업 테이블 등을 초기화함.

 

4) 실행 단계 - _jspService()

 

각 클라이언트의 요청에 대해 JSP 컨테이너가 요청 및 응답 객체를 전달하는 _jspService() 메소드 실행함. 웹 브라우저가 JSP 페이지를 요청하여 페이지가 로딩 & 초기화될 때마다 JSP 컨테이너는 JSP에서 _jspService() 메소드를 호출해 응답 객체를 전달함. JSP 생명 주기가 끝날 때까지 모든 클라이언트의 요청에 대해 상호 작용하는 단계.

 

5) 소멸 단계 - jspDestroy()

 

JSP 생명 주기 완료 단계. 실행 되고 있는 JSP를 JSP 컨테이너가 jspDestroy() 메소드를 사용해 제거. DB 연결 해제, 열려 있는 파일 닫기 등을 수행해야할 때 jspDestroy() 메소드를 오버라이딩함. 해당 서블릿 인스턴스를 제거할 때, JSP 컨테이너가 어떤 활동을 정리하기 위해 jspDestroy() 메소드를 호출함.

 

 

 

감사합니다 ヾ(⌐■_■)ノ

'Development > Back-end' 카테고리의 다른 글

[Express] 알리고 API 를 이용한 문자 서비스 예제  (0) 2025.05.19
[Express] 게시글 관리 미들웨어 (express-validator)  (0) 2025.05.07
[Express] 유저 인증 미들웨어  (0) 2025.05.07
[Back-end] JWT(JSON Web Token)  (0) 2025.03.14
[Spring Boot] 간단한 게시글 CRUD  (0) 2025.02.26
'Development/Back-end' 카테고리의 다른 글
  • [Express] 게시글 관리 미들웨어 (express-validator)
  • [Express] 유저 인증 미들웨어
  • [Back-end] JWT(JSON Web Token)
  • [Spring Boot] 간단한 게시글 CRUD
knhye
knhye
  • 전체
    오늘
    어제
  • knhye
    3n1hye_
    knhye
  • 링크

    • GitHub
    • 분류 전체보기 (61)
      • Development (28)
        • Back-end (21)
        • DB (3)
        • CS (4)
      • Algorithm (6)
      • DevOps (10)
        • git (1)
        • Cloud Platform (5)
        • CICD (1)
        • Cloud Native (2)
      • Internet (2)
      • 매일메일 (6)
      • 회고 (5)
        • Capstone (2)
        • Hackathon (1)
        • 2025 (2)
      • 자격증 (1)
      • 블로그 리딩 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhye
[Back-end] 서블릿과 JSP
상단으로

티스토리툴바