본문 바로가기
Spring/Spring MVC

[Spring MVC] 5. Java 진영 Web 기술의 역사

by Kloong 2022. 11. 23.
더보기

Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

 

마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.

 

GitHub - Kloong1/TIL: Today I Learned.

Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.

github.com

Java 진영 Web 기술의 역사

과거 기술 흐름

Servlet - 1997

  • TCP/IP 연결, HTTP 메시지 파싱, 멀티 스레딩 등의 공통 작업들을 편리하게 만들어 준다
  • 그러나 HTML을 동적으로 생성하는 것은 여전히 어려움

JSP - 1999

  • 동적 HTML 생성을 편리하게 할 수 있다
  • 그러나 비즈니스 로직까지 너무 많은 역할을 담당하게 됨
    • 코드가 너무 길어진다
    • 유지보수가 어렵다

MVC 패턴 - Servlet과 JSP의 조합

  • Servlet과 JSP를 조합
  • Model, View, Controller로 역할을 나누어서 개발함
    • 비즈니스 로직과 화면을 렌더링 하는 부분을 나누어서 개발
    • 유지보수가 쉬워짐

MVC 프레임워크 - 2000년 초 ~ 2010년 초

  • MVC 패턴의 자동화
  • 복잡한 웹 기술을 편리하게 사용할 수 있는 다양한 기능을 지원한다
  • MVC 프레임워크 춘추 전국 시대
    • Struts, WeBWorK, Spring MVC(과거 버전. 이 때는 그냥 그랬음)
    • 여러 프레임워크를 같이 사용 (앞단에는 Struts, 뒷단에는 Spring MVC)

현재 사용 기술

Annotation 기반의 Spring MVC의 등장

  • @Controller
  • MVC 프레임워크의 춘추 전국 시대 마무리
    • Spring 프레임워크를 적용하면 MVC 패턴, 복잡한 웹 기술 전부 편리하게 사용 가능
    • 여러 프레임워크를 같이 사용할 때 생기는 어려움 사라짐 -> Spring만 쓰면 된다!

Spring Boot의 등장

  • 여러 복잡한 설정들을 개발자 대신 해준다 -> 개발자의 불편함 해소, 생산성 증가
  • 스프링 부트는 서버를 내장하고 있다
    • 과거에는 서버에 WAS를 직접 설치하고, 소스를 빌드해서 war 파일을 만든 뒤, 설치한 WAS에 배포해야 했다
    • 이 과정이 매우 복잡했다!
  • 스프링 부트는 빌드 결과(jar)에 WAS 서버가 포함되어 있다!
    • 서버에 jar 파일을 올려서 실행만 시키면 끝!
    • 빌드와 배포가 매우 단순해졌다!

현재 실무에서도 Spring Boot 기반으로 프로젝트를 진행하고 있다.

최신 기술 - Spring 웹 기술의 분화

Web Servlet 기술 스택과 Web Reactive 기술 스택으로 분화

  • Web Servlet: Spring MVC
    • Spring MVC는 servlet 기반으로 동작한다.
    • Servlet, 멀티 쓰레드 등의 기술을 사용할 수 있다.
  • Web Reactive - Spring WebFlux

Spring WebFlux

특징

  • 비동기 넌 블러킹 처리
  • 최소 쓰레드로 최대 성능을 낸다
    • 쓰레드 개수와 코어 개수를 비슷하게 맞출 수 있다
    • 쓰레드 컨텍스트 스위칭 비용이 거의 들지 않는다
  • 함수형 스타일로 개발한다
    • 동시처리 코드를 깔끔하고 빠르게 작성할 수 있다
  • Servlet 기술을 사용하지 않는다
    • Netty 프레임워크를 사용한다고 함

그런데...

  • 웹 플럭스는 기술적 난이도가 매우 높다!
  • 아직은 RDB 지원이 부족하다
  • 일반 MVC의 쓰레드 모델도 충분히 빠르다
  • 실무에서 아직 많이 사용하지는 않는다 (전체 1% 이하)

자바 뷰 템플릿 역사

View template: HTML을 편리하게 생성하는 역할을 한다

JSP

  • 속도가 느리고, 기능이 부족해서 요즘엔 잘 안쓴다.

Freemarker, Velocity

  • 속도 문제를 해결했고, 기능도 다양하다.
  • 한때 인기를 끌었지만, 발전을 거의 안했다.

Thymeleaf

  • Natural template: HTML의 모양을 유지하면서 view template를 적용할 수 있다.
    • 과거 freemarker, velocity는 HTML 파일 안에 코드가 들어있었다.
    • Thymeleaf는 HTML의 tag를 활용하기 때문에 훨씬 깔끔하다.
  • Spring MVC와 같이 쓰기에 좋다.
    • Spring이 밀어준다.
    • Spring과 함께 쓸 때는 최선의 선택이다!
    • 단 성능은 freemarker, velocity가 더 좋다고 한다.

댓글