일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 토비의스프링
- TLS
- AWS
- DISTINCT
- Jenkins
- db
- 프로그래머스
- centos7
- docker
- Git
- WebHook
- TypeScript
- ssh
- window
- Java
- Hibernate
- 책 정리
- sample
- spring
- 코딩테스트
- Client
- github
- mariadb
- vagrant
- jdbc
- Spring Legacy Project
- Linux
- EC2
- spring boot
- SSL
- Today
- Total
Woopii Vyeolog
Servlet Container란? 본문
우선 Servler이 뭔지 간단하게 살피면,
Servlet이란?
클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램
(클라이언트의 HTTP 요청에 대해 특정 기능을 수행, HTML문서를 생성등의 응답을 하는 인터넷 서버 프로그램)
Java로 웹을 개발하기 위해 여러 Servlet들이 필요하게 되는데, 그냥 서버에 서블릿 만들어서 위치해 둔다고 클라이언트의 Request/Response 를 처리해줄리가 없다. 이러한 Servlet들을 관리하는 것이 Servlet Container이다.
Servlet Container는 서블릿의 생명주기를 관리하고 요청에 따른 스레드를 생성해준다. 또, 클라이언트의 Request 를 받아주고 Response 를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신을 해준다. 자세한 서블릿 컨테이너의 역할은 아래와 같다.
- 통신 지원
서블릿과 웹 서버가 통신할 수 있는 손쉬운 방법을 제공한다. 우리가 통신을 한다고 생각할 때 소켓을 만들고, 특정 포트를 리스닝하고, 연결 요청이 들어오면 스트림을 생성해서 요청을 받는다고 알고있는데 이 과정을 서블릿 컨테이너가 대신 해주는 것이다. 서블릿 컨테이너는 이런 통신 과정을 API 로 제공하고 있기 때문에 우리가 쉽게 사용할 수 있다. - 생명주기 관리
서블릿 컨테이너가 기동되는 순간 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 찾아서 호출한다. 만약 서블릿의 생명이 다하는 순간 가비지 컬렉션을 진행한다. - 멀티스레딩 관리
서블릿 컨테이너는 해당 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다. 즉 동시의 여러 요청이 들어온다면 멀티스레딩 환경으로 동시다발적인 작업을 관리한다. - 선언적인 보안관리
서블릿 컨테이너는 보안 관련된 기능을 지원한다. 따라서 서블릿 코드 안에 보안 관련된 메소드를 구현하지 않아도 된다. - JSP 지원
우리가 알고 있는 대표적인 Servlet Container가 Tomcat 이다.
톰캣은 서블릿 컨테이너이다. 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 한다. 보통 톰캣은 WAS 의 기능을 수행한다라고 말한다. 요즘 톰캣의 버젼이 올라가면서 웹 서버의 기능도 충분히 잘 수행하기 때문에 굳이 웹 서버와 WAS 를 나눠서 생각하지 않아도 되지만 정확한 개념을 필요하는 사람은 여기를 참고하면 된다.
참고 : (http://blog.naver.com/PostView.nhn?blogId=ssohyuny2000&logNo=155249496)
Spring MVC 역시 Servlet Container가 관리하고 있는 Servlet이다.
그래서 Servlet 없이 Spring MVC만 있으면 된다고 하는것은 비지니스 로직을 Spring을 통해 처리하겠다는것이지 Servlet이 필요없다는 얘기가 아니다.
Spring MVC로의 모든 요청과 응답은 DispatcherServlet이 관리하고 있다.
URL요청이 오면 이를 가로채서 HandlerMapping (@RequestMapping으로 봐도 무방) 에게 해당 요청을 처리할 수 있는 Controller를 찾아내어 요청을 Controller에게 보내고 결과값을 리턴해준다.
(추가)DI Container 에 대한 설명
https://woopi1087.tistory.com/28
출처 & 참고
https://jojoldu.tistory.com/28
https://jusungpark.tistory.com/15
'Spring Framework' 카테고리의 다른 글
Spring Legacy Project로 Controller 매핑 (0) | 2020.03.18 |
---|---|
Maven과 Spring Legacy Project 설정파일 (1) | 2020.03.17 |
Spring 컨테이너란?(DI Container, IoC Container) (0) | 2020.03.17 |
Spring의 정의 (0) | 2020.03.17 |
Spring Legacy Project 생성,시작하기(MVC모델) (0) | 2020.03.17 |