📖/spring(김영한)

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

모팔구 2023. 8. 17. 21:39
728x90
반응형

섹션0 소개

강의 소개

-

 

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

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

  • 웹 서버(Web Server): HTTP 기반으로 동작하는 서버. 정적 리소스와 기타 부가기능을 제공한다. HTML, CSS, JS, 이미지, 영상 등등을 다룸 ex) NGINX, APACHE
  • 웹 애플리케이션 서버(WAS, Web Application Server): HTTP 기반으로 동작하는 서버. 웹 서버 기능(정석 리소스 제공 등)에 더해서 프로그램 코드를 실행해 애플리케이션 로직을 수행함. 웹 서버에 비해서 애플리케이션 코드를 실행하는데 더 특화됨. 동적 HTML, HTTP API(JSON), 서블릿, JSP, 스프링 MVC 등을 다룸 ex) 톰캣, Jetty, Undertow
  • 웹 시스템은 주로 Web Server와 WAS, DB로 구성한다. 
    • 정적 리소스는 웹 서버가 처리한다
    • 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다
    • WAS는 중요한 애플리케이션 로직 처리를 전담한다
    • 정적 리소스만 제공하는 웹 서버는 잘 죽지 않는다(웹서버: oO(번듯이 해낸다 반드시.)) 반면 애플리케이션 로직이 동작하는 WAS 서버는 잘 죽는다 WAS, DB 장애 시 웹 서버가 오류 화면을 제공할 수 있다

서블릿

  • 과거에는 개발자가 서버에서 처리해야 하는 업무와 비즈니스 로직을 모두 코딩해야 했는데 서블릿은 서버에서 처리해야 하는 업무 모두를 지원하는 것이다 즉 개발자는 비즈니스 로직만 작성하면 되는 것이다
  • 서블릿 특징
    • urlPatterns의 url이 호출되면 서블릿 코드가 실행된다. HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest와 HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServletResponse를 파라미터로 받아 사용한다. 이로써 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다
  • 서블릿의 HTTP 요청, 응답 흐름
    • HTTP 요청 시 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
    • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용하고 Response 객체에 HTTP 응답 정보를 편리하게 입력할 수 있다.
    • WAS는 Response 객체에 담겨 있는 내용으로 HTTP 응답 정보를 생성한다 
  • 서블릿 컨테이너: 톰캣처럼 서블릿을 지원하는 WAS를 의미한다.
    • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료의 생명주기를 싱글톤으로 관리한다. 싱글톤을 사용할 때에는 공유 변수의 사용을 주의해야 한다.
    • JSP도 서블릿으로 변환되어 사용된다.
    • 동시 요청을 위한 멀티 쓰레드 처리를 지원한다

동시 요청 - 멀티 쓰레드

  • 쓰레드
    • 애플리케이션 코드를 하나하나 순차적으로 실행함.
    • 자바의 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다
    • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다
    • 쓰레드는 한번에 하나의 코드 라인만 수행한다
    • 동시 처리가 필요하면 쓰레드를 추가로 생성해야 한다
  • 스레드 풀: 요청마다 스레드 생성의 단점을 보완함
    • 특징
      • 필요한 스레드를 스레드 풀에 보관하고 관리한다
      • 스레드 풀에 생성 가능한 스레드의 최대치를 관리한다. 톰캣은 최대 200개 기본 설정(변경 가능)
    • 사용
      • 스레드가 필요하면, 이미 생성되어 있는 스레드를 스레드 풀에서 꺼내어 사용한다
      • 사용을 종료하면 스레드 풀에 해당 스레드를 반납한다
      • 최대 스레드가 모두 사용중이어서 스레드 풀에 스레드가 없다면 대기 중인 요청을 거절하거나 대기자 수를 지정할 수 있다
    • 장점
      • 스레드가 미리 생성되어 있으므로 스레드를 생성하고 종료하는 비용(CPU)이 절약되고 응답 시간이 빠르다
      • 생성 가능한 스레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
  • 스레드 풀 실무  팁
    • WAS의 주요 튜닝 포인트는 최대 스레드 수다.
      • 이 값을 너무 낮게 설정: 동시 요청이 많아지면 서버 리소스는 여유롭지만 클라이언트는 금방 응답 지연된다
      • 이 값을 너무 높게 설정: 동시 요청이 많아지면 CPU, 메모리 리소스 임계점 초과로 서버가 다운된다
    • 장애가 발생 시
      • 클라우드면 일단 서버부터 늘리고 이후 튜닝한다
      • 클라우드가 아니라면 열심히 튜닝한다
    • 스레드 풀의 적정 숫자는 애플리케이션 로직의 복잡도, CPU, 메모리, IO 리소스 상황에 따라 모두 다르다
      • 성능 테스트: 최대한 실제 서비스와 유사하게 성능 테스트를 시도해야 한다
        • 툴: 아파치 ab, 제이미터, nGrinder(추천) 등
  • WAS의 멀티 스레드 지원 핵심
    • 멀티 스레드에 대한 부분은 WAS가 처리한다
    • 개발자가 멀티 스레드 관련 코드를 신경쓰지 않아도 된다
    • 개발자는 마치 싱글 스레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발하면 된다
    • 멀티스레드 환경이므로 싱글톤 객체는 주의해서 사용해야 한다

