웹 서버, 웹 컨테이너, 애플리케이션 서버, WAS 용어 정리 한 김에 JSP/Servlet 기반 프로젝트와 React + Spring Boot 프로젝트 비교해보려고 한다.
1. JSP/Servlet 프로젝트 (전통적인 Java EE 웹 개발)
🔹 주요 구성 요소
- 웹 서버: Apache HTTP Server 또는 내장된 Tomcat 웹 서버
- 웹 컨테이너: Tomcat, JBoss, WebLogic 등
- 애플리케이션 서버: WebLogic, JBoss EAP (필요 시)
- WAS: Tomcat이 WAS 역할을 함 (Servlet/JSP 실행)
🔹 동작 방식
- 사용자가 브라우저에서 JSP 페이지 요청
- 웹 서버(Apache 등)가 정적 리소스를 전달하거나, 동적 요청을 웹 컨테이너(Tomcat) 로 넘김
- 웹 컨테이너가 Servlet 또는 JSP를 실행하고, 요청을 처리한 후 HTML 응답을 생성
- 브라우저가 최종 HTML을 렌더링하여 사용자에게 표시
🔹 특징
- 서블릿, JSP 중심 개발 → Java 코드와 HTML이 섞여 있어 유지보수가 어려움
- 서버 사이드 렌더링(SSR, Server-Side Rendering) → 서버에서 HTML을 만들어 클라이언트에 전달
- WAS에서 모든 요청을 처리 → 페이지 전환마다 서버에서 응답을 새로 생성해야 함
- AJAX를 사용하면 클라이언트와 서버 간의 일부 데이터만 주고받을 수도 있음
2. React + Spring Boot 프로젝트 (현대적인 웹 개발)
🔹 주요 구성 요소
- 웹 서버: React 개발용 Vite/webpack (개발 단계) + Nginx/Apache (배포 시)
- 웹 컨테이너: X (Spring Boot 자체 내장 WAS 사용)
- 애플리케이션 서버: Spring Boot 내장 WAS (Tomcat, Jetty, Undertow)
- WAS: Spring Boot 자체가 WAS 역할을 함
🔹 동작 방식
- React 프론트엔드 (CSR, Client-Side Rendering)
- 사용자가 React 앱에 접속하면 정적 HTML, JavaScript, CSS 파일을 다운로드
- 이후 React가 브라우저에서 실행되며 화면을 동적으로 조작 (싱글 페이지 애플리케이션, SPA)
- Spring Boot 백엔드 (API 서버)
- React에서 API 요청 발생 (예: /api/orders)
- Spring Boot(내장 WAS)에서 REST API 처리 후 JSON 데이터 반환
- React가 JSON을 받아 화면을 업데이트
🔹 특징
- 프론트엔드(React)와 백엔드(Spring Boot) 분리 → 유지보수 및 확장성 증가
- 클라이언트 사이드 렌더링(CSR) → 처음에 빈 HTML을 내려받고, JavaScript로 페이지를 동적 생성
- API 기반 통신 → React에서 API 호출을 통해 데이터를 받아옴 (ex. fetch(), axios)
- Spring Boot 내장 WAS → 웹 컨테이너와 애플리케이션 서버의 역할을 모두 수행 (독립 실행 가능)
📌 정리: JSP/Servlet과 React+Spring Boot의 차이
▶️ JSP/Servlet 프로젝트
- WAS(Tomcat)에서 JSP/Servlet 실행 → 모든 HTML을 서버에서 만들어 클라이언트에 전달
- 페이지 전환마다 새로운 HTML을 요청해야 함
- 유지보수가 어려운 서버 사이드 렌더링(SSR) 방식
▶️ React + Spring Boot 프로젝트
- React가 UI를 클라이언트에서 동적으로 렌더링
- Spring Boot는 API 서버 역할만 수행 (JSON 반환)
- 싱글 페이지 애플리케이션(SPA) + API 통신 구조
🎯 결론
- JSP/Servlet 프로젝트는 웹 컨테이너(Tomcat)가 중심, 서버에서 HTML을 생성하는 방식
- React + Spring Boot 프로젝트는 프론트엔드(React)와 백엔드(Spring Boot)가 분리, 클라이언트에서 화면을 동적으로 구성하고 API로 데이터를 주고받는 방식
❓ 내가 했던 JSP/Servlet 기반 프로젝트에서는?
JSP/Servlet 기반 프로젝트에서 일반적으로 애플리케이션 서버(WebLogic, JBoss EAP 등)를 따로 사용하지 않음. 대신 **Tomcat 같은 웹 컨테이너(WAS로도 사용됨)**에서 JSP/Servlet을 실행
🐢 JSP/Servlet 웹 컨테이너인 WebLogic, JBoss EAP는 뭐야?
- WebLogic (Oracle WebLogic Server)
- 오라클에서 만든 상용 애플리케이션 서버
- Java EE (Jakarta EE) 표준을 준수하는 풀스택 애플리케이션 서버
- 기업에서 대규모 시스템을 운영할 때 사용 (트랜잭션 관리, 보안, 클러스터링 지원)
- JBoss EAP (Enterprise Application Platform)
- Red Hat에서 만든 Java EE 기반 오픈소스 애플리케이션 서버
- Spring Boot보다 더 전통적인 기업용 Java EE 표준 서버
- 트랜잭션 관리, 메시징 서비스, 보안 기능이 강력함
- JBoss의 오픈소스 버전은 WildFly로 제공됨
👉 쉽게 말하면,
Tomcat 같은 웹 컨테이너는 JSP/Servlet을 실행하는 최소한의 기능을 제공하지만,
WebLogic이나 JBoss EAP 같은 애플리케이션 서버는 대규모 엔터프라이즈 시스템을 위한 추가 기능(트랜잭션 관리, 보안, 부하 분산 등)이 포함
👉 대부분의 JSP/Servlet 기반 프로젝트는 애플리케이션 서버를 사용하지 않고, 웹 컨테이너(WAS)인 Tomcat에서 실행
- Tomcat은 웹 컨테이너이면서 WAS 역할도 수행할 수 있음.
- Java EE(=Jakarta EE) 전체 스펙이 필요하지 않으면 WebLogic, JBoss 같은 애플리케이션 서버를 쓸 이유가 없음.
🚀 정리
- 개인 JSP/Servlet 프로젝트는 **웹 컨테이너(Tomcat)**에서 실행되었을 확률이 높음.
- WebLogic, JBoss EAP 같은 애플리케이션 서버는 Java EE의 풀스택 기능이 필요할 때 사용하는데, 일반적인 JSP/Servlet 프로젝트에서는 필요하지 않음.
- Tomcat은 기본적으로 웹 컨테이너이지만, WAS 역할도 수행할 수 있어서 애플리케이션 서버 없이도 충분히 동작할 수 있음.
'개발인생 > Project' 카테고리의 다른 글
페이징처리 프로젝트 구현(Oracle) (0) | 2025.03.17 |
---|---|
페이징처리 프로젝트 구현(React) (0) | 2025.03.17 |
페이징처리 - Pagination.js + Pageable (0) | 2025.03.17 |
Spring Security 설정 완벽 분석 - 보안 설정 가이드 (2) | 2025.03.05 |
프로젝트 코드 리뷰: JPQL vs QueryDSL 최적화 및 리팩토링 (0) | 2025.02.21 |