Spring boot

[MVC1] 웹 애플리케이션의 이해

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

서버는 크게 두가지

 

1. 웹 서버 - HTTP 기반으로 정적 리소스를 주로 제공하는 서버 ex) NGINX, APACHE

2. 웹 애플리케이션 서버(WAS) - HTTP 기반으로 동작하며 웹서버 + 로직 수행 기능을 함 ex) 톰캣

 

둘의 기준은 모호한 편이나 주로 서블릿 컨테이너 기능을 제공하면 WAS 그렇지 않으면 웹 서버로 본다.

WAS는 로직 수행에 더 초점이 맞춰져 있다.

 

보통 서버는 WAS + DB로 구성이 가능하나, 비싼 애플리케이션 로직이 정적 리소스 요청때문에 제대로 수행되지 못할 수 있다. 또, 서버 장애시 오류 화면조차 노출이 불가능하다.

 

따라서 보통 서버는 다음과 같이 구성된다.

클라이언트 -> Web Server -> WAS -> DB

 

오류화면 제공이 가능하고, WAS는 로직 수행에 집중할 수 있고, 효율적으로 필요한 기능을 제공하는 서버를 증설할 수 있다.

 


서블릿

서버에서는 HTTP 리퀘스트를 받아 해석하고, 로직을 실행하고, 리스폰스 메시지를 스펙에 맞춰 작성해야 한다.

여기서 로직을 수행하는 부분만이 반복되지 않는 의미있는 작업이다.

나머지 작업을 편리하게 수행할 수 있도록 도와주는 것이 서블릿이다.

 

https://sjh836.tistory.com/126

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

서블릿 객체는 싱글톤으로 관리되므로 공유 변수 사용에 주의해야 한다.

 


동시요청 - 멀티 스레드

동시에 여러 요청을 수행하기 위해 WAS 내부에서는 멀티 스레드가 사용된다.

그러나 스레드 생성 비용은 매우 비싸다.

또한 생성에 제한이 없다면 고객 요청이 많아질 때, CPU와 메모리의 임계점을 넘는다면 서버가 죽을 수 있다.

 

그래서 미리 일정 개수의 스레드를 생성해 '스레드 풀'에 넣어놓는다.

스레드가 필요하면 풀에서 꺼내 사용하고 반납한다.

남아있는 스레드가 없으면 요청은 거절하거나 대기하도록 설정할 수 있다.

 

따라서 스레드 생성과 종료 비용이 절약되고, 너무 많은 요청이 들어와도 기존 요청은 문제없이 실행될 수 있다.

 

풀에 넣어 놓는 스레드의 개수는 아파치 ab, 제이미터, nGrinder 등과 같은 툴을 사용해 성능 테스트 후에 결정해야 한다.

너무 적으면 리소스의 낭비가 일어나고, 너무 많으면 서버가 다운될 수 있다.

 

멀티 스레드에 대한 부분은 WAS가 처리하기 때문에 개발자는 싱글 스레드를 쓰듯이 편리하게 개발할 수 있다.

 


HTML, HTTP API, CSR, SSR

서버가 제공하는 기능은 크게 세 가지로 분류된다.

 

1. 정적 리소스

    - CSS, 고정된 HTML, 이미지 등 제공

2. HTML 페이지

    - 동적으로 필요한 HTML 파일을 생성해 전달

    - 관련 라이브러리: JSP, 타임리프

    - SSR(서버 사이드 랜더링) 방식

3. HTTP API

    - 데이터(JSON 등)만 전달

    - UI 클라이언트와의 통신 혹은 다른 서버와의 통신에 주로 사용

    - 웹 클라이언트 혹은 웹 클라이언트가 화면 별도 처리

    - CSR(클라이언트 사이드 랜더링) 방식

 


자바 백엔드 웹 기술 역사

서블릿 (1997)

    - HTML 생성이 어려움

 

JSP (1999)

    - HTML 생성은 편리하지만 비즈니스 로직까지 처리하여 너무 많은 역할 담당

 

서블릿, JSP 조합한 MVC 패턴 사용 (2000 ~ 2010 초)

    - 패턴 자동화 등의 기능을 제공하는 MVC 프레임워크의 춘추 전국시대

 

애노테이션 기반의 스프링 MVC와 스프링 부트의 등장으로 프레임워크의 춘추전국시대는 마무리된다.

기존 사용하던 스프링과 같이 사용하는 데에 어려움이 없고 빌드 및 배포를 단순화하여 더욱 사용하기 편리해졌다.

 

최근 Web Reactive - Spring WebFlux 최신 기술이 나왔다.

성능은 좋으나 기술 사용의 난도가 높고 RDB 지원이 부족하여 잘 사용되지 않는다.

 

--> Web Servlet - Spring MVC 가 최선의 선택

 

같이 사용되는 자바 뷰 템플릿은 타임리프가 가장 많이 사용된다. (스프링에서 밀어준다.)

 

 

 

'Spring boot' 카테고리의 다른 글

에러노트 UnsatisfiedDependencyException  (0) 2022.02.12
[MVC1] 서블릿  (0) 2021.12.09
[HTTP] HTTP 헤더 - 캐시와 조건부 요청  (2) 2021.11.16
[HTTP] HTTP 일반 헤더  (0) 2021.11.09
[HTTP] HTTP 상태코드  (0) 2021.11.03