[MVC 1편] 웹 애플리케이션 이해

블랑·2023년 3월 11일
0

스프링 인프런

목록 보기
1/4

정의

웹 서버 : 정적 리소스

HTTP 기반 동작, 정적 리소스 제공
(NGINX, APACHE)

웹 애플리케이션 서버(WAS) : 프로그램 로직 제공

역시 HTTP 기반 동작, 프로그램 코드를 실행하여 애플리케이션 로직을 수행.
(서블릿, JSP, 스프링 NVC)

모두 데이터를 HTTP로 통신한다. 둘의 경계는 모호하나, WAS는 애플리케이션 코드를 실행하는 데 특화되었다.

웹 시스템 구성 : WAS, DB 만으로 구성 가능

  • 단점 : 애플리케이션 로직은 비싸고, WAS가 많은 역할을 담당하여 과부하가 일어날 수 있다.

따라서 정적 리소스는 웹 서버가 처리하고, 동적 로직이 필요할 때 WAS에 위임하여 처리한다. (각각 서버를 확장하여 유동적이고 효율적인 리소스 관리 가능)

서블릿 - 서버 구축의 공통 부분을 서블릿에서 자동화

1. 사용 이유

WAS를 구현할 경우 가장 먼저 해야 하는 것은 HTTP 메시지를 파싱하여 읽어내는 것이다.

이후 파싱된 메시지 내용의 비즈니스 로직을 실행한다. 로직 실행을 제외한 파싱 등의 공통 부분을 서블릿에서 자동화하여 제공한다.

2. 동작 설명

  1. 웹 브라우저에서 호스트에게 request가 들어온다.
  2. 서블릿 컨테이너에서 request 객체가 생성되어 helloServlet이 실행된다.
  3. 응답 메시지가 웹 브라우저에 전송된다.

서블릿 컨테이너는 서블릿 객체를 생성, 호출, 생성주기 관리까지 실행한다.

3. 서블릿 컨테이너

  • 서블릿을 지원하는 WAS를 의미한다.
  • helloServlet 등의 서블릿 객체는 싱글톤으로 관리된다. 요청 시마다 새로 생성하는 것은 비효율적이기 때문이다. (따라서 공유 변수 사용을 주의해야 한다.)
  • 서블릿 컨테이너가 종료되면 함께 종료되며, 멀티 쓰레드 처리를 지원한다.
  • 멀티 쓰레드 - 장단점과 쓰레드 풀

    쓰레드 : 애플리케이션 코드를 순차적으로 실행하며, 한번에 하나의 코드만 실행한다.

    서블릿 객체를 실행하는 것은 쓰레드이다. 웹에서 여러 사용자들이 요청을 수행하면 한 쓰레드로 동시에 작업할 수 없기 때문에, 요청마다 멀티 쓰레드를 생성할 수도 있다. 다만 문제점이 존재한다.

    멀티 쓰레드 장단점

    1. 장점
    • 동시 요청 처리 가능(자원이 허용할 때까지)
    • 하나의 쓰레드가 지연되어도 나머지는 정상 동작
    1. 단점
    • 생성 비용이 비싸며, 많은 쓰레드 동작시 응답 속도 늦어짐 + 스위칭 비용 발생

    • 쓰레드 생성 제한이 없기에 임계점을 넘어 서버가 죽을 수 있음.

      이러한 단점을 해결하기 위해 쓰레드 풀 의 개념을 사용한다. (= 대기열)

      쓰레드를 죽이고 생성하는 것이 아닌 ‘대여’의 형식처럼 일정 개수를 운용한다.

      응답 시간과 쓰레드 생성/종료 비용이 절약되며 과부하 문제에 상대적으로 안전하다.

      쓰레드 풀의 적정 숫자를 찾기 위해 아파치 ab, 제이미터, nGrinder 등을 사용해 성능 테스트를 시도한다.

      중요한 것은 WAS가 멀티 쓰레드 부분을 처리한다는 것이다. 개발자는 싱글 쓰레드를 사용하듯 소스 코드를 개발하되, 싱글톤 객체를 주의해서 사용하도록 해야 한다.

HTML, HTTP API, CSR, SSR

HTTP API : 데이터만 주고 받는다. (서버 to 서버 등) 주로 JSON 통신 사용

SSR : 타임리프, JSP 등의 기술. 서버에서 HTML을 생성해서 클라이언트에 전달

CSR : 클라이언트 사이드 렌더링

추가로 참조하면 좋을 것 같은 게시글들

profile
안녕하세요.

0개의 댓글