[Spring] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 강의 정리 - 1

JJAM·2022년 9월 13일
0
post-thumbnail

📖 웹 어플리케이션 이해

📒 웹 서버, 웹 어플리케이션 서버

웹 서버(Web Server)

  • HTTP 기반으로 동작
  • 정적 리소스(정적 HTML, CSS, JS, 이미지, 영상) 제공

웹 어플리케이션 서버(WAS - Web Application Server)

  • HTTP 기반으로 동작
  • 웹 서버 기능 포함(정적 리소스 제공)
  • 프로그램 코드를 실행해 어플리케이션 로직 수행
    -> 동적 HTML, HTTP API, 서블릿, JSP, 스프링 MVC
  • ex) 톰캣(Tomcat)

둘의 경계가 모호하지만, WAS는 어플리케이션 코드를 실행하는데 더 특화되어 있다.

✏️ 웹 시스템 구성 - WEB, WAS, DB

  • 웹 서버는 정적 리소스 처리, WAS는 중요한 어플리케이션 로직 처리
    -> 효율적인 리소스 관리
  • WAS, DB 장애시 웹 서버가 오류 화면 제공 가능

📒 서블릿

HTTP 요청이 왔을 때, 의미있는 비즈니스 로직을 제외하고 나머지 업무들을 서블릿을 지원하는 WAS가 처리해준다.

서블릿

  • urlPatterns의 URL이 호출되면 서블릿 코드가 실행
  • HttpServletRequest - HTTP 요청 정보 편리하게 사용
  • HttpServletResponse - HTTP 응답 정보 편리하게 제공

✏️ 서블릿 HTTP 요청, 응답 흐름

  • HTTP 요청시, WASRequest, Response 객체를 새로 만들어서 서블릿 객체 호출
  • Request 객체에서 HTTP 요청 정보와 Response 객체에 HTTP 응답 정보를 편리하게 사용
  • WASResponse 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성

서블릿 컨테이너

  • 서블릿을 지원하는 WAS
  • 서블릿 객체를 생성, 초기화, 호출, 생명주기 관리
  • 싱글톤으로 관리, 멀티 쓰레드 처리 지원

📒 동시 요청 - 멀티 쓰레드

쓰레드(Thread)

  • 어플리케이션 코드를 하나하나 순차적으로 실행(하나의 코드 라인만 수행)
  • 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행
  • 쓰레드가 없으면 자바 어플리케이션 실행 불가능
  • 동시 처리가 필요하면 쓰레드 추가 생성

쓰레드 생성 비용이 매우 비싸며, 요청마다 쓰레드를 생성하면 응답 속도가 느려지고, 너무 많은 요청이 오면 CPU, 메모리 임계점이 넘어 서버가 죽을 수 있다.

그래서 이를 해결하기 위해 쓰레드 풀을 사용한다.

✏️ 쓰레드 풀

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

쓰레드를 다 쓰면 쓰레드 풀에 다시 반납을 하고, 쓰레드 풀에 0개의 쓰레드가 있으면 쓰레드 요청을 대기, 거절시킨다.

쓰레드가 미리 생성되어 있어, 쓰레드를 생성하고 종료하는 비용과 시간이 절약된다.
생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 안전하게 처리할 수 있다.

멀티 쓰레드에 대한 부분은 WAS가 처리하여, 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발하면 된다.

📒 HTML, HTTP API, CSR, SSR

HTML

  • 정적 리소스
    웹 서버에 요청하여 고정된 HTML 파일, CSS, JS, 이미지 영상 등을 제공
  • HTML 페이지
    WAS에 요청하여 DB에 정보를 조회한 정보를 동적으로 HTML 파일을 생성해 JSP, 타임리프를 통해 제공

HTTP API

  • WAS에 요청하여 DB에 정보를 조회한 정보 HTML이 아니라 주로 JSON 형식의 데이터를 전달
  • 데이터만 주고 받아, UI 화면이 필요하면 클라이언트가 별도 처리
    ex) {"주문번호": 100, "금액": 5000}

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

  • HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용
  • 주로 동적인 화면에 사용

SSR - 서버 사이드 렌더링

  • 서버에서 최종 HTML을 생성해서 클라이언트에 전달
  • 주로 정적인 화면에 사용

📒 자바 백엔드 웹 기술 역사

애노테이션 기반의 스프링 MVC 등장

  • @Controller

스프링 부트의 등장

  • 스프링 부트는 서버를 내장
  • 스프링 부트는 빌드 결과(Jar)에 WAS 서버 포함 -> 빌드 배포 단순화

✏️ 자바 뷰 템플릿

타임리프(Thymeleaf)

  • HTML의 모양을 유지하면서 뷰 템플릿 적용 가능
  • 스프링 MVC와 강력한 기능 통합
  • 최선의 선택

지금까지 김영한 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(유료강의) 강의를 참고하여 웹 어플리케이션 이해 에 대해 공부하였다.

profile
☘️

0개의 댓글