이전 강의가 마무리 되고, 스프링 MVC 1편으로 넘어왔습니다.
이 강의의 목표: 스프링 MVC가 어떻게 진화해왔는지 과거~현재까지의 과정을 이해하자. 각 기능을 왜 쓰는지 제대로 알고 사용하기 위한 것이다.
웹 서버, 웹 애플리케이션 서버
이전 블로깅에 했던 내용이다
웹 서버는 정적 리소스(html 등)를 제공하고 웹 애플리케이션 서버(WAS)는 웹 서버의 기능 + 동적 리소스(애플리케이션 로직의 결과 등) 제공을 한다.
WAS가 웹 서버의 기능을 포함하고 있지만 모든 역할을 위임하면 과부하가 오니, 분산시켜서 사용하자.
서블릿
서블릿이 할 일: 웹 브라우저가 WAS에 요청을 보내면 비즈니스 로직을 제외한 과정을 처리한다. 기존의 http 요청을 처리하기 위한 소켓 연결, 메시지 파싱, 작성의 작업을 서블릿이 대신 해줘서 로직만 구현하면 된다.
서블릿은 스프링 빈 컨테이너처럼 서블릿 컨테이너가 있다. 서블릿 컨테이너가 서블릿의 생명주기를 관리해주고 싱글톤으로 관리해준다. 서블릿은 동시 요청을 처리하기 위해 멀티 쓰레드도 지원한다. 그래서 따로 신경쓰지 않아도 알아서 처리가 되긴 한다.
동시 요청 - 멀티 쓰레드 [중요]
서블릿에 요청이 하나 들어오면 그것을 처리하는 데 하나의 쓰레드가 실행된다. 만약 여러 개의 요청이 들어오면 그때마다 쓰레드를 하나씩 늘려나가는데, 그것이 멀티 쓰레드이다. 다중 요청이 들어왔을 때 하나의 쓰레드만을 사용하면 요청이 지연되니 이를 해결하는 두 가지 방법이 있다.
요청 마다 쓰레드를 생성하는 것이 하나의 방법인데, 이는 동시 요청 처리가 가능하고 리소스의 허용치 내에서 처리 가능하지만, 쓰레드 생성 비용이 비싸고 제한이 없어서 허용치를 넘어버리면 서버가 죽을 수 있다.
이를 해결하기 위해 WAS에는 쓰레드 풀이 만들어져있다. 미리 쓰레드가 생성되어 있어, 필요한 만큼 요청이 사용하는 방식이다. 쓰레드 풀을 사용하면 생성 최대치를 정해서 쓰레드를 보관하고 사용할 수 있어, 쓰레드 생성 비용을 아낄 수 있고 응답속도도 빨라지며 과도한 요청에도 안전하게 처리할 수 있다.
어찌 되었든, 멀티 쓰레딩은 WAS가 알아서 처리하기 때문에 싱글 쓰레드처럼 개발할 수 있다. 하지만 싱글톤 객체가 여러 개가 호출되면서 멀티 쓰레드가 작동하기 때문에 싱글톤 객체를 사용하는 것, 공유 변수와 멤버 변수의 사용에만 주의하면 된다.
HTML, HTTP API, CSR, SSR
html: 보통은 정적 리소스로 고정된 html, css 등을 제공하지만, WAS에서는 동적으로 html을 생성해서 웹 브라우저가 html을 해석해서 화면에 띄울 수 있게 할 수 있다.
http api: html 대신 json 형식을 사용해 데이터를 주고 받는다. 이는 웹-서버 간의 통신만이 아니라 서버-서버, 앱-서버와 같은 다양한 시스템에서 호출할 수 있다.
csr(client side rendering): 웹 브라우저에서 html을 동적으로 생성하는 것이다. 앱처럼 부분마다 변경할 수 있다. 지도가 주된 예시 기능이다.
ssr(server side rendering): 서버에서 최종적으로 html을 생성해서 클라이언트로 전송해주는 방식이다. 대표적인 예시가 thymleaf이다.
자바 백엔드 웹 기술 역사
과거에는 서블릿, JSP를 거쳐 MVC를 오래 사용하다가, 스프링에서 현재는 애노테이션 기반의 MVC가 자리를 잡게 되었다. 그리고 스프링 부트가 등장하면서 빌드에 WAS가 포함되어 빌드 배포가 단순화 되었다.
다음 주차에는 서블릿을 사용해 http 요청을 받는 과거의 방법을 되짚어보는 과정이 이어질 예정입니다.
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2025 1학기 스프링부트 스터디] 장민주 #5주차 (0) | 2025.05.13 |
---|---|
[2025 1학기 스프링부트 스터디] 여민호 #5주차 (0) | 2025.05.13 |
[2025 1학기 스프링부트 스터디] 이종윤 #4주차& 5주차 (0) | 2025.05.12 |
[2025 1학기 스프링부트 스터디] 김민서 #5주차 (0) | 2025.05.11 |
[2025 1학기 스프링부트 스터디] 고윤정 #5주차 (1) | 2025.05.11 |