minghxx.blog
  • [Spring] 스프링 MVC 1편 1) 웹 애플리케이션의 이해
    2023년 10월 31일 09시 32분 43초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    스프링 MVC 1편 백엔드 웹 개발 핵심 기술 

    Session 1 웹 애플리케이션 이해

    1. 웹 서버, 웹 애플리케이션

    1) 웹서버

    HTTP 기반으로 동작

    정적 리소스(HTML, CSS, JS, 이미지, 영상) 제공

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

    HTTP 기반으로 동작

    웹서버 기능(정적 리소스 제공) + 코드 실행해 애플리케이션 로직 수행

    ▶동적 HTML, HTTP API(JSON)

    ▶서블릿, JSP, 스프링 MVC

     

    3) 웹 서버와 웹 애플리케이션 서버의 차이

    웹서버도 프로그램 실행 기능 포함, WAS도 웹서버 기능을 포함해서 서로 경계가 애매하지만

    WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있다

     

    4) 웹 시스템 구성

    ▶WAS, DB

    WAS, DB

    WAS에 많은 역할로 인한 서버 과부하 우려

    가장 비싼 애플리케이션 로직이 정적 리소스로 인해 수행에 어려움, WAS 장애 시 오류 화면 노출도 불가능

     

    ▶WEB, WAS, DB

    WEB, WAS, DB

    정적 리소스는 웹 서버 처리, WAS는 애플리케이션 로직 처리 전담해 효율적인 리소스 관리 가능

    WAS, DB에 오류 발생시 웹 서버에서 오류 화면 처리 가능


    2. 서블릿

    1) 서블릿

    HTTP 요청이 왔을 때 의미있는 비즈니스 로직(초록박스)을 제외한 모든 것을 서블릿이 자동으로 관리

    urlPatterns의 URL(/hello)이 호출되면 서블릿 코드 실행

    HttpServletRequest▶ HTTP 요청정보 사용

    HttpServletResponse▶ HTTP 응답정보 제공

     

    2) 서블릿 HTTP 요청, 응답 흐름

    ▶HTTP 요청

    WAS는 HTTP 요청이 들어오면 Request, Response 객체를 새로 만들어 서블릭 객체 호출

    개발자는 Request 객체에서 HTTP 요청 정보를 꺼내거나, Response객체에서 응답 정보를 편리하게 입력

    WAS가 Response 객체에 담겨있는 내용으로 HTTP 응답 정보 생성

     

    3) 서블릿 컨테이너

    서블릿을 지원하는 WAS ex) 톰캣

    서블릿 객체 생성, 초기화, 호출, 종료하는 생명주기 관리

    멀티 쓰레드 처리 지원

    서블릿 객체는 싱글톤으로 관리

    ▶ 최초 로딩 시점에서 서블릿 객체를 생성 후 재활용, 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근, 서블릿 컨테이너 종료 시 함께 종료

    ▶ 공유 변수 사용에 주의해야함


    3. 동시요청 - 멀티 쓰레드

    1) 쓰레드

    애플리케이션 코드를 하나씩 순차적으로 실행(한 번에 하나의 코드 라인만 수행)

    자바 main 메서드 실행하면 main이라는 쓰레드 실행

    쓰레드가 없다면 자바 애플리케이션 실행 불가능

    동시 처리가 필요하다면 쓰레드 추가 생성 → 멀티 쓰레드

     

    2) 단일 쓰레드

    요청 오면 쓰레드 할당해 서블릿 수행

    수행 중 처리지연됐는데 다른 응답이 오면 대기하게 됨

    → 오류 발생, 타임아웃 등 발생

    단일 쓰레드

    3) 멀티 쓰레드

    요청이 올 때마다 쓰레드를 생성해 서블릿 수행

    동시요청 처리가능, 리소스(메모리, CPU)가 허용할 때까지 처리 가능

    → 쓰레드 생성 비용이 비싸고 응답마다 쓰레드 생성 시 응답 속도가 느려짐 

    → 쓰레드를 교체하는 context switching 비용이 발생

    → 쓰레드를 계속 생성하면 CPU, 메모리의 임계점을 넘어 서버가 죽음

    다중 쓰레드

     

    4) 쓰레드풀

    생성 가능한 쓰레드의 최대치 설정해 관리(톰캣 기본 200개)

    쓰레드 필요시 쓰레드 풀에서 꺼내 사용, 반납

    쓰레드 풀에 쓰레드가 없으면 요청을 대기하거나 거절

    → 미리 쓰레드가 생성되어 있어 생성, 종료하는 비용과 시간 절약가능

    → 생성 가능한 쓰레드의 최대치가 있으므로 많은 요청이 들어와도 기존 요청 안전하게 처리 가능

    쓰레드풀 사용

    5) WAS의 멀티 쓰레드 지원

    멀티 쓰레드는 대부분 WAS가 처리

    개발자는 싱글 쓰레드처럼 개발


    4. HTML, HTTP API, CSR, SSR

    1) HTML

    정적 리소스 ▶ 고정된 HTML 파일, css, js, 이미지, 영상 등 제공

    HTML 페이지 ▶ 동적으로 필요한 HTML 파일 생성해 전달

     

    2) HTML API

    주로 JSON 형식 사용해 데이터 전달

    서버 to 서버로 데이터만 주고받아 UI 화면이 필요한 경우 클라이언트 처리

     

    3) SSR 서버 사이드 렌더링

    HTML 최종 결과물을 서버에서 만들어 전달

    정적 화면에 사용

    JSP, 타임리프

     

    4) CSR 클라이언트 사이드 렌더링

    HTML 내용을 자바스크립트를 사용해 웹브라우저가 동적으로 생성해 적용

    동적화면에 사용

    React, Vue.js

     

     

     

    728x90
    댓글