자바 백엔드 웹 기술의 역사
자바 백엔드 웹 기술의 역사와 발전 동향 😊
이번 시간에는 자바 백엔드 웹 기술의 역사에 대해 말씀드리겠습니다. 😊
서블릿의 탄생과 한계
과거에 서블릿(Servlet)이라는 기술이 있었습니다. 이 서블릿이 나온 이유는 개발자들이 TCP/IP 연결과 멀티스레드 처리를 직접 구현하기 어려웠기 때문입니다. 그래서 서블릿은 이러한 복잡한 작업을 추상화하여 개발자들에게 편리함을 제공했습니다.
그러나 서블릿에는 단점이 하나 있었습니다. 바로 Java 코드로만 작성해야 했기 때문에 HTML을 동적으로 생성하는 것이 굉장히 어려웠다는 것입니다.
JSP의 등장
이러한 문제를 해결하고자 JSP(JavaServer Pages)가 등장했습니다. JSP를 사용하면 HTML 화면을 편하게 작성할 수 있고, Java 코드도 함께 사용할 수 있어서 동적인 웹 페이지를 쉽게 개발할 수 있었습니다. 개발자들은 JSP로 모든 것을 개발하기 시작했습니다.
하지만 JSP는 최종적으로 서블릿으로 변환됩니다. 개발자는 그 과정까지 고민할 필요 없이 JSP로 개발을 하면 되었습니다.
JSP의 한계와 MVC 패턴의 탄생
그러나 JSP에도 문제가 있었습니다. HTML 생성은 편리했지만, 비즈니스 로직까지 한 파일에 작성하다 보니 JSP 파일 하나가 수천 줄이 되고, 유지보수가 매우 어려워졌습니다.
이렇게 되면서 MVC 패턴이라는 개념이 등장했습니다. 모델(Model)-뷰(View)-컨트롤러(Controller)로 역할을 분리하여, 비즈니스 로직과 화면 렌더링 부분을 분리하는 것입니다.
MVC 패턴을 통해 관심사의 분리를 실현하고, 화면과 관련된 부분은 뷰 코드(JSP 등)를 수정하고, 비즈니스 로직과 관련된 부분은 자바 코드나 서블릿을 수정하는 방식으로 개발하게 되었습니다.
MVC 프레임워크의 등장과 춘추전국시대
그러다가 개발자들은 MVC 패턴을 자동화하고 웹 개발을 편리하게 할 수 있는 프레임워크를 만들기 시작했습니다. 수많은 MVC 프레임워크들이 등장하였고, 이를 MVC 프레임워크의 춘추전국시대라고 부릅니다.
국내에서는 2000년 초부터 2010년 중반까지 다양한 MVC 프레임워크가 사용되었습니다. Struts, WebWork, Spring MVC 등이 그 예입니다.
당시에는 Struts가 매우 강세였으며, 스프링 MVC는 아직 많이 사용되지 않았습니다. 그래서 보통 프론트에는 Struts, 백엔드에는 Spring을 사용하는 방식으로 개발했습니다.
애노테이션 기반의 스프링 MVC의 등장과 통일
하지만 이후 애노테이션 기반의 스프링 MVC가 등장하면서 상황이 바뀌었습니다. 스프링 MVC는 스프링 프레임워크와의 통합이 용이하고, 애노테이션을 사용하여 유연하고 깔끔한 코드를 작성할 수 있었습니다.
@Controller 애노테이션을 사용하여 컨트롤러를 정의할 수 있게 되면서, 개발 생산성이 크게 향상되었습니다.
이로써 다른 MVC 프레임워크들을 압도하고, 스프링 MVC로 전국 통일이 이루어졌습니다. 현재도 대부분의 프로젝트에서 스프링 MVC를 사용하고 있습니다.
스프링 부트(Spring Boot)의 등장
또 하나의 큰 변화는 스프링 부트(Spring Boot)의 등장입니다. 스프링 부트는 개발자들이 스프링을 더욱 편리하게 사용할 수 있도록 도와주는 여러 가지 기능을 제공합니다.
그 중에서도 가장 혁신적인 것은 내장 서버를 지원한다는 것입니다.
스프링 부트는 서버를 내장하여, 별도의 WAS 설치 없이 애플리케이션을 실행할 수 있습니다.
과거에는 톰캣(Tomcat)과 같은 WAS를 서버에 설치하고, 소스 코드를 빌드하여 WAR 파일을 생성한 후 톰캣에 배포했습니다. 그러나 스프링 부트는 빌드 시에 내장 톰캣을 포함하여 단일 JAR 파일을 생성하고, 이를 실행하면 바로 서버가 동작합니다.
이로써 배포 과정이 단순해지고, 개발 편의성이 크게 향상되었습니다. 현재 대부분의 신규 프로젝트는 스프링 부트를 기반으로 개발하고 있습니다.
최신 스프링 웹 기술의 분화
최근에는 스프링 웹 기술이 두 가지로 분화되었습니다:
서블릿 기반의 스택 (Spring MVC)
- 기존의 서블릿 기반으로 동작하는 스택입니다.
- HTTPServletRequest, HTTPServletResponse 등을 사용할 수 있습니다.
- 멀티 스레드를 활용하여 동시에 여러 요청을 처리합니다.
리액티브(Reactive) 스택 (Spring WebFlux)
- 완전한 비동기 논블로킹 처리를 지원합니다.
- 최소한의 스레드로 최대 성능을 낼 수 있습니다.
- 함수형 스타일로 개발하여 동시 처리가 효율적입니다.
- 서블릿 기술을 사용하지 않고, Netty 등의 서버를 사용합니다.
Spring WebFlux는 자바에서도 Node.js처럼 비동기 논블로킹 방식으로 개발할 수 있게 해줍니다.
WebFlux의 활용과 한계
하지만 WebFlux 기술은 기술적 난이도가 매우 높습니다. 비동기 논블로킹 개념과 함수형 프로그래밍 스타일을 이해해야 하며, 기존 방식과는 완전히 다른 접근이 필요합니다.
또한 관계형 데이터베이스(RDB)에 대한 지원이 아직 부족하여, 실무에서 사용하기에는 어려움이 있습니다. 대부분의 경우 기존의 Spring MVC 모델로도 충분히 빠르고 효율적인 웹 애플리케이션을 개발할 수 있습니다.
WebFlux는 성능이 매우 중요하고, 동시에 복잡한 비동기 처리가 필요한 경우에 적합합니다.
저의 포스팅에서는 Spring MVC에 집중하려고 합니다. MVC만으로도 공부할 분량이 많기 때문에, WebFlux는 관심 있으신 분들이 따로 공부해보시면 좋을 것 같습니다.
자바 뷰 템플릿의 역사
뷰 템플릿은 HTML을 편리하게 생성하는 기능을 말합니다. 자바에서는 여러 가지 뷰 템플릿 기술이 사용되었습니다.
JSP의 등장과 한계
처음에는 JSP를 사용했지만, 성능이 느리고 기능이 부족하다는 문제가 있었습니다.
프리마커(Freemarker)와 벨로시티(Velocity)
이후 프리마커나 벨로시티가 등장하여 빠른 속도와 다양한 기능을 제공했습니다. 한동안 인기를 얻었지만, 발전이 더딘 단점이 있었습니다.
타임리프(Thymeleaf)의 등장
현재는 타임리프(Thymeleaf)가 주로 사용되고 있습니다. 타임리프는 내추럴 템플릿(Natural Template) 방식으로, HTML의 모양을 유지하면서 뷰 템플릿 기능을 적용할 수 있습니다.
또한 스프링 MVC와의 통합이 강력하여, 스프링에서 공식적으로 많이 밀어주고 있습니다.
타임리프는 HTML 파일을 그대로 브라우저에서 열어도 볼 수 있을 정도로 깔끔합니다.
학습에서의 선택
저는 타임리프를 중심으로 학습을 진행하려고 합니다. JSP는 스프링 부트에서 권장하지 않고, 기능도 많이 부족하기 때문입니다. 타임리프를 사용하면 개발 생산성이 높아지고, 기능도 다양하게 제공됩니다.
마치며
이렇게 자바 백엔드 웹 기술의 역사와 발전 과정에 대해 살펴보았습니다. 😊
과거의 기술들을 이해하고 현재의 기술을 공부하면 더 나은 개발자가 될 수 있다고 생각합니다. 감사합니다.