웹 시스템 구성과 서블릿에 관한 간단 정리

박경현·2023년 3월 21일
0

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 듣고 챕터 1을 정리한 내용이다!

웹 서버 vs 웹 어플리케이션 서버(WAS)

웹 서버는 정적페이지를 제공하는데 사용된다!

WAS는 동적 리소스 또한 제공이 가능하다!, 프로그램 코드를 실행해서 어플리케이션 로직 실행가능!

웹 시스템을 WAS로만 구현한다면?

보이다 시피 정적 처리도 WAS에서 처리하게 된다면
WAS에 과부하가 와서 제대로 처리가 안될 확률이 높다
이렇게 된다면 화면조차 나오지 않아서 어떤 오류인지 알기 어려울 수 있다!

WAS + 웹서버의 조합으로 만들자!

정적 리소스는 웹서버가 처리!, WAS는 동적처리만!
정적리소스가 많으면 Web 서버만 증설하면 됨!!

서블릿

HTML Form으로 데이터를 전송! => 웹 어플리케이션 서버를 내가 1-10까지 전부 구현한다면?

일단 HTTP 메시지가 들어오는데 이걸 파싱해야함!
그리고 post인지, /save URL이 맞는지 등 여러개의 조건들을 직접 확인해야함!
그 후 맞다면 비지니스 로직도 실행!!
처리 완료하면 HTTP 응답메시지도 직접 만들어서 보내야함! 200대 성공같이해서!

비지니스 로직이 핵심인데 부가적인게 너무 많다!! => 그래서 서블릿이 부가적인 부분 전부 해결!

@WebServlet(name="helloServlet", urlPatterns="/hello")
public class HelloServlet extends HttpServlet {
	@Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    	//어플리케이션 로직 생성!
    }
}

urlPatterns 의 url이 호출되면 서블릿 코드가 실행!
http 요청정보와 응답정보를 편리하게 제공!

그래도 http 스펙의 기본은 알아야함!

서블릿 컨테이너가 서블릿들 관리!

서블릿 컨테이너

WAS안에는 서블릿 컨테이너가 있고 여기서 서블릿을 생성, 호출, 관리등을 해줌!
서블릿 객체도 당연히 싱글톤!!
동시 요청을 위한 멀티쓰레드 처리 지원 => 이게 핵심!!

동시요청 처리에 유용한 멀티 쓰레드!

웹 브라우저에서 서버로 요청하면 WAS가 서블릿을 호출 => 누가 서블릿 객체를 생성하고 호출 할까?

쓰레드가 호출!!

어플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드가 함
자바 메인메서드를 실행하면 main이라는 이름의 쓰레드가 실행!
쓰레드는 한번에 하나의 코드라인만 수행, 동시처리를 하려면 쓰레드 추가로 만들어야함!

특정 상황
다중 요청시에 요청1의 처리가 지연됨
이때 요청2가 연결 -> 쓰레드 하나니까 대기!!, 둘다 죽었음!

다중요청이 올때 쓰레드를 무한으로 만든다면?

cpu가 많이 필요하고, 임계점 넘어버리면 서버가 다운된다!
컨텍스트 스위칭 비용이 심하게 발생! (코어가 1개이고 쓰레드가 2개면 번갈아 사용하는데 이때 컨텍스트 스위칭 비용 발생!)

다중요청에 대비하기 위해 쓰레드 풀을 만들어 놓자!!

그래서 내부에 Thread 풀을 만든다! ->다시 반납도 쓰레드 풀에!!
미리 만들고 빌려쓰고 놔두는 형식!,
200개 이상의 요청이 들어올때 무한 생성이 아닌 쓰레드 대기 및 거절이 가능!
미리 생성해두었기 때문에 cpu가 절약되고 응답 시간이 빠름

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글