[WEB] Servlet 개념 추가 학습

지수·2021년 8월 31일
0

플레이데이터

목록 보기
27/50

수업 열심히 듣고 코드로 구현해보고.. 해도 뭔가 아리까리 알쏭달쏭한 느낌이라 [10분 테코톡] 🐶 코기의 Servlet vs Spring 영상을 참고하여 다시 개념을 정리해보았다.


시작하기 앞서 정확히 해두고 가야할 것,
스프링과 서블릿 중 하나를 선택하는 것 ❌
🍃 스프링으로 서블릿을 손쉽게 다루는 것 ⭕




1. 다시..Servlet이 머야?

먼저, 클라이언트의 요청을 처리하는 서버에는 Web ServerWAS(Web Applicaion Server가 있음
(이거에 대해서는 [10분 테코톡]👳‍♂️ 알리의 Web Server vs WAS 영상 추천 추천👍👍👍)

  • Web Server : 정적 페이지만 생성 가능
  • Web Application Server : 정적/동적 페이지 모두 생성 가능

서버 과부하를 피하기 위해
정적 페이지 생성을 맡는 Web Server를 앞에 두고,
뒷단에 WAS도 두어 Web Server가 처리하지 못하는 동적 페이지를 생성하도록 설계하는 것이 바람직!

서블릿 얘기한다 해놓고 뭔 소리함? (후비적)

ㄴ 왜냠! Servlet이 위의 WAS 안에서 동적 정보를 처리하거든!

고로, Servlet은 동적 페이지 생성을 위한 WAS 내부 프로그램이다!
이미지 출처 : Opendocs Beom's Blog




2. Servlet 사용 이유

가장 포괄적인 이유부터 이야기하자면,
위에서 이야기 한대로 동적 페이지 생성을 위해 동적 정보 처리가 필요하기 때문

다음으로는,
복잡한 HTTP 프로토콜 분석/처리/응답하는 과정없이(완전 없는건 아니고 개발자가 안함)
Servlet을 상속 받아 내부 메소드를 이용하여 위 과정을 대신하면
개발자들이 핵심적인 비즈니스 로직 처리에만 집중할 수 있기 때문

ㄴ 보다 편리하게 개발 가능, 그 외 중요한 부분에 집중 가능

ㄴ 처리할 요청 메서드(doXXX)를 필요에 따라 재정의 한 뒤 사용하면 끝-★




3. Servlet Container 속 Servlet

  • 서블릿 컨테이너는 설정 파일을 참고하여 매핑할 서블릿 확인
  • 해당 서블릿이 존재한다면 그대로 사용, 존재하지 않는다면 생성(init())
  • 서블릿 컨테이너에 스레드 생성, HttpServletRequest, HttpServletresponse 생성, 이 둘을 인자로 하는 service 실행(doGet(),doPost(),service())
  • service 실행이 끝나면 HttpServletRequest, HttpServletresponse 소멸
  • 서블릿은 싱글톤으로 관리되기 때문에 사용 후 소멸되지 않고, 다음에 동일한 요청이 들어왔을 때 재사용

ㄴ 서블릿 컨테이너는 서블릿 생명주기(life cycle)를 관리하는 객체!

ㄴ 서블릿 생성, 호출, 소멸은 개발자가 ❌, 서블릿 컨테이너가 위임 받아서 ⭕ !




3. 프론트 컨트롤러 패턴

이미지 출처 : [10분 테코톡] 🐶 코기의 Servlet vs Spring (7'25'')

서블릿을 개별적으로 다루는 왼쪽 그림과 같은 설계는
요청마다 서블릿을 정의하고, 요청을 수행할 때마다 매번 스레드를 생성함
(게다가 각 서블릿 내부에 공통 로직까지 존재하면..정말 비효율적ㅠ)

오른쪽 그림과 같이 프론트 컨트롤러 패턴으로 설계하면
하나의 서블릿만 정의하고 해당 서블릿이 모든 요청을 수행함

ㄴ 중복되는 공통 로직을 분리하여 "프론트 컨트롤러"에 위임

ㄴ 이 패턴에서 프론트 컨트롤러 역할을 하는 서블릿이 "Dispatcher Servlet"



그럼 오늘은 여기까지~(찡긋)

📍 이것 저것 찾아보면서 정리했는데 부족한 부분이 많습니다.
📍 잘못된 부분이 있다면 댓글로 도움 부탁드립니다👍

profile
사부작 사부작

0개의 댓글