728x90

인프런 김영한님의 강의를 참고했습니다.

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com

HTTP와 JPA 공부를 어느정도 끝내고 다시 스프링으로 돌아왔다.

 

HTTP의 기본도 공부를 했으니

오늘은 스프링이 어떻게 돌아가는지 알아보기 위해 WAS와 그 기원인 tomcat, Servlet & JSP등을 알아보고 온다.

 

  • Web Server, WAS

Web Server

HTTP 기반으로 동작을 하며, 정적 리소스를 제공한다.

정적 리소스라하면 단순한 파일들인 HTML, CSS, JPG 등을 말한다.

 

WAS(Web Application Server)

이 친구도 마찬가지로 HTTP 기반으로 동작한다.

정적 리소스도 제공은 가능하기 때문에 Web Server의 기능을 수행할 수도 있기는 하다.

그러고도 프로그램 코드를 실행 가능하기 때문에 애플리케이션 로직을 수행할 수 있다.

예를 들면 저번에 공부했던 tomcat이 있다.

 

그렇기 때문에 웹 시스템을 WAS와 DB만으로 구성이 가능하다.

WAS는 웹 서버의 기능을 수행할 수 있기 때문이다.

 

하지만 이렇게 만들면 WAS가 너무 많은 역할을 담당한다.

WAS는 복잡한 로직들을 수행하기 때문에 장애가 많이 일어나고, 이 때문에 정적 리소스조차 수행 불가능 할 수 있다.

그렇기 때문에 정적 리소스는 웹 서버가 처리하고 로직은 WAS가 수행하도록 섞어서 사용하게 된다.

 

Web Server는 WAS에 비해 장애가 발생하지 않기 때문에 WAS에 장애가 생기면 Web Server를 통해 오류 화면을 제공할 수도 있다.

 

  • Servlet

서블릿은 저번에 공부 했던 내용이다.

서블릿을 사용하면 HTTP 송수신 과정에서 애플리케이션 로직들만 신경 쓸 수 있게 해준다.

HTTP를 요청하면 WAS는 Request, Response 객체를 만들어서 서블릿 객체를 호출한다.

그러면 그 Request, Response 객체를 받아서 Request를 보고 HTTP 요청 정보를 확인하고, Response에 응답 정보를 입력한다.

 

위 그림처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.

저 컨테이너는 서블릿 객체들을 생성하고 객체들의 생명주기를 관리한다.

객체들은 Spring과 같이 계속 생성하는 비효율적이기 때문에 싱글톤으로 관리한다.

이 싱글톤 객체들을 어떻게 사용하는 것이 좋으며, 주의해야 하는 부분은 무엇인지 알고 있을 것이다.

 

  • 멀티 쓰레드

만약 서버가 단일 쓰레드라면?

먼저 들어온 요청이 모두 끝난 후에 다음 요청이 쓰레드를 사용하여 응답을 받을 수 있을 것이다.

이렇게되면 다음에 들어온 요청은 대기 시간이 굉장히 길어질 것이다.

여기서 먼저 들어온 요청에 장애가 생겨서 쓰레드를 반환하지 않는다면 다음 요청은 평생 응답을 받을 수 없을 것이다.

 

그렇다고 해서 요청마다 쓰레드를 생성한다면 쓰레드를 생성할 때마다 굉장히 오랜 시간이 걸리며, 고객의 요청이 너무 많이 오면 서버의 CPU와 메모리가 다운될 수 있다.

 

그렇기 때문에 미리 쓰레드들을 만들어놓고 도서관에서 책 빌리는 것 처럼 하나씩 쓰레드를 빌리고 반납하는 형식으로 사용한다.

만약 쓰레드 풀에 남은 쓰레드가 없다면 쓰레드를 대기하게 된다.

이렇게하면 쓰레드가 미리 생성되어 있기 때문에 생성하는 시간을 줄일 수 있다.

 

  • HTML, HTTP API, 렌더링

위에서 말했듯이 고정된 HTML 파일들은 웹 브라우저를 사용하여 제공하면 된다.

사용자에 따라 달라지는 동적 HTML 페이지는 WAS를 사용하여 제공한다.

 

만약 HTML이 아닌 데이터만을 전달하는 것이 목적이라면 굳이 HTML에 담아서 전달할 필요가 없다.

WAS에서 주로 JSON 형식으로 주고 받는다.

 

그러면 여기서 렌더링 방식에 따라 서버사이드 렌더링, 클라이언트 사이드 렌더링으로 나뉜다.

SSR(서버 사이드 렌더링) CSR(클라이언트 사이드 렌더링)
HTML 최종 결과를 서버에서 만들어서 클라이언트에 전달 HTML 결과를 자바스크립트를 사용해 동적으로 생성해서 적용
보통 정적인 화면에 사용한다. 보통 동적인 화면에 사용
JSP, Thymeleaf React, Vue.js

SSR은 서버에서 다 받아오기 때문에 바로 이해할 수 있을 것 같고

CSR은 이런 과정을 거쳐 렌더링이 된다.

 

'백엔드 > 스프링' 카테고리의 다른 글

스프링 15일차  (0) 2023.03.28
스프링 14일차  (0) 2023.03.26
스프링 12일차  (0) 2023.02.15
스프링 11일차  (0) 2023.02.12
스프링 10일차  (0) 2023.02.11

+ Recent posts