우아한테코톡 (2), Servlet & Spring Web MVC

2022. 7. 8. 18:31간단한 컴퓨터 이론/우아한테코톡

728x90
반응형

본 포스팅은 우아한Tech의 테코톡 Servlet & Spring Web MVC 영상을 정리한 내용입니다.

이전 포스팅의 MVC와 비슷하게 정리하는 차원에서 영상을 보고 Servlet과 Spring Web MVC와 관련된 내용을 정리합니다.

 


Servlet & Spring Web MVC


1. 서블릿 이전의 웹 어플리케이션

1) 초창기 웹 어플리케이션

- 클라이언트가 요청을 하면 정적인 컨텐츠만 제공할 수 있었다.

 

2) CGI(Common Gate Interface)

- 동적인 데이터를 제공하기 위한 규약으로 클라이언트로부터 요청이 오면 웹서버는 CGI 구현체에게 이를 전달하여 동적인 데이터를 제공할 수 있게 되었다.

- 하지만 모든 사용자 요청마다 프로세스를 사용해서 요청을 처리하기에 무겁고 생성되는 시간이 많이 걸려 부담이 많아진다. 또한 동일한 요청에 대해 동일한 작업을 처리한다는 단점도 존재한다. 이를 해결하기 위해 서블릿이 등장한다.


2. 서블릿

1) 정의

- 자바에서 동적데이터를 제공하기위해 CGI를 기반으로 제작한 프로그램

- 각 요청에서 프로세서를 생성해서 요청을 쓰레드로 변경해 서버에서 많은 리소스를 소모하는 것을 줄이고, 동일 구현체 생성을 singleton 패턴을 적용해 문제를 해결한다.

- 따라서 효율적으로 동적 데이터를 제공할 수 있다.

 

2) 장점

- HTTP 규약에 따른 통신을 진행하는데, 매번 개발자가 요청값을 파싱하고, 응답 메세지를 만드는 것은 복잡할 수 있다. 따라서 이를 API로 제공받을 수 있도록 기능이 존재한다.

- 또한 요청을 처리하기 위한 메소드를 재정의하고 API를 사용하면 우리가 원하는 비즈니스 로직을 작성할 수 있다.

 


3. 서블릿 컨테이너와 서블릿의 동작 과정

1) 서블릿 컨테이너

- init, destroy를 통해 생성, 제거가 이뤄지는데 서블릿 컨테이너는 이를 관리하여 서블릿의 생명주기를 담당한다.

 

2) 시나리오

- 클라이언트 요청이 있었을 때 서블릿이 없다면 서블릿을 생성하고,서블릿이 있다면 서블릿 컨테이너에 있는 서블릿을 재사용한다.

 

3) 문제점

- 각 요청마다 하나의 서블릿이 일대일로 매핑되는 과정을 거치는데 서블릿마다 공통되게 실행된 로직이 반복적으로 실행/생성될 수 있다.

- 프로그램이 서블릿에 의존적이게 작성해야한다.

- 이에 따라 컨트롤러를 만들어서 요청을 사용할 수 있다.

 


4. 프론트 컨트롤러 패턴

1) 프론트 컨트롤러 패턴이란

- 매 요청마다 각 서블릿을 사용하는 것이 아닌 하나의 서블릿만을 사용해서 쓸 수 있도록 도와주고, 중복되는 부분을 없앨 수 있다.

 

2) 과정

(1) 클라이언트와 서버를 연결한다.

 

(2) 각 요청에 맞는 컨트롤러를 매핑하여 정보를 보관한다.

 

(3) 요청이 들어오면 매핑 정보를 찾아 해당 컨트롤러를 호출한다.

 

(4) 전달할 결과를 생성한다.

 

(5) 결과를 사용자에게 반환한다.

- 하지만 위와 같이 사용하면 프론트 컨트롤러의 역할이 너무 많아진다. 따라서 이를 분리하여 사용할 수 있다.


5. Spring Web MVC

1) 구조

- 프론트 컨트롤러가 dispatcher sevlet으로 변경된 것과 핸들러 어댑터를 통해 다양한 핸들러를 사용할 수 있다는 점과는 다르게 위와는 비슷하다.

 

2) 이점

- 디스패처 서블릿은 servlet WebApplicationContext와 기존과 같이 웹 요청을 담당하는 객체가 들어가 관리되고, Root WebApplicationContext엔 웹 환경에 독립적인 것이 들어가 관리된다. 따라서 비즈니스 로직에 더욱 집중할 수 있다.

 

 

출처

https://www.youtube.com/watch?v=h0rX720VWCg&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=8 

 

728x90
반응형