HTTP와 서블릿, 서블릿 컨텍스트 - (2). 서블릿(Servlet)

Shiba·2023년 11월 7일
0

📝정리 노트

목록 보기
2/4
post-thumbnail

❓ 서블릿이란 무엇일까?

서블릿이 무엇일까? 서블릿은 다음과 같이 설명할 수 있다.

"서블릿은 자바 기반의 웹 애플리케이션 프로그래밍 기술이다."

🔎 서블릿을 사용하는 이유

좀 더 자세하게 알아보자. 우리는 앞서 http가 무엇인지, 구조가 어떻게 되어있는지에 대해 살펴보았다. 클라이언트와 서버가 http규약을 따르며 통신을 하여 정보를 주고받는다고 하였다.
하지만 http만으로는 정적인 페이지밖에 보여줄 수 없었다. 요즈음의 웹사이트처럼 요청을 다이나믹하게 일일이 서버가 전부 처리할 수 없어 오류가 나거나 지연되는 시간이 생기게 될것이다. 서블릿메소드 호출만으로 요청을 처리할수 있으며, 멀티쓰레드 환경을 이용할 수 있어 처리속도가 빠르므로 오류나 지연이 없도록 요청을 처리할 수 있다.
정리하자면, 서블릿은 다음과 같이 설명할 수도 있다.

  • 서블릿은 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
  • 서블릿은 웹 요청과 응답의 흐름을 간단한 메소드 호출만으로 체계적으로 다룰 수 있게 해주는 기술
  • 서블릿은 자바로 구현된 CGI(공용 게이트웨이 인터페이스)
    - CGI : 별도로 제작된 웹 서버와 프로그램간의 교환방식

🔷 서블릿의 특징

서블릿은 다음과 같은 특징이 있다

  • 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
  • HTML을 사용하여 Response 한다
  • JAVA의 쓰레드를 이용하여 동작
  • MVC 패턴에서의 컨트롤러로 이용
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음
  • UDP보다 처리 속도가 느림
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점 존재

⚙ 서블릿의 동작

서블릿은 어떻게 동작하는 것일까?
서블릿의 동작과정은 간단하다. 서블릿을 자바 클래스로 작성한 이후 웹 서버 안에 있는 웹 컨테이너에서 서블릿을 실행한다는 것이 전부다. 실행된 서블릿이 웹 애플리케이션 서버에 들어온 요청을 메소드를 호출하여 처리하고 리턴 값을 클라이언트로 전송하는 방식이다.

🗂 서블릿 컨테이너란?

서블릿의 동작과정에 대해 더욱 자세하게 뜯어보기 전에, 알아야하는 서블릿 컨테이너에 대해서 알아보자.
서블릿 컨테이너는 무엇일까? 말 그대로 서블릿을 담고 관리하는 컨테이너를 말한다. 스프링 컨테이너를 생각해보면 이해가 쉬울 것 같다. 스프링을 사용한 적이 있다면 알 수밖에 없는 오픈소스 서블릿 컨테이너가 존재하는데, 톰캣(tomcat)이 바로 서블릿 컨테이너이다.

📝 서블릿 컨테이너의 주요 기능

서블릿 컨테이너는 서블릿을 규칙에 맞게 관리하기도 하지만, 클라이언트가 요청을 하면 HttpServletRequest, HttpServletResponse 두 객체를 생성하여 서블릿이 동작하도록 도와주는 일도 한다.

  • HttpServletRequest
    http프로토콜의 request정보서블릿에게 전달하기 위한 목적으로 사용

  • HttpServletResponse
    요청을 보낸 클라이언트에게 응답을 보내기 위해 생성. 생성된 객체를 서블릿에게 전달하고 이 객체를 활용하여 content type, 응답 코드, 응답 메세지 등을 전송

그외에도 다음과 같은 여러 기능들이 존재한다

  • 생명주기 관리
    서블릿의 생명주기를 관리한다. 서블릿 컨테이너가 초기화될 때, 서블릿 클래스를 로딩해서 인스턴스화 하고, 초기화 메소드를 호출한다. 요청이 들어오면 적절한 서블릿 메소드를 찾아서 동작한다. 서블릿의 생명이 다하는 순간 가비지 컬렉션을 통해 메모리에서 제거한다.

  • 통신지원
    클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신을 해준다. (통신을 하기 위해 소켓을 만들고, 특정 포트를 리스닝하고, 연결요청이 들어오면 스트림을 생성해 요청받는 것까지 컨테이너가 대신해줌)

  • 멀티쓰레딩 관리
    서블릿 컨테이너는 요청이 올 때마다 쓰레드를 하나 생성한다. HTTP 서비스 메소드를 실행하고 나면 쓰레드는 자동으로 죽게된다. 만약, 동시에 여러 요청이 들어와도 멀티쓰레딩 환경으로 동시다발적인 작업을 관리할 수 있다. 또한, 한번 메모리에 올라간 쓰레드는 다시 생성할 필요가 없으므로 메모리 관리에도 효율적

  • 선언적인 보안관리
    서블릿 컨테이너가 보안과 관련된 기능을 지원함. 따라서, 서블릿 또는 자바 클래스 안에 보안과 관련된 메소드를 작성하지 않아도 된다.