HTML, HTTP API, CSR, SSR

  • 정적 리소스: 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공함 주로 웹브라우저 등에서 요청함
  • HTML 페이지: 동적으로 필요한 HTML 파일을 생성(뷰템플릿)해서 전달함. 웹 브라우저는 HTML을 해석한다 
  • HTTP API: HTML이 아니라 데이터를 전달함 주로 JSON 형식을 사용함
    • 다양한 시스템에서 호출한다 
      • 주로 JSON 형태로 데이터 통신
      • UI 클라이언트 접점
        • 앱 클라이언트(아이폰, 안드로이드, PC 앱)
        • 웹 브라우저에서 자바스크립트를 통한 HTTP API 호출
        • React, Vue.js 같은 웹 클라이언트
      • 서버 to 서버
        • 주문 서버 → 결제 서버
        • 기업간 데이터 통신
  • 백엔드 개발자가 서비스를 제공할 때 정적 리소스, 동적으로 제공되는 HTML 페이지, HTTP를 통해서 데이터를 어떻게 주고받을지를 고민해야한다
  • SSR(Server Side Rendering): HTML 최종 결과를 서버에서 만들어서 웹브라우저에 전달함. 주로 정적인 화면에 사용함
    ➥ 관련 기술: JSP, 타임리프 → 백엔드 개발자
  • CSR(Client Side Rendering): HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용함. 주로 동적인 화면에 사용하고 웹 환경을 마치 앱처럼 피룡한 부분부분 변경할 수 있음 ex) 구글 지도, Gmail, 구글 캘린더 등
    ➥ 관련 기술: React, Vue.js → 웹 프론트엔드 개발자
  • React, Vue.js를 CSR + SSR 동시에 지원하는 웹 프레임워크도 있다
  • SSR을 사용하더라도 자바스크립트를 사용해서 화면 일부를 동적으로 변경 가능하다
  • 백엔드 개발자 입장에서 UI 기술
    • 백엔드 - 서버 사이드 렌더링 기술
      • JSP, 타임리프
      • 화면이 정적이고, 복잡하지 않을 때 사용
      • 백엔드 개발자는 서버 사이드 렌더링 기술 학습이 필수됨
    • 웹 프론트엔드 - 클라이언트 사이드 렌더링 기술
      • React, Vue.js
      • 복잡하고 동적인 UI 사용
      • 웹 프론트엔드 개발자의 전문 분야
    • 선택과 집중
      • 백엔드 개발자의 웹 프론트엔드 기술 학습은 옵션
      • 백엔드 개발자는 서버, DB, 인프라 등등 수 많은 백엔드 기술을 공부해야 한다.
      • 웹 프론트엔드도 깊이있게 잘하려면 숙련에 오랜 시간이 필요하다

 

 

반응형
728x90
반응형