Web Server
개념
- HTTP 프로토콜을 이용해 정적인 웹 페이지를 보여주는 역할을 하는 서버
- 클라이언트(웹브라우저)로부터 HTTP 요청을 받아들이고
- HTML, CSS, JAVASCRIPT, 이미지, 문서와 같은 웹페이지(웹 리소스)를 반환하는 컴퓨터 프로그램
- 이때 웹 서버는 클라이언트(웹 브라우저)가 해당 리소스를 받아서 화면에 랜더링(표시)함
- HTTP 프로토콜 기반으로, 클라이언트의 요청을 서비스하는 기능
역할
- 정적 컨텐츠 제공 : WAS를 거치지 않고 바로 자원 제공
- 동적 컨텐츠 제공을 위한 요청 전달
: 동적 컨텐츠 요청을 WAS로 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달
기능
- Reverse Proxy
- 서버와 클라이언트 사이에 프록시를 두고 프록시를 통해 데이터를 주고 받는다.
- 보안의 이유로 서버 내부 구조를 감추기 위해 사용
- Forward Proxy : 서버에 방문하는 클라이언트의 주소를 감춘다.
- Reverse Proxy : 클라이언트에게 서버의 주소를 감춘다.
- 로드 밸런싱
- 클라이언트의 요청에 따른 처리를 동작 중인 여러 WAS에게 적절히 분배
- 캐싱
- Reverse Proxy 의 캐시를 의미
- 서버로 찾아오는 클라이언트들이 자주, 반복적으로 요청하는 리소스들을 프록시 서버에 저장하고 제공
- (서버를 숨김)
- 주기적인 체크
- 웹 서버에 존재하는 수 많은 모듈을 사용해 WAS 서비스가 정상적으로 동작하고 있는지 체크
Reverse Proxy, 로드 밸런싱, 캐싱의 역할을 Web Server가 담당하기에 Web Server와 WAS를 함께 이용한다.
필요성
- 단순 정적 컨텐츠 처리를 맡으며 서버 부하 방지 및 효율적 분산처리 수행
예시
- Apache, NginX, IIS(Window 전용 웹서버)
WAS (Web Application Server)
개념
- DB 조회 및 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application Server
- HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어
- '웹 컨테이너', '서블릿 컨테이너' 라고도 불림
- 웹 컨테이너
- JSP, Servlet을 실행할 수 있는 소프트웨어
- 웹 서버에서 JSP를 요청하면
- 톰캣에서는 JSP 파일을 서블릿으로 변환하여 컴파일을 수행하고,
- 서블릿 수행 결과를 웹 서버에게 전달한다.
- WAS는 JSP, Servlet 구동 환경을 제공
- 웹 컨테이너
JSP (Java Server Page)
- HTML에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구
- JSP가 실행되면 서블릿으로 변환되며 웹 어플리케이션 서버에서 동작되며 필요한 기능 수행
- 위를 통해 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답
역할
- Web Server 기능들을 구조적으로 분리해 처리하는 목적으로 제시
- 현재 WAS가 가지는 Web Server도 정적 컨텐츠를 처리하는데 성능상 큰 차이가 없다.
기능
- 프로그램 실행 환경과 데이터베이스 접속 기능 제공
- 여러 개의 트랜잭션 관리
- 업무를 처리하는 비즈니스 로직 수행
- Web Service 플랫폼으로서의 역할
필요성
- 자원의 효율적 사용 : 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞춰 그때그때 결과 제공
예시
- Tomcat, Jetty, Undertow, Boss, Jeus, Web Sphere
왜 Web Server와 WAS를 분리할까?
1. 기능 분리로 서버 부하 방지
- 정적인 리소스(HTML, CSS, JS, 이미지 등)는 웹서버에서 빠르게 제공
- 복잡한 로직이 필요한 동적 요청만 WAS에서 처리하도록 분산
- 따라서 WAS의 리소스를 절약하여 성능을 높이고 처리 속도를 향상시킬 수 있음
2. 물리적 분리로 보안 강화
- 웹서버를 방화벽 앞단에 배치하여 보안 강화 가능
- 예: WAS의 내부 IP를 숨기고, 특정 요청만 허용
- 웹서버가 SSL 인증서를 관리하고 HTTPS 트래픽을 처리할 수 있음
3. 확장성(Scalability) 향상
- 독립적인 확장 가능
- 요청이 많아지면 웹서버만 여러 대 추가하거나, WAS만 증설 가능
- 부하 분산(로드 밸런싱) 가능
- 여러 개의 WAS를 연결하여 부하 분산 가능 → 안정적인 서비스 제공
- Failover 및 Failback 처리에 유리
- 한 대의 WAS에 장애가 발생해도 다른 WAS가 요청을 처리할 수 있어 서비스 중단 방지
- 여러 웹 애플리케이션 서비스 가능
- 하나의 웹서버에서 여러 개의 WAS에 연결하여 다양한 애플리케이션 서비스 제공 가능
'Language > JAVA' 카테고리의 다른 글
[Java] Wrapper Class (0) | 2025.02.05 |
---|---|
[JAVA] 입력 (0) | 2024.11.19 |
[명품 JAVA programming] CHAPTER 4 클래스와 객체(실습문제) (0) | 2023.03.19 |
[명품 JAVA programming] CHAPTER 4 클래스와 객체 (0) | 2023.03.19 |
[명품 JAVA programming] CHAPTER 3 반복문과 배열 그리고 예외 처리(실습문제) (0) | 2023.02.24 |