매번 개발을 할 때마다 Servlet과 Spring에 대해서 용어는 들어보기는 했지만, 그 뜻들은 잘 모르고 지나친 적이 많았다. 오늘은 그들의 차이가 무엇인지 알아보고 그걸 글로 정리하고자 한다.
Servlet이란?
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
(출처 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF )
Servlet의 정의는 위와 같은데 사실 이렇게 적어도 어떤 것인지 처음 접하는 사람들은 감이 잘 안 잡힐 것이다. 나도 피상적으로만 이해하고 도대체 어떤것인지는 저 위의 문장만으로는 파악하기 힘들었다. Servlet은 간단하게 말하자면 자바의 웹페이지를 동적으로 만들기 위한 기술이다. 웹에서 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 바로 Servlet이며, 이 페이지를 생성하는 어플리케이션을 CGI라고 한다.
저번 글 내용을 다시 되짚어 보며 생각하자. Web에서는 정적인 페이지만을 제공할 수 있다. 그 한계를 극복해 동적인 서비스를 제공하는 것이 WAS이며 WAS가 동적 페이지를 생성 할 수 있는 이유는 jsp와 Servlet을 실행시킬 수 있는 웹 컨테이너를 가지고 있기 때문이다. 이들은 미들웨어로 들어온 요청이 동적 요청이면 웹 컨테이너를 거쳐 동적 페이지를 만들기 위한 작업을 수행한 뒤에 Web Server로 돌려준다.
(이전글 WAS란? : https://velog.io/@eprnfmfmfm/64일차-WAS란 )
그리고 여기서 Spring Web MVC를 Servlet과 함께 다루는 이유는 Spring Web Mvc에서 Servlet을 사용하기 때문이다. Servlet은 이런 MVC 구조에서 Controller로 사용된다.
웹 프로그래밍에서는 정적 데이터만을 사용하다 동적 데이터 처리에 대한 요구가 생기면서 CGI 구현체(c, php)가 등장하며 동적 서비스가 시작되었다. 하지만 CGI 방식으로 통신하는 것에는 몇 가지 단점이 있다.
이러한 단점을 극복하기 위해서 생긴 것이 *싱글톤 패턴으로 구현 할 수 있는 Servlet이다. Servlet을 이용하면 리퀘스트마다 다른 구현체를 생성하는 것이 아닌 Servlet 통해 연결해 주기만 하면 되기 때문에 관리가 더욱 쉬워졌다.
*프로세스
- 실행중인 프로그램의 인스턴스를 메모리를 통으로 가지면서 적재한다.
<-> 스레드 - 메모리를 공유하며 생성시간도 프로세스보다 단축했다.*싱글톤 패턴
- 객체의 인스턴스가 오직 1개만 생성되는 패턴.
Servlet은 javax.servlet.http.HttpServlet클래스를 상속해서 구현할 수 있다. 그 동작 방법은 다음과 같다.
(출처 : https://mangkyu.tistory.com/14)
*web.xml
- Serlvet Container가 가지는 설정파일로 Servlet에 대한 이름과 매핑 정보가 담겨져 있다. 이 설정 파일에 어떤 식으로 매핑할 것인지를 등록해야한다.
Spring web mvc에서는 dispatcher Servlet을 이용해서 사용한다. 여기에서는 모든 요청이 Dispathcer Servlet으로 가며, 이 요청에 맞춰 Controller를 찾는다. 이때 매핑하는 방식으로는 디폴트로 Bean의 이름과 Url을 Mapping하는 방식이 설정되어있고, Annotaion @RequestMapping으로 매핑도 가능하다. 이걸 Handler Mapping이라고 하는데.. 더 자세한 내용은 다음 글에서 다루도록 할 예정이다.
https://youtu.be/2pBsXI01J6M
https://mangkyu.tistory.com/14
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF