2025. 2. 28. 06:07ㆍ코딩 도구/백엔드 개발 (Backend Development)
웹 서버와 웹 애플리케이션 서버(WAS)의 차이
1. 개요
웹 시스템을 구성하는 주요 컴포넌트 중 웹 서버(Web Server)와 웹 애플리케이션 서버(WAS, Web Application Server)의 역할과 차이를 이해하는 것은 중요하다. 이 글에서는 인프런 김영한님의 "스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술"을 수강하고 정리했습니다.
2. 웹 서버(Web Server)란?
웹 서버는 클라이언트(주로 웹 브라우저)로부터 HTTP 요청을 받아 정적 리소스를 제공하는 역할을 한다. 정적 리소스는 HTML, CSS, JavaScript, 이미지, 동영상 파일과 같은 변경되지 않는 콘텐츠를 포함한다.
웹 서버의 주요 기능
- HTTP 요청을 받아 클라이언트에게 정적 리소스를 반환한다.
- 대표적인 웹 서버로는 Apache, Nginx 등이 있다.
- 주로 HTML, CSS, JavaScript, 이미지 파일 등의 정적 파일을 제공한다.
- 추가적인 기능으로 로드 밸런싱, 캐싱 등을 지원할 수 있다.
3. 웹 애플리케이션 서버(WAS)란?
웹 애플리케이션 서버(WAS)는 클라이언트의 요청을 받아 프로그램 코드를 실행하고 동적인 응답을 생성하는 역할을 한다. 즉, 사용자의 입력을 받아 처리하고, 데이터베이스와 연동하여 결과를 생성하는 등의 동작을 수행한다.
WAS의 주요 기능
- HTTP 요청을 처리하여 동적인 데이터를 생성한다.
- 비즈니스 로직을 실행하고, 데이터베이스 연동을 수행한다.
- 서블릿(Servlet), JSP, 스프링(Spring MVC) 등의 웹 프레임워크를 실행할 수 있다.
- 대표적인 WAS로는 Tomcat, Jetty, Undertow 등이 있다.
4. 웹 서버와 WAS의 차이 표
웹 서버 : WAS
역할 | 정적 리소스 제공 | 동적인 웹 애플리케이션 로직 실행 |
예시 | Apache, Nginx | Tomcat, Jetty, Undertow |
실행 가능 프로그램 | HTML, CSS, JS, 이미지 등 | 서블릿, JSP, 스프링 MVC 등 |
추가 기능 | 로드 밸런싱, 캐싱 등 | 데이터베이스 연동, 비즈니스 로직 실행 |
5. 실제 웹 시스템 구성 방식
1) WAS만 사용하는 경우
웹 애플리케이션 서버(WAS) 하나만을 사용하여 모든 요청을 처리하는 방식이다.
- 장점: 시스템이 단순해지고, 구성 관리가 쉬움
- 단점: 트래픽이 증가하면 서버 과부하가 발생할 가능성이 높음
2) 웹 서버 + WAS 분리하는 경우
웹 서버와 WAS를 분리하여 웹 서버는 정적 리소스를 제공하고, WAS는 애플리케이션 로직을 처리하는 구조이다.
- 장점: 리소스를 효율적으로 분배할 수 있음. 정적 리소스는 웹 서버가 빠르게 제공하고, WAS는 동적 처리를 담당하여 부하를 줄일 수 있음.
- 단점: 구성 및 관리가 복잡할 수 있음.
6. 서블릿과 서블릿 컨테이너
1) 서블릿(Servlet) 개념
서블릿(Servlet)은 Java 기반 웹 애플리케이션에서 클라이언트의 요청을 처리하는 작은 프로그램이다. 사용자의 요청을 받아 동적인 웹 페이지를 생성할 때 사용된다.
2) 서블릿 컨테이너(Servlet Container)
서블릿을 실행하고 관리하는 환경을 제공하는 WAS를 서블릿 컨테이너라고 한다. 대표적으로 Tomcat이 있다.
서블릿 컨테이너의 역할:
- 서블릿 객체를 생성하고 초기화, 실행, 종료하는 생명주기 관리
- HTTP 요청을 처리하고, 응답을 반환
- 멀티 쓰레드를 이용한 동시 요청 처리
7. WAS의 멀티 쓰레드 지원과 쓰레드 풀
1) 멀티 쓰레드 환경에서의 요청 처리
- WAS는 클라이언트의 동시 요청을 처리하기 위해 멀티 쓰레드 환경을 지원한다.
- 개발자는 멀티 쓰레드 관련 코드 작성 없이, 싱글 쓰레드 프로그래밍 방식으로 개발할 수 있다.
- 그러나 싱글톤 객체(서블릿, 스프링 빈) 사용 시 주의해야 한다.
2) 쓰레드 풀(Thread Pool) 사용
- WAS는 쓰레드 풀을 이용하여 일정 개수의 쓰레드를 미리 생성하고 관리한다.
- 최대 쓰레드 수를 조정하여 성능을 최적화할 수 있다.
- 너무 낮게 설정하면 서버 리소스는 여유롭지만 응답 지연 발생
- 너무 높게 설정하면 CPU, 메모리 사용량 증가로 서버 다운 가능
실무 튜닝 팁
- 성능 테스트를 통해 적절한 쓰레드 개수를 설정하는 것이 중요하다.
- Apache ab, JMeter, nGrinder 등의 도구를 활용하여 성능 테스트를 진행한다.
8. 서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)
1) SSR(Server-Side Rendering)
- 서버에서 HTML 최종 결과를 만들어 클라이언트에 전달
- 주로 정적인 페이지에 사용됨
- 관련 기술: JSP, Thymeleaf
- 백엔드 개발자가 주로 다룸
2) CSR(Client-Side Rendering)
- 자바스크립트를 이용하여 브라우저에서 동적으로 HTML을 생성
- 주로 동적인 화면에 사용됨 (예: 구글 지도, Gmail, 구글 캘린더)
- 관련 기술: React, Vue.js
- 웹 프론트엔드 개발자가 주로 다룸
백엔드 개발자가 알아야 할 UI 기술
- 서버 사이드 렌더링 기술(JSP, Thymeleaf)은 필수
- 클라이언트 사이드 렌더링 기술(React, Vue.js)은 선택사항
- 백엔드 개발자는 서버, DB, 인프라 관련 기술을 익히는 것이 더 중요
'코딩 도구 > 백엔드 개발 (Backend Development)' 카테고리의 다른 글
MVC 패턴: 서블릿과 JSP의 한계를 넘어 (0) | 2025.03.01 |
---|---|
서블릿과 HTTP 요청/응답 (0) | 2025.02.24 |
[Spring] 빈 스코프 (0) | 2025.02.21 |
[Spring] 빈 생명주기 콜백 (0) | 2025.02.19 |
[Spring] 의존관계 자동 주입 (0) | 2025.02.18 |