섹션1) 웹 애플리케이션 이해

개발새발log·2022년 4월 26일
0

스프링 MVC 1편

목록 보기
1/3

✅ 김영한 님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 공부하며 정리한 글입니다.

웹서버 vs. 웹애플리케이션서버

📌 웹서버는 정적 리소스 제공, 웹애플리케이션서버는 애플리케이션 로직 실행

  • WAS는 애플리케이션 코드를 실행하는 데 특화됨!
  • Java는 서블릿 컨테이너 기능을 제공하면 WAS

웹서버

  • HTTP 기반으로 동작하는 서버로, 주로 정적 리소스를 제공함
    - ex. NGINX, APACHE

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

  • 프로그램 코드를 실행해서 애플리케이션 로직 실행 ▶️ 사용자마다 다른 결과 제공 가능
  • 동적 HTML, HTTP API/서블릿, JSP, Spring MVC
    - ex. Tomcat

웹 시스템 구성하기

  1. WAS, DB로 구성된 경우 (WAS만 가지고 시스템 구축하는 경우)
    WAS : 1. 애플리케이션 로직 2. HTML, CSS, JS, 이미지 등의 정적 리소스
  • 단점:
    - 너무 많은 역할을 맡게 된다 -> 이는 서버 과부하로 이어질 수 있음
    - WAS가 죽으면 접근 안됨 (오류 화면조차 노출 불가)
  1. WEB, WAS, DB 구성 (개선)
    웹서버: 정적 리소스 처리
    WAS: 애플리케이션 로직 (동적인 처리)
  • 장점:
    - WAS/DB 단에서 장애가 나더라도 WEB서버는 오류 화면(정적 HTML)을 표출할 수 있음
    - 프로그램 특성 상 정적 리소스가 많이 필요하면 웹서버 증설, 애플리케이션 리소스가 더 필요하면 WAS 증설

서블릿

WAS를 직접 구현하는 경우, 백엔드 개발자는 1. HTTP 요청 메시지 파싱해서 읽기, 2. 비즈니스 로직 구현 (DB에 저장 요청 등), 3. HTTP 응답 메시지 생성을 해줘야 함 👉 여기서 의미 있는 작업은 2

서블릿은 2. 비즈니스 로직 구현 (DB에 저장 요청 등)을 제외한 모든 일을 해준다!!
즉, request 읽어 들이고 response 생성 👉 개발자는 가져다 쓰기만 하면 OK!

서블릿 컨테이너와 서블릿 객체

  • 서블릿 컨테이너는 생성, 초기화, 호출, 종료 등 서블릿 객체의 생명 주기 관리를 주로 함
  • 서블릿 객체는 singleton으로 관리됨
    ⚠️ 주의: 공유변수 사용
  • 동시요청을 위한 멀티스레드 처리 지원은 WAS가 알아서 해줌
    서블릿 객체를 누가 호출?? = 쓰레드

쓰레드

애플리케이션 코드 하나하나 실행하는 단위 ▶️ 동시처리 하려면? 여러개의 쓰레드 필요

  • 요청마다 쓰레드 생성하는 경우
    ➕ 동시요청 처리 가능, 하나의 쓰레드가 지연되더라도 나머지 정상 작동
    ➖ 쓰레드 생성 비용 큼, context switching 비용 발생, 쓰레드 생성의 제한이 없어서 서버가 죽을 수 있다

그래서 나온 게..

쓰레드 풀

(여러 쓰레드가 놀고 있는 pool을 생각하면 된다)

  • 필요할 때 갖다쓰고, 다 쓰면 반납
  • 쓰레드가 모두 사용 중이면 -> 거절 or 대기
  • 쓰레드풀에 생성가능한 쓰레드의 최대치를 관리할 수 있다

➕ 쓰레드를 미리 생성하기 때문에 생성, 종료 비용 절약, 응답시간이 빠르다

WAS의 멀티쓰레드 지원

  • 개발자는 비즈니스 로직만 신경 쓰면 됨
  • 단, 멀티쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링빈) 주의해서 사용 (공유변수)

HTML, HTTP API, CSR, SSR

HTML

  • 정적 리소스: 정적 HTML, CSS, JS, 이미지 등
  • 동적 리소스: 동적 HTML 페이지

HTTP API

html 전달이 아닌, data를 전달
👉 다양한 시스템에서 사용된다!

  • 웹 클라이언트 to 서버
  • 앱 클라이언트 to 서버
  • 서버 to 서버 (주문서버 to 결제서버, MSA 연관지어 생각하면 됨)

⭐️ 여기서 백엔드 개발자의 고민 point는 세가지다!

  1. 정적 리소스를 어떻게 제공할 것인가?
  2. 동적 HTML 페이지를 어떻게 제공할 것인가?
  3. HTTP API를 어떻게 제공할 것인가?

SSR (Server-Side Rendering)

서버에서 동적으로 HTML을 생성 (만드는 과정 서버단에서 끝!)

  • JSP, 타임리프

CSR (Client-Side Rendering)

javascript로 HTML을 동적으로 생성

  • 동적인 웹페이지 만들 때 ex. 구글 지도
  • React, Vue.js

JAVA 웹 기술 역사

  1. 서블릿 - HTML 생성이 어려움
  2. JSP - HTML 생성은 편리하지만 비즈니스 로직까지 넣으면,,🤦🏻‍♀️ 유지보수 HELL 파티 개장
  3. MVC 패턴의 등장 (JSP + 서블릿)
    Model, View, Controller 관심사의 분리 (비즈니스 로직과 뷰의 분리)
  4. MVC 프레임워크 춘추전국시대였다가
  5. Annotation 기반 Spring MVC 등장!
  6. 스프링부트의 등장 - 서버 내장, 스프링 편리하게 사용할 수 있게 도와줌
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글