소개
인프런에서 김영한 강사님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 듣고 내용을 정리하고자 합니다.
https://www.inflearn.com/course/스프링-mvc-1/dashboard
스프링에 대해 기초부터 전부 알려주기 때문에 입문자에게 추천하고 싶은 강의입니다. 김영한님의 로드맵 다만 선행 강의가 있으므로 김영한님의 스프링 완전 정복 로드맵을 따라오는것을 추천합니다.
웹서버, 웹 어플리케이션 서버
웹서버
- HTTP 기반으로 동작
- 정적 리소스 제공, 기타 부가기능
- 정적 HTML, CSS, JS, 이미지, 영상
- ex) NGINX, APACHE
웹 어플리케이션 서버 (WAS)
- HTTP 기반으로 동작
- 웹 서버 기능 포함, 사실 둘의 용어도 경계도 모호함
- 자바는 서블릿 컨테이너 기능을 제공하면 WAS
- 프로그램 코드를 실행해 어플리케이션 로직 수행
- 동적 HTML, HTML API(JSON)
- 서블릿, JSP, 스프링 MVC
- ex) 톰캣
웹 시스템 구성 - WEB, WAS, DB
- 정적 리소스는 웹 서버가 처리
- 웹 서버는 어플리케이션 로직같은 동적인 처리는 WAS에 요청
- WAS는 중요한 어플리케이션 로직 처리 전담
서블릿
HTTP 통신 시 서버에서 처리해야 하는 업무
의미있는 비즈니스 로직을 제외하고는 반복되는 과정들.
이를 서블릿을 사용하면 자동으로 처리해준다.
서블릿
- urlPatterns의 URL이 호출되면서 서블릿 코드가 실행
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
- HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServletResponse
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블리 컨테이너라고 함
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
- 서블릿 객체는 싱글톤으로 관리
- JSP도 서블릿으로 변환되어 사용
- 멀티 쓰레드 처리 지원
멀티 쓰레드
쓰레드
- 어플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
- 자바 메인 메서드를 실행하면 main이라는 이름의 쓰레드가 실행
- 쓰레드는 한번에 하나의 코드 라인만 수행
쓰레드 풀
특징
필요한 쓰레드를 쓰레드 풀에 보관하고 관리한다.
쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다.
사용
쓰레드가 필요하면 쓰레드 풀에서 꺼내서 사용하고 끝나면 반납한다.
쓰레드 풀에 쓰레드가 없으면 대기하거나 거절된다.
실무 팁
WAS의 주요 튜닝 포인트는 최대 쓰레드 수이다.
값이 낮으면 동시 요청이 많을 때 서버리스소는 여유롭지만 클라이언트의 응답이 지연되고 값이 높으면 CPU, 메모리 리소스 임계점 초과로 서버가 다운된다
장애 발생시 클라우드면 서버부터 늘리고 이후에 튜닝하고 클라우드가 아니면 열심히 튜닝한다.
WAS의 멀티 쓰레드 지원
- 멀티 쓰레드는 WAS가 처리한다.
- 개발자는 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.
- 싱글 스레드 프로그래밍을 하듯이 편리하게 소스코드를 개발하면 된다.
HTTP API, SSR, CSR
HTTP API
- HTML이 아니라 데이터를 전달
- 주로 JSON 형식 사용
- 다양한 시스템에서 호출
- 데이터만 주고 받음, UI 화면은 클라이언트가 별도 처리
SSR - 서바 사이드 렌더링
- 서버에서 최종 HTML을 생성해서 클라이언트에 전달
- 주로 정적인 화면에서 사용
- 관련기술: JSP, 타임리프
CSR - 클라이언트 사이드 렌더링
- HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해 적용
- 주로 동적인 화면에 사용, 웹 화면을 부분적으로 변경 가능함
- 관련기술 : React, Vue.js