🔗 서블릿의 세부적인 동작

서블릿 컨테이너에 대해 알아보았으니 본격적으로 서블릿이 어떻게 동작하는지 더욱 자세히 알아보도록하자.
앞서 배웠듯이 서블릿 컨테이너가 클라이언트에게 요청을 받으면 HttpServletRequest, HttpServletResponse를 생성한다. 그 후, web.xml파일을 기반으로 사용할 서블릿을 매핑한다. 매핑된 서블릿에서 service메소드를 호출한 후 클라이언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출한다. 호출된 메소드는 동적 페이지를 생성한 후, HttpServletResponse객체에 응답을 보낸다. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

그림으로 정리해보면 다음과 같다

  1. 서블릿 컨테이너가 클라이언트의 요청을 받으면 HttpServletRequest, HttpServletResponse 생성
  2. web.xml을 기반으로 사용할 서블릿 매핑
  3. 매핑된 서블릿에서 service() 메소드 호출
  4. 클라이언트의 요청이 GET인지 POST인지에 따라 doGet(), doPost()를 호출
  5. 호출된 doGet() or doPost()메소드는 동적 페이지 생성 후, HttpServletResponse객체에 응답
  6. 응답을 클라이언트에 전송한 후, HttpServletRequest, HttpServletResponse 객체 소멸

📄 JSP (Java Server Page)

서블릿을 검색하면 같이 따라오는 용어가 있었다. 바로 JSP라는 용어였는데 JSP는 무엇이고, 서블릿과 어떤 관계가 있어서 같이 검색이 되었던 것일까?

❓ JSP란 무엇일까?

JSP는 이렇게 설명할 수 있다.

정적인 HTML 코드에 JAVA 코드를 넣어서 동적으로 웹페이지를 구성할 수 있게 만드는 웹 애플리케이션 도구

설명을 보면 자바스크립트(JS)가 생각난 사람들도 있을 것 같다. 하지만 둘은 확실한 차이가 존재한다. JS는 클라이언트측 스크립트 언어이고, JSP는 서버측 웹 프로그래밍 중 하나라고 한다.
즉, JS-클라이언트, JSP-서버인 것이다.

🔷 JSP와 서블릿

다시 본문으로 돌아와서, JSP와 서블릿은 설명에서 알 수 있듯이 동적 페이지를 만들기위해 사용하는 웹 애플리케이션 기술이라는 점에서 같다.
그렇다면 두 기술의 차이점은 무엇이 있을까? 가장 먼저 생각할 수 있는건 형식이다. 먼저, 서블릿은 Java코드로 만들어 등록하여 HTML파일을 처리할 때 사용한다. 즉, Java코드인 서블릿 안에 HTML코드가 들어가 있다고 볼 수 있다. 하지만, JSP는 HTML코드에 Java코드를 넣는다고 하였다. 상하관계가 다른 것이다. Java코드를 중심으로하는 서블릿의 경우는 복잡한 로직구현엔 적합하지만, 화면에 표시되는 것에 대한 작성과 수정이 힘들다. 반대로 JSP는 화면에 표시되는 것에 대한 작성과 수정은 쉽지만, 소스 코드가 개발자 도구의 소스보기를 사용하게되면 소스가 모두 공개되어버린다는 단점이 존재한다.

장점단점형식
서블릿복잡한 로직구현에 적합Java코드가 중심이기 때문에
화면 작성 작업과 수정이 어려움
Java코드 안에
HTML코드가 들어가는 방식
JSPHTML코드가 중심이기 때문에
화면 작성 작업과 수정이 용이함
소스보기로 소스가 공개되어
중요 정보에 부적합
HTML코드 안에
Java코드가 들어가는 방식

마치며..

다음 글로 드디어 스프링 MVC에서 가장 많이 등장하는 서블릿 컨텍스트에 대해 정리해볼 것이다. 서블릿 컨텍스트를 정리하기 전에 서블릿과 http에 대해 내가 잘 알고 있는지 다시 한번 점검해볼 필요가 있을 것같다.

📚 참고자료

[JSP] 서블릿(Servlet)이란? - 망나니개발자

[Web] 서블릿(Servlet)이란 무엇인가? 서블릿 총정리 - 코딩팩토리

JSP_개념 정리

profile
모르는 것 정리하기

0개의 댓글