서블릿(Servlet)

HYUNBIN CHO·2021년 4월 22일
0

spring

목록 보기
16/23
post-thumbnail

🔷 서버의 업무

🔸 서버가 처리하는 많은 업무들 중 비지니스 로직 실행을 제외한 다른 모든 부분을 서블릿이란 것이 대신 해준다.(보통은 서블릿을 지원하는 WAS가 처리 해준다.)

🔷 서블릿

🔹 서블릿의 형태

@WebServlet(name="helloServlet", urlPatterns="/hello")
public class HelloServlet extends HttpServlet{
	@Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
    ...
   }

🔸 urlPattern(/hello)이 호출되면 서블릿 코드가 실행된다.
🔸 HttpServletRequest : HTTP 요청 정보를 편리하게 사용할 수 있다.
🔸 HttpServletResponse : HTTP 응답 정보를 편리하게 제공할 수 있다.

🔹 서블릿의 HTTP 요청, 응답 흐름

  1. HTTP 요청 시
  2. WAS : Request, Response 객체를 새로 생성 후 서블릿 객체 호출한다.
  3. Request객체에서 HTTP 요청 정보를 꺼내서 사용한다.
  4. Response 객체에 HTTP 응답 정보를 담는다.
  5. WAS : Response 객체에 담겨 있는 내용으로 HTTP 응답정보를 생성한다.

🔹 서블릿컨테이너

🔸 서블릿을 지원하는 WAS(Tomcat 등)를 서블릿 컨테이너라고 한다.
🔸 이 서블릿 컨테이너는 서블릿 객체를 생성, 호출, 종료한다. ➡️ 서블릿의 생명주기 관리
🔸 싱글톤으로 서블릿 객체를 관리한다.(request, response는 요청이 올 때마다 항상 새로 생성되지만, helloServlet이라는 객체는 한 번만 생성되어 싱글톤으로 관리된다)
🔸 JSP도 서블릿으로 변환되어 사용한다.
🔸 멀티 쓰레드 처리를 지원한다.

🔹 멀티쓰레드

🔸 클라이언에서 요청을 하면 TCP/IP 커넥션 연결을 하고 서블릿이 호출된다.
🔸 근데 누가 서블릿을 호출하지? ➡️ 쓰레드가

🔹 쓰레드란 ?

🔸 애플리케이션 코드를 하나하나 순차적으로 실행하는 것
예_ 자바 main메서드를 실행하면 main이라는 이름의 쓰레드가 실행된다.
🔸 쓰레드는 한번에 하나의 코드라인만 수행한다 ➡️ 동시 처리가 필요한 상황이면 쓰레드를 추가로 생성해서 수행

➡️ 가장 쉬운 방법 : 요청이 올 때마다 쓰레드를 생성

🔸요청이 올 때마다 쓰레드를 생성하는 방법의 단점 :
- 쓰레드의 생성비용이 비싸다. ➡️ 고객요청이 올 때마다 생성하면 응답 속도가 늦어질 수 밖에 없다.
- 쓰레드는 컨텍스트 스위칭 비용이 발생한다.
- 쓰레드의 생성은 제한이 없다 ➡️ 고객 요청이 너무 많이 오게 되면 CPU나 메모리의 한계점을 넘어서 서버가 죽을 수 있다.

➡️ 그래서 WAS 내부에 쓰레드 풀이라는 것이 구현되어 있다.

🔹 쓰레드풀

🔸 쓰레드가 필요하면 생성되어 있는 쓰레드를 꺼내서 사용하고 다 쓰면 풀에 반납한다.
🔸 쓰레드가 모두 사용중이라면?
➡️ 요청을 거절하거나 지정 숫자만큼만 대기하도록 설정이 가능하다.

🔸 쓰레드 풀 사용의 장점
- 쓰레드가 미리 생성되어 있기 때문에 쓰레드를 생성하고 종료하는 데 드는 CPU를 절약할 수 있고 응답속도가 빠르다.
- 생성가능한 쓰레드의 최대치를 설정할 수 있기때문에 예상을 넘는 요청이 와도 기존의 요청은 안전하게 처리할 수 있다.

‼️실무 TIP

🔸 WAS의 주 튜닝포인트는 최대 쓰레드 수!!
🔸 최대 쓰레드 수를
- 너무 적게 설정하면 : 동시요청이 많이 오면 클라이언트 응답 지연이 너무 자주 발생
- 너무 많이 설정하면 : 동시 요청이 많으면 CPU, 메모리 리소스 한계 초과 ➡️ 서버 다운
🔸 장애가 발생한다면
- 클라우드의 문제라면 서버를 먼저 늘리고 튜닝을 한다.
- 클라우드의 문제가 아니면 튜닝을 열심히.. 한다.






https://www.inflearn.com/course/스프링-mvc-1/

profile
백견이 불여일타

0개의 댓글