Java/Spring

[스프링] 서블릿, 서블릿 컨테이너, JSP

ImYena 2021. 9. 19. 14:11
728x90

서블릿(Servlet)

  • 웹 서버가 동적인 페이지를 제공할 수 있도록 도와주는 애플리케이션
    • 일명 동적인 페이지를 생성하는 애플리케이션, CGI
  • 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
    • Java 소스코드 속에 HTML 소스코드가 들어가는 형태
  • 자바를 사용하여 웹을 만들기 위해 필요한 기술

 

*CGI(Common Gateway Interface)

: 특별한 라이브러리나 도구를 의미하는 것은 아니고, 별도로 제작된 웹 서버와 프로그램 간의 교환 방식,

어떠한 프로그래밍 언어로도 구현 가능하며, 별도로 만들어 놓은 프로그램에 HTML의 GET/POST 방식으로 클라이언트의 데이터를 환경변수로 전달, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것.

즉, 자바 애플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 만드는 방법

 

특징

  • 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
  • HTML을 사용하여 요청에 응답
  • Java Thread를 이용하여 동작
  • MVC 패턴에서 Controller로 이용
  • UDP보다 처리 속도가 느림
  • HTML 변경 시 Servlet을 재컴파일 해야하는 단점 

 

동작 방식

  1. 클라이언트가 URL을 입력하면 HttpRequest가 Servlet Container로 전송
  2. HTTP 요청을 처리하기 위한 HttpServletRequest 객체, HttpServletResponse 객체 생성
  3. web.xml을 기반으로 요청된 URL이 어느 서블릿 클래스에 대한 요청인지 찾음
  4. 찾은 서블릿 클래스가 서블릿 컨테이너에서 실행된 적 있는지 혹은  메모리에 생성된 인스턴스가 있는지 체크
    • 처음 실행 : 인스턴스를 생성한 후 init() 호출 -> 초기화 후 스레드 생성
    • 이미 실행 : 기존 인스턴스에 스레드 생성
      • 서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재

  5. 각 스레드의 service() 호출 후 GET/POST 방식에 따라 doGet()/doPost() 호출

  6. 2.에서 생성된 HttpServletRequest 객체와 HttpServletResponse 객체를 인자로 전달

  7. doGet()/doPost() 로직에서 생성된 동적 웹 페이지 결과물은 HttpServletResponse 객체에 담김

  8. HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 바뀌어 웹서버로 전송

  9. HttpServletRequest 객체와 HttpServletResponse 객체의 메모리 소멸 및 스레드 종료

 

서블릿 컨테이너(Servlet Container) / 서블릿 엔진(Servlet Engine)

  • 서블릿을 관리해주는 컨테이너
    • 서블릿을 만들었다고 스스로 작동하는 것X, 관리 필요
    • 서블릿이 어떠한 역할을 수행하는 정의서라면, 서블릿 컨테이너는 그 정의서를 수행한다고 볼 수 있음
  • 클라이언트의 요청(Request)을 받아 응답(Response)할 수 있게 웹 서버와 소켓으로 통신하며 JSP와 서블릿이 작동하는 환경 제공
    • 대표적인 예, 톰캣(Tomcat)

 

역할

  • 웹 서버와 통신 지원
    • 개발자는 소켓을 만들고 listen, accept 등을 해야하지만, 서블릿 컨테이너가 이러한 기능을 API로 제공, 복잡한 과정을 생략할 수 있게 하여, 개발자는 서블릿에 구현해야 할 비즈니스 로직에 초점을 두게 도와줌
  • 서블릿 생명 주기 관리
    • 서블릿 클래스를 로딩하여 인스턴스화 후 초기화 및 요청이 들어오면 적절한 서블릿 메소드 호출
    • 서블릿이 생명을 다 하면 GC(Garbage Collection)을 진행
  • 멀티스레드 지원 및 관리
    • 요청이 들어올 때마다 자바 스레드 생성, HTTP 서비스 메소드를 실행하고 나면 스레드는 자동으로 죽게 됨, 원래는 스레드를 관리해야 하지만 서버가 다중 스레드를 생성 및 운영
    • 스레드 안정성
  • 선언적인 보안 관리
    • 보안 관련 내용을 서블릿 클래스/자바 클래스에 구현X
    • 보안 관리는 XML 배포 서술자에 모두 기록
      • 보안 관련 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 할 필요X

 

서블릿 생명 주기(Servlet Life Cycle)

출처 : https://woojong92.tistory.com/entry/JAVA-Servlet-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0

 

JSP(Java Server Page)

  • Java 소스코드가 들어가 있는 HTML 소스코드 
  • HTML 소스코드 속에 Java 소스코드가 들어가는 구조를 갖는 웹 애플리케이션 프로그래밍 기술
    • HTML 소스코드 속에  Java 소스코드가 <% 자바코드 %> 또는 <%= 자바코드 =%>형태로 들어감
    • 자바 소스코드로 작성된 부분은 웹 브라우저로 보내는 것이 아니라 웹 서버에서 실행되는 부분
  • WAS(Web Application Server)에 의하여 서블릿 클래스로 변환하여 사용됨

 

JSP 동작 방식

출처 : https://mangkyu.tistory.com/14

 


출처 및 참고)

 

[JSP] 서블릿(Servlet)이란?

1. Servlet(서블릿) 서블릿을 한 줄로 정의하자면 아래와 같습니다.  클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해

mangkyu.tistory.com

 

 

Servlet의 개념과 동작 과정

1. Servlet이란? - 자바를 이용해 페이지를 동적으로 생성하는 자바기반의 프로그램(?). - 웹서버가 모든 클라이언트의 요청을 받아서 처리하는데, 클라이언트의 요청이 많아짐에 따라 처리할 수 없

programmingnote.tistory.com

 

728x90
반응형