Programming/Web

[Java Web] Servlet이 뭐냐..?

주죵 2021. 2. 6. 16:10
728x90
반응형

Servlet이 뭐야..?

서블릿....이 대체 뭘까? 처음 일하면서 서버로그 찍힌거에 Sevelt 어쩌구저쩌구 찍힌걸 스치듯 본거 말고는 내인생에 접해보지 못한친구였다. 그러나 먹고살기위해 이젠 알아야함ㅋㅋ 내가 참고하고 있는 책에 나와있는 정의는 다음과 같다.

"서버쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다."

앞에서 봤던 동적 웹 프로그래밍에 사용되는 그런녀석인갑다. 요놈의 특징은 아래와 같이 소개된다

  • 자바로 작성되어 있어서 자바의 일반적 특징을 모두 가짐
  • 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 JSP/Servlet 컨테이너(ex-Tomcat,Jboss)에서 실행됨
  • 서버쪽에서 실행되며 기능을 수행
  • 기존 정적 웹프로그래밍 문제점을 보완해 동적인 여러 기능 제공
  • 스레드 방식
  • 보안기능을 적용하기 좋음
  • 웹브라우저에서 요청시 기능을 수행함

그냥 그런갑다 하고 넘어갈순 있겠지만 잘 와닿지는 않는다. 서블릿의 동작과정을 살펴보며 왜 이런 특징을 갖는지 알아보자

 

Servlet 동작 과정

서블릿 동작 과정

 

1)클라이언트가 서버에 요청을 하면 2)웹서버가 WAS에 위임하고 3)WAS가 서블릿을 실행하여 결과를 클라이언트에게 다시 보내준다.

여기서 알수있는 사실 첫번째는 "서블릿은 서버에서 실행된다". 클라이언트는 요청과 그에대한 응답만을 받고, 실제 동작은 서버에서 실행되서 보안적으로 안전하다.

두번째로 웹서버에선 정적인 정보만을 보여주는 역할을 한다면, WAS에서 일어나는 서블릿 실행은 클라이언트에게 동적인 정보를 제공 가능하다는 것이다.

 

Servlet API 계층 구조

서블릿은 자바로 만들어져서 계층구조를 갖는다.(상속과 인터페이스에 의한 계층구조라 생각하면 된다)

 

Servlet / ServletConfig (인터페이스)

  • Servlet의 추상메소드 선언되어있음

GenericServlet(클래스)

  • 상위 두 인터페이스 implements 한 클래스임. 일반적 서블릿 기능 구현
  • GenericServlet 상속으로 구현한 서블릿은 service()를 오버라이딩하여 구현

HttpServlet(클래스)

  • GenericServlet 상속받아 HTTP 프로토콜 사용하는 웹브라우저에서 서블릿 기능 수행
  • 웹브라우저 기반 서비스 제공하는 서블릿 만들시 사용
  • service() 호출되면서 방식에따라 doGet() 혹은 doPost()가 차례대로 호출됨

갑자기 머리가 아프다. 일단 Servlet API의 계층적 구조는 이해가 간다.  근데 doget은 뭐고 저건 뭐고? 싶을거다.(ㅋㅋ아무튼 나는 그랬음). 이를 이해하기 위해선 HttpServlet클래스의 메소드들과 Servlet의 생명주기를 알아봐야 한다.

protected doDelete(HttpServletRequest req, HttpServletResponse resp);

protected doGet(HttpServletRequest req, HttpServletResponse resp);

protected doHead(HttpServletRequest req, HttpServletResponse resp);

protected doPost(HttpServletRequest req, HttpServletResponse resp);

/****************************************************************************/
protected service(HttpServletRequest req, HttpServletResponse resp);

public service (HttpServletRequest req, HttpServletResponse resp);

위의 메소드들이 HttpServlet의 대표적 메소드들이다. do~~ 메소드들은 삭제하고 가져오고 뭐하는지 대충 짐작이 갈것이다. 하지만 요기선 아래있는 service() 메소드를 주목하자

클라이언트 요청 > public service() > protected service > 요청받은 do~~~ 메소드

간단히 한줄요약하면 위와 같다.

설명을 해보자면 위에있는 do~~ 메소드들은 service()메소드를 통해 호출된다.

또 service메소드도 public과 protected가 있다. 저걸 요청하는게 protected로 바로 되는건 아니란건 눈치챘을것이다. 클라이언트의 요청이 들어오면 public service()가 호출되고 이게 protected service()를 호출한다. 그리고 요청에 맞는 do~~를 실행한다고 보면된다. 

 

Servlet 생명주기

서블릿도 자바 클래스이므로 실행하면 "초기화 - 메모리에 인스턴스 생성 - 서비스 수행 - 소멸" 의 과정을 거친다. 요러한 라이프사이클을 가능하게 하는 메소드들을 Servlet 생명주기 메소드라고 한다.

init () - 초기화

서블릿 요청 맨처음에 한번 수행된다. 초기화작업.

do~~() - 작업수행

서블릿 요청시 매번 수행되는 클라이언트의 요청 작업이다.

destroy() - 종료

서블릿이 기능 수행하고 메모리에서 소멸될때 호출된다. 마무리작업.

 

똑같은 서블릿을 여러번 호출해도 초기화는 한번만 이루어진다. 또한 destroy와 같은 기능은 필요 없으면 생략해도 된다. 그러나 do~~ 메소드는 만드시 구현해야한다. 뭘 하긴 해야되는데 아무것도 안하면 의미가 없으니까. 명분이 있어야되는거 아이겠습니까..

"자바 웹 프로젝트로 서블릿 클래스를 생성 > web.xml이나 애너테이션으로 매핑 > 웹브라우저를 통해 메소드들이 실행되는것 확인" 해 볼수있지만 그건 생략하도록 하겠음ㅎㅎ

 

 

출처

velog.io/@cocodori/Servlet

자바 웹을 다루는 기술

728x90

'Programming > Web' 카테고리의 다른 글

HTTP  (0) 2021.06.20
REST API  (0) 2021.06.20
웹 애플리케이션  (0) 2021.01.31
웹프로그래밍의 기본  (2) 2021.01.19