서블릿이란, 웹 애플리케이션을 만들 때 필요한 인터페이스이다.
즉, req/res 흐름을 간단한 메서드 호출만으로 다룰 수 있게 해주는 기술이다.
개발자는 서블릿을 통해 비즈니스 로직에만 집중할 수 있다.
- urlPatterns 의 url이 호출되면 서블릿 코드가 실행된다.
- 이를 통해 개발자는 http 스펙을 편리하게 사용할 수 있다.
- MVC 패턴에서 컨트롤러로 사용된다.
1. WAS는 request, response 객체를 새로 만들어서 서블릿 객체를 호출한다.
2. 개발자는 request 객체에서 http 요청 정보를 편리하게 꺼내서 사용한다.
3. 개발자는 response 객체에 http 응답 정보를 편리하게 입력한다.
4. WAS는 response 객체에 담겨있는 내용으로 http 응답 정보를 생성한다.
서블릿 동작 과정
1. servlet request, response 객체를 생성한다.
2. 설정 파일(web.xml)을 참고하여 매핑할 servlet을 확인한다.
3. 해당 서블릿 인스턴스의 존재 유무를 확인하여 init() 메서드를 호출하여 생성한다.
4. 서블릿 컨테이너에 스레드를 생성하고 service 를 실행한다.
5. 응답 처리 후 destroy() 메서드를 실행하여 servlet request, response 객체를 소멸한다.
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
- 서블릿 컨테이너는 서블릿 생명주기를 관리한다.(생성-초기화-호출-종료)
- 싱글톤으로 관리한다. 공유 변수 사용에 주의한다!
- jsp도 서블릿으로 변환 되어서 사용된다.
- 동시 요청을 위한 멀티 스레드 처리를 지원한다.
스레드
- 애플리케이션 코드를 하나하나 순차적으로 실행하는 것
- main 메소드
- 스레드가 없다면 자바 애플리케이션 실행 불가능
- 스레드는 한번에 하나의 코드 라인만 수행
- 동시 처리가 필요하면 스레드 추가 생성
요청마다 스레드를 생성한다면...
장점 | 단점 |
동시 요청 처리 가능 | 생성 비용 비쌈 |
리소스(CPU, 메모리)가 허용할 때까지 처리 가능 | context switching |
하나의 스레드 지연되어도 나머지 정삭 동작 | 스레드 생성 제한 없음 -> 메모리 임계점 넘으면 서버 죽음 |
스레드 풀
- 특징
- 필요한 스레드를 스레드 풀에 보관하고 관리한다.
- 스레드 풀에 생성 가능한 스레드의 최대치를 관리한다.
- 사용
- 스레드가 필요하면, 이미 생성되어 있는 스레드를 풀에서 꺼내어 사용한다.
- 사용을 종료하면 스레드 풀에 반납한다.
- 사용가능한 스레드가 없다면, 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.
- 장점
- 스레드가 미리 생성되어 있으므로, 스레드 생성/종료 비용이 절약되고 응답 시간이 빠르다.
- 생성 가능한 스레드의 최대치가 있으므로 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
하지만, 이런 멀티 스레드에 대한 부분은 WAS가 처리한다!
개발자는 멀티 스레드 관련 코드를 신경쓰지 않아도 된다.
따라서 싱글 스레드 프로그래밍을 하듯이 편리하게 코딩을 하면 된다.
하지만, 멀티 스레드 환경이기 때문에 싱글톤 객체는 주의해서 사용해야 한다!
'스프링 MVC' 카테고리의 다른 글
서블릿 (0) | 2022.09.06 |
---|---|
HTML, HTTP API, CSR, SSR (0) | 2022.09.04 |
웹 애플리케이션의 이해 (0) | 2022.09.04 |