[스프링 MVC] 1. 웹 어플리케이션 이해

heyhey·2023년 3월 30일
0

Spring

목록 보기
23/23

현재 대부분의 웹과 앱은 HTTP를 이용해 데이터들을 전송하며 사용됩니다.
HTML,json,xml 등 대부분의 데이터들을 전송할 수 있습니다.

웹 서버

HTTP 기반으로 동작합니다.
정적 리소스를 제공합니다.
정적 파일 (HTML,CSS,JS) 파일을 제공할 수 있습니다.

NGINX,APACHE 등이 있습니다.

웹 애플리케이션 서버 (WAS)

HTTP 기반으로 동작합니다.
웹 서버 기능 + 정적 리소스 제공 가능
프로그램 코드를 실행해, 애플리케이션 로직을 수행합니다.

TOMCAT이 대표적입니다.

웹서버도 프로그램을 실행하는 기능을 포함합니다.
웹 애플리케이션 서버도 웹 서버의 기능을 제공합니다.
WAS 는 애플리케이션 코드를 실행하는데 더 특화되어있습니다.


그래서 WAS에서 모든 파일을 제공하는 로직을 만들었습니다.
하지만 애플리케이션이 에러가 나면 WAS가 멈춰버리게 됩니다.
HTML 파일도 WAS에서 제공했기 때문에 WAS가 멈추면 어떤 화면도 볼 수 없습니다.

그래서 우리는 정적 리소스(HTML)을 웹 서버에 두고 WAS에서는 동적인 처리가 필요한 애플리케이션 로직만 처리하게 합니다.

이렇게 되면 오류화면을 보여줄 수 있는 기능이 가능하게 됩니다.

서블릿

WAS에서 지원해주는 기능입니다.
HTTP 통신에서, 요청,응답 스펙 등을 편리하게 사용할 수 있습니다.

HTTP 요청의 흐름

  1. HTTP 요청이 옵니다.

  2. WAS는 Request,Response 객체를 새로 만들어서 서블릿 객체를 호출합니다.

  3. 우리는 Request 객체에서 HTTP 요청 정보를 꺼내서 사용합니다.

  4. 또한 Response 객체에 응답정보를 편리하게 입력합니다.

  5. WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성합니다.

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS를 호칭합니다.

  • 서블릿 컨테이너는 서블릿 객체를 생성 초기화 호출 종료하는 생명주기를 관리합니다.

  • 서블릿 객체는 싱글톤으로 관리합니다.

  • JSP도 서블릿으로 변환되어서 사용됩니다.

  • 멀티 쓰레드를 지원합니다.

멀티 쓰레드

요청마다 쓰레드를 생성한다면?

  • 쓰레드의 생성비용이 비쌉니다. 그래 쓰레드를 생성하면 응답속도가 늦어집니다.
  • 쓰레드는 컨텍스틑 스위칭 비용이 발생합니다.
  • 쓰레드 생성에 제한이 없기 때문에, 서버가 죽을 수도 있습니다.

쓰레드 풀

쉬는 쓰레드(?)가 있는 곳입니다.

  • 필요한 쓰레드를 풀에 보관하고 관리합니다.

  • 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리합니다. (톰캣은 200개를 기본으로 설정합니다.)

  • 쓰레드가 필요하면, 이미 있는 쓰레드를 풀에서 꺼내 사용합니다.

  • 사용을 종료하면 쓰레드 풀에 해당 쓰레드를 반납합니다.

  • 최대치를 넘으면, 대기하거나 거절할 수 있습니다.

장점

  • 쓰레드가 생성되어 있으므로,쓰레드를 생성 종료하는 비용이 줄고, 응답 시간이 빠릅니다.
  • 생성 가능한 쓰레드의 최대치가 있으므로, 너무 많은 요청이 들어와도 기본 요청은 안전하게 처리 가능합니다.

WAS 의 주요 튜닝 포인트는 최대 쓰레드 수이다.

  • 낮게 설정하면 => 클라이언트가 못들어온다.
  • 높게 설정하면 => 동시 요청이 많으면 cpu,메모리 리소스 임계점 초과로 서버가 다운됩니다.

적정 숫자는 어떻게 찾나요?

  • 애플리케이션 로직의 복잡도, cpu, 메모리, io 리소스 상황에 따라 모두 다릅니다.
  • 성능 테스트
    • 실제 서비스와 유사한 환경에서 테스트를 해야합니다.
    • 아파치 ab, 제이미터, nGrdnder

SSR

서버에서 최종 HTML을 생성해서 클라이언트에 전달합니다.
보통 정적인 화면에 사용합니다

CSR

HTML 결과를 JS를 사용해 웹브라우저에서 동적으로 생성해서 적용합니다.

profile
주경야독

0개의 댓글