📖/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의 멀티 스레드 지원 핵심
- 멀티 스레드에 대한 부분은 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
반응형