WAS에서 "화면"을 랜더링하는 로직을 이해하려면, 먼저 "화면"이 있는 Web 기술이 어떻게 발전했는지부터 얘기해볼 필요가 있다.
결론부터 말하자면,
- 과거 Web 기술은 단순한 비즈니스 처리는 가능했지만, 복잡한 비즈니스 요청은 처리하지 못했다.
- WAS에서 Web Server와 Web Container를 통해 클라이언트의 복잡한 요청을 효율적으로 처리할 수 있었다.
- Web Container에서 JSP, Servlet 같은 서버 측 컴포넌트를 제공
- 조금 더 발전해, 이 WAS의 Servelt 위에 "애노테이션 기반의 Spring MVC"를 가동시켜, 웹 어플리케이션을 패턴화 & 구조적으로 개발을 진행
- MVC 중 View(V)는 주로 View Template이라는 뼈대에서 Data Binding을 통해 동적으로 제공하는데 이가 MVC의 Model(M)과 통합하기에 적합함
Java Web
과거에는 서버에 잘 만들어진 HTML문서들이 있고, 이를 단순히 클라이언트에 제공해줌으로써 Web이 보여지는 형식이였다.
이 이후에 Java언어를 통한 Web 기술을 어떻게 개발했을까??
Servlet - 1997
- HTML을 동적으로 생성하기가 어려움
- WAS의 Web Conatiner에서 제공
JSP - 1999
- HTML 생성은 편리
- 비즈니스 로직까지 너무 많은 역할 담당
- WAS의 Web Conatiner에서 제공
Servlet, JSP 조합 MVC 패턴
- 모델, 뷰, 컨트롤러 역할을 나누어 개발
MVC 프레임워크 - 200x ~ 201x
- MVC 패턴 자동화 (개발하는 구조가 비슷해서 패턴화)
- 복잡한 웹 기술을 편리하게 사용할 수 있는 다양한 기능 지원
- 스트럿츠, 웹워크, 스프링 MVC(과거 버전)
현재 사용 기술
애노테이션 기반 스프링 MVC
- @Controller
- Servlet 위.에 MVC를 올려서 동작하는 방식! := Web Servlet
스프링 부트
- 스프링 부트는 서버를 내장
- (과거) 서버에 WAS 직접 설치
- (과거) 소스코드를 .jar파일 모은 War 파일로 만들어서 WAS에 배포
⇒ 스프링 부트는 빌드 결과(.jar)에 WAS 서버(Tomcat) 포함
참고) WAS (Web Application Server) 조금 더 자세히
WAS는 Web Server와 Web Container 기능을 수행할 수 있는 서버를 의미한다.
Web Server: 최초 클라이언트 요청을 받고 (정적 처리까진 함), Web Conatiner로 전송
ex) apache
Web Container: Web Server로 부터의 요청에 대한 가공 처리(동적 처리) 후, Web Server에 전달
ex) tomcat
=> 이를 통해 클라이언트의 요청에 대해 효율적으로 처리할 수 있는 것이다.
최신 기술
스프링 웹 플럭스(WebFlux)
- 쓰레드에 의한 컨텍스트 스위칭 비용 최소화 ⇒ 최소 쓰레드로 최대 성능
- 비동기로 Non-Blocking 처리
- 함수형 스타일로 개발 ⇒ 동시처리 코드 효율화
- Servlet 기술 사용X
Java View Templete
그럼 WAS 측에서 "화면"을 렌더링 해줄 수 있을까??
View Template := HTML, CSS, JS를 포함하는 코드의 틀
⇒ 반복되는 레이아웃, 요소들 표준화
참고) View Template에서 View의 속성
- 데이터 바인딩 (Data Binding)⇒ 사용자 인터페이스에 동적 데이터 쉽게 통합 가능 ex) {{ }}
- : 프론트엔드(View), 백엔드(Model)
즉, View Template의 뼈대에서의 Data Binding을 통해 서버(WAS)에서 뼈대에 동적으로 데이터를 채워넣을 수 있다.
⇒ 동적인 콘텐츠를 표시하는 웹 페이지를 만들 수 있다.
Java기반 View Template의 과거
JSP
- 속도가 느림, 기능도 부족
Freemarker, Velocity
- 속도문제 해결, 다양한 기능
Thymeleaf
- 서버 측(WAS-Servlet-MVC)에서 렌더링이 이루어짐
- 처음 페이지를 로드할 때 서버에서 HTML을 생성하니 초기 로드 시간은 김
- 스프링 MVC와 강력한 기능 통합
- Natural Template: HTML 모양을 유지하는 동시에, View Template 적용 가능
- 단, 성능은 Freemarker, Velocity가 더 빠름
추가적, 용어 설명
1. Server Side Rendering
- JSP, Thymeleaf
- 화면이 정적이고, 복잡하지 않을 때 사용
- 백엔드 개발자는 서버 사이드 렌더링 기술 학습 필수
2. Client Side Rendering (:= 웹 프론트)
- React, Vue,js
- 복잡하고 동적인 UI 사용
'인프런 강의' 카테고리의 다른 글
H2 설치 & 실행 방법 (0) | 2023.07.07 |
---|---|
스프링 빈 주입 (0) | 2023.07.05 |
WAS의 Servlet (feat. Multi Thread) (0) | 2023.06.29 |
Web Server와 WAS (0) | 2023.06.28 |
Spring Boot 핵심 원리 기본편 (0) | 2023.06.24 |