CS 지식/네트워크 & 서버

01. 서블릿 & 서블릿 컨테이너 / 싱글톤 패턴

dev.ojin 2023. 12. 23. 19:18
  • 서블릿 컨테이너 : 톰캣처럼 서블릿을 지원하는 WAS
  • WAS ⊃ 서블릿 컨테이너 ⊃ helloServlet, 어쩌구Servlet 
  • 서블릿 컨테이너가 하는 일 : 서블릿 생성/초기화/호출/종료하는 생명주기를 관리함
  • 서블릿 객체는 싱글톤으로 관리 

싱글톤 패턴 : 생성자가 여러 번 호출되더라도 실제 생성되는 객체는 하나가 되는 방식이다. 쉽게 말해서 '하나의 그릇을 재탕하는 셈'인거다..

생성자 호출될때마다 새로운 그릇을 만들고, 생성자 호출 끝나자마자 그 그릇 깨부시는 게 아니라!!

 

request,response 객체는 매번 새롭게 만드는데 반해 서블릿 객체를 싱글톤 패턴으로 관리하는 이유 :

첫번째 : request, response 객체는 HTTP 요청이 올 때마다 새롭게 만드는 것이 옳다, 왜냐하면 내가 요청이라는 것은 클라이언트(사용자)마다 요청 메세지에 담아지는 내용이 다르기 때문이다. ex. username만 하더라도 사용하는 사람마다 다를거기 때문이지

 

두번째 : 하지만 굳이, 서블릿 객체는 매번 웹 브라우저에서 HTTP 요청 메세지가 올 때마다 새롭게 만들 이유가 있을까요? (마치 fast fashion처럼.. 어 나 이거 입었었네? 버려. 아 이거 택 뗀 거보니 착용했었네 버려ㅡㅡ^) : NOPE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
    	//애플리케이션 로직   
    }

이 메소드 안에, 애플리케이션 로직만 만들면 되는 일인데~~!

(그러니깐.. HttpServlet을 상속받아서 함께 주어진 service 메서드를 상황에 맞게 재정의해서 애플리케이션 로직을 적어주면 객체 새롭게 생성 안해도 되고 재탕 완전 가능이라는 소리)

 

세번째 : 고객의 요청이 올 때마다 (/hello 칠 때마다) 계속해서 새로운 helloServlet 객체를 생성해대는 것은 비효율적이다.

그래서 최초 로딩 시점에 서블릿 객체(helloServlet 객체)를 만들어 두고 재활용, 재탕하는 것임

그래서 사실 까놓고 보면 모든 고객은 본인들이 요청할 때 같은 서블릿 객체 인스턴스에 접근하게 되는 것이다....!

 

싱글톤으로 관리하는 서블릿 객체를 사용할 때 주의할 점

  • 👾👾공유 변수 사용 주의해야 한다. 내 아이디로 로그인을 했는데, 타인의 로그인 정보가 노출되는 경우도 있다..큰일이에요~~!👾👾
  • 그리고, 서블릿 컨테이너 종료할 때 서블릿 객체도 같이 종료된다. ㅇ-<-<

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 - 인프런

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

김영한 스프링 MVC 1