웹 서버, 웹 애플리케이션 서버(WAS), Servlet
-
웹 서버 vs WAS
- 웹 서버: 정적 리소스(HTML, CSS, JS) 반환
- WAS: 동적 리소스 처리(JSP, REST API 등) 및 비즈니스 로직 수행
- 현대 웹 시스템에서는 웹 서버가 정적 리소스를 담당하고, WAS는 애플리케이션 로직에 집중하도록 분리됨.
-
WAS의 주요 역할
- TCP/IP 연결, HTTP 요청/응답 처리, 비즈니스 로직 수행, HTTP 응답 생성
- WAS는 반복적인 HTTP 요청/응답 처리 과정을 담당하며, 개발자가 비즈니스 로직에만 집중할 수 있도록 도와줌.
-
Servlet의 역할
- WAS 내부에서 동작하며 HTTP 요청을 처리하고 응답을 생성하는 자바 기반 서버 프로그램
- TCP/IP 연결, 요청/응답 처리, Content-Type 확인, 응답 메시지 생성 등의 작업을 자동으로 수행
- 싱글톤 객체로 생성되며, WAS의 멀티쓰레드 환경에서 동작하여 하나의 Servlet 인스턴스를 여러 요청이 공유함
-
WAS의 쓰레드 관리
- 요청마다 쓰레드를 생성하면 성능 이슈가 발생하므로 Thread Pool을 사용
- Thread Pool의 크기는 CPU, 메모리, 애플리케이션 로직 복잡도 등을 고려하여 조정해야 함
- 모든 쓰레드가 사용 중일 경우 대기(Blocking) 또는 요청 거부(Rejection) 정책 적용 가능
정적 리소스, HTML 페이지, HTML API
- 정적 리소스: 변하지 않는 HTML, CSS, JS 파일 제공
- HTML 페이지(SSR 기반): 서버에서 요청 데이터를 기반으로 동적 HTML 생성 후 반환
- HTML API(REST API): HTML이 아닌 데이터(JSON, XML 등)만 반환하여 클라이언트에서 화면을 구성
HTML API라는 용어보다는 REST API로 표현하는 것이 일반적임.
CSR vs SSR 차이 정리
방식 | HTML 생성 위치 | 초기 로딩 속도 | SEO 적합성 | 동적 페이지 업데이트 |
---|
SSR (Server-Side Rendering) | 서버에서 HTML 생성 후 반환 | 초기 로딩 빠름 | 검색 엔진 친화적 | 새 요청마다 페이지 전체 다시 로드 |
CSR (Client-Side Rendering) | 클라이언트에서 JS가 HTML 구성 | 초기 로딩 느림 (JS 실행 필요) | SEO 불리함 (추가 설정 필요) | 화면 일부만 동적 업데이트 가능 |
SSR은 서버에서 HTML을 생성해 반환하는 방식이며, CSR은 클라이언트(브라우저)에서 JavaScript가 데이터를 요청하고 화면을 구성하는 방식.
검색 엔진 최적화를 고려할 때는 SSR이 유리하며, CSR은 사용자 경험이 중요한 SPA(Single Page Application)에서 많이 사용됨.
자바 웹 기술의 역사
-
Servlet (서블릿, 1997년 도입)
- 자바 코드로 직접 HTML을 생성해야 했기 때문에 개발 난이도가 높음
- HTTP 요청/응답을 처리하는 API 제공
-
JSP (JavaServer Pages, 1999년 도입)
- HTML 내에 자바 코드를 삽입 가능하여 개발 생산성이 향상됨
- 하지만 비즈니스 로직과 뷰가 섞이는 문제가 발생함
-
Servlet + JSP 조합 → Spring MVC 등장
- JSP를 뷰로 사용하고, 서블릿을 컨트롤러로 활용하는 패턴 등장
- 유지보수가 어려워지면서 MVC 패턴이 도입됨
-
MVC 프레임워크의 춘추전국시대
- 다양한 프레임워크 등장(Struts, Spring MVC 등)
- Struts가 대세였으나, Spring MVC가 점점 인기를 얻음
- Struts + Spring MVC를 혼합하여 사용하는 방식도 존재
-
애노테이션 기반 Spring MVC 등장
- XML 설정이 복잡하던 기존 방식 대신 애노테이션(@Controller, @RequestMapping 등) 기반 코드 가능
- 생산성과 유지보수성이 크게 향상됨
-
Spring Boot 등장 (2014년)
- 내장 Tomcat 등 WAS 포함하여 별도 WAS 설정 없이 실행 가능
- @SpringBootApplication 하나로 빠르게 프로젝트 구성 가능
- 빌드 및 배포가 간소화됨
자바의 뷰 템플릿 엔진 역사
-
JSP
- 초창기 뷰 템플릿 엔진
- 속도가 느리고 기능이 부족하며, HTML과 자바 코드가 섞이는 문제가 발생함
-
Freemarker & Velocity (JSP의 단점 해결)
- JSP보다 빠르고 기능이 강력함
- 한때 Velocity가 많이 사용되었으나 현재는 유지보수 중단됨
-
Thymeleaf (타임리프) 등장 → Spring MVC와 강력한 통합
- 네추럴 템플릿(Natural Template) 지원으로 HTML 형태 그대로 유지 가능
- Spring MVC와의 연동이 편리하고 확장성이 뛰어남
- 성능 면에서는 Freemarker가 더 좋지만, Spring에서는 Thymeleaf 사용을 권장함
최종 요약
-
자바 웹 기술 발전 과정
- 서블릿 → JSP → Spring MVC → Struts & Spring MVC 혼합 사용

(웹 기술의 춘추전국시대) → 애노테이션 기반 Spring MVC → Spring Boot
-
자바 뷰 템플릿 엔진 발전 과정
- JSP → Freemarker, Velocity → Thymeleaf (Spring MVC와 강력한 연동 가능)