> For the complete documentation index, see [llms.txt](https://dodeon.gitbook.io/study/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dodeon.gitbook.io/study/kimyounghan-spring-mvc/01-web-application/history.md).

# 자바 백엔드 웹 기술 역사

## 과거

* 1997년 서블릿
  * 자바 코드로 짜야 하므로 HTML를 동적으로 생성하는 게 어려웠다.
* 1999년 JSP
  * HTML 생성은 편리하지만 비즈니스 로직까지 너무 많은 역할을 담당하게 된다.
* 서블릿, JSP를 조합한 MVC 패턴
  * 모델, 뷰 컨트롤러로 역할을 나누어 개발한다.
* 2000년 초 \~ 2010년 초 MVC 프레임워크 춘추 전국 시대
  * MVC 패턴을 자동화한다.
  * 복잡한 웹 기술을 편리하게 사용할 수 있는 다양한 기능을 지원한다.
  * ex) 스트럿츠, 웹워크, 스프링 MVC(과거 버전)

## 현재

* 애너테이션 기반의 스프링 MVC
  * @Controller
  * MVC 프레임워크의 춘추 전국 시대가 마무리된다.
* 스프링 부트의 등장
  * 서버를 내장한 스프링 부트가 등장한다.
  * 과거에는 서버에 WAS를 직접 설치하고 소스는 WAR 파일을 만들어 설치한 WAS에 배포했다.
  * 스프링 부트는 빌드 결과인 JAR에 WAS 서버가 포함되어 빌드가 단순화되었다.

## 최신

스프링 웹 기술이 분화되고 있다.

* Web Servlet
  * Spring MVC
* Web Reactive
  * Spring WebFlux

### WebFlux

* 비동기로 non blocking을 처리한다.
* 최소 스레드로 최대 성능을 낸다,
  * 스레드 컨텍스트 스위칭 비용을 효율화한다.
* 함수형 스타일로 개발할 수 있다.
  * 동시 처리 코드의 효율성을 높인다.
* 서블릿 기술을 사용하지 않는다.
  * netty를 이용한다.

하지만 웹 플럭스는 기술적인 난이도가 매우 높다. 아직 RDB에 대한 지원이 부족하다. 일반 MVC의 스레드 모델도 충분히 빨라서 실무에서 아직 많이 사용하지는 않는다.

## 자바 뷰 템플릿

HTML을 편리하게 생성하는 뷰 기능이다.

### JSP

속도가 느리고 기능이 부족하다.

### 프리마커, 벨로시티

속도 문제를 해결했으며 다양한 기능이 있다.

### 타임리프

내추럴 템플릿으로 HTML의 모양을 유지하면서 뷰 템플릿을 적용할 수 있다. 스프링 MVC와 기능이 통합되어 있어 최선의 선택이다. 단, 성능은 프리마커와 벨로시티가 더 빠르다.
