Backend/Java, Spring

Servlet이란

jellylucy 2024. 1. 16. 13:03

정적 데이터만 전달하는 Web Server

사용자 (요청)에 따라 다른 처리를 해줄 수 없다.

동적인 처리를 해주는 웹 어플리케이션이 없다.

 

동적 데이터를 처리하는 CGI

이 때 CGI는 인터페이스이고 즉, 그것은 규약이다.

규약이 왜 필요한가?

다양한 웹서버와 CGI 구현체들이 잘 통신하려고.

 

-> CGI 사용자 증가

 

CGI 문제점 2가지 발생

통신을 Process(메모리에 적재된 프로그)로 했음 -> 많은 사용자 커버 불가

각 요청에 따른 CGI 구현체 개수

 

해결

1. Process -> Thread

2. 공유할 수 있는 CGI 구현체 = Servlet

+) 웹서버 -> Web Application Server (톰캣) : 

정적데이터 처리하는 것 -> 동적데이터 처리하는 

Servlet의 생명주기

init, Service, Destory

instance 생성, 실제 기능이 수행되는 곳, Servlet instance가 사라진다

Service내에서 메서드를 호출한다. 

이 때 메서드는 Servlet Container (Tomcat)이 호출해준다.

 

그리고 Servelt은 singleton 즉 인터페이스 즉 공유하는 자원이기에

1. 공유자원 존재

전역변수, 멤버변수

2. 스레드별로 독립적으로 갖고 있는 것

지역변수

Servlet Code

Web.xml 설정파일에 보면, WAS에게 Servlet 객체 - URL mapping 정보 알려준다

즉 url 마다 servlet이 생긴다


Spring Web MVC에서 Servlet 사용하는 방법

1. Dispatcher Servlet을 사용한다.

모든 요청이 들어왔을 때 Dispatcher Servlet으로 간다.

Web.xml 설정파일에 보면, Dispatcher Servlet 등록되어있다.

 

2. Handler Mapping

Servlet 들어오면 Handler로 가서 요청에 따라 적절한 Controller를 찾는다

_> 찾는 방법은 Spring Framework에서 제공

web.xml에 servlet을 등록하면 servlet이 사용할 설정파일이 생기는데,

여기서 어떤 handler 를 사용할지 해당 설정파일에 지정이 된다.

4가지 방식 중, AnnotationHandler 방식을 주로 사용한다.

Handler Adapter

이후 controller가 생성이 되면 이를 호출해주는 것은, Handler Adapter가 해준다.

여기서 Model, View 형태로 바꿔준다.


Spring Web MVC 유무에 대한 차이점

 

없는 경우

Url 마다 Servlet을 관리한다. 

Web.xml로 servlet관리한다.

 

 

있는 경우

Servlet은 Dispatcher 1개이다.

model view 분리시킬 수 있

'Backend > Java, Spring' 카테고리의 다른 글

[스프링부트 프로젝트] 테스트 코드 2장  (0) 2024.01.16