728x90
Web Server와 Web Application Server를 알아보기전에 정적 페이지와 동적 페이지에 대해 알고 넘어가야한다
Static Pages (정적 페이지)
- 내용이 바뀌지 않는 페이지(항상 동일한 내용)
- Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다
- 항상 동일한 페이지를 반환한다
Dynamic Pages (동적 페이지)
- 파라미터에 따라 내용이 변경되는 페이지
- 파라미터의 내용에 맞게 동적인 contents를 반환한다
- Web Server에 의해 실행되는 프로그램을 통해 만들어진 결과물
Web (웹)
- 웹은 HTTP 기반이며, HTTP 메시지에 모든 것을 전송한다
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML(API)
- 거의 모든 형태의 데이터 전송 가능
- 서버 간에 데이터를 주고 받을 때도 대부분 HTTP 사용
Web Server (웹 서버)
- 인터넷 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터
- 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터
- 클라이언트 : 웹 서버에게 주소(URL)를 가지고 통신 규칙(http)에 맞게 요청하면, 알맞은 내용(html)을 응답 받음
- 서버 : 클라이언트의 요청을 기다리고, 웹 요청(http)에 대한 데이터를 만들어서 응답한다. 이대 데이터는 웹에서 처리할 수 있는 html,css, 이미지 등 정적인 데이터로 한정
- NGINX, APACHE 등이 있다
Web Server의 기능
- HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능을 담당한다
- 요청에 따라 아래 두 가지 기능 중 적절하게 선택하여 수행한다
- 기능 1)
- 정적인 컨텐츠 제공
- WAS를 거치지 않고 바로 자원을 제공한다
- 기능 2)
- 동적인 컨텐츠 제공을 위한 요청 전달
- 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답,Response)한다.
Web Server가 필요한 이유?
- 클라이언트에 이미지 파일(정적 컨텐츠)을 보내는 과정을 생각해보면,
- 이미지 파일과 같은 정적인 파일들은 웹 분서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다
- 클라이언트는 HTML 문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 받아온다
- Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다
- 따라서 Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다
Web Application Server (WAS)
- DB조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
- 프로그램 코드를 실행해서 애플리케이션 로직을 수행한다
- 동적 HTML, HTTP API(JSON)
- 서블릿, JSP, 스프링 MVC
- HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다
- 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다
- 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다
- 즉 WAS는 JSP, Servlet 구동 환경을 제공한다
- 톰캣, Jetty, Undertow 등이 있다
WAS의 역할
- WAS = Web Server + Web Container
- Web Server 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다
- 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다
- 주로 DB 서버와 같이 수행된다
- 현재는 WAS가 가지고 있는 Web Server도 정적인 컨텐츠를 처리하는 데 있어서 성능상 큰 차이가 없다
WAS의 주요 기능
- 프로그램 실행 환경과 DB 접속 기능 제공
- 여러 개의 트랜잭션(논리적인 작업 단위) 관리 기능
- 업무를 처리하는 비즈니스 로직 수행
WAS가 필요한 이유?
- 웹 페이지는 정적 컨텐츠 + 동적 컨텐츠 모두 존재한다
- 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다
- 이때, Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야한다
- 하지만 이렇게 수행하기에는 자원이 절대적으로 부족하다
- 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.
Web Sever와 WAS의 차이
- 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직
- 자바는 서블릿 컨테이너 기능을 사용하면 WAS
- 서블릿 없이 자바 코드를 실행하는 서버 프레임워크도 존재한다
- WAS는 애플리케이션 코드를 실행하는데 더 특화되었다
WAS가 Web Server의 기능도 모두 수행하면 되지 않을까?
- 기능을 분리하여 서버 부하 방지
- WAS는 기본적으로 동적 컨텐츠를 제공하기 위해 존재하는 서버
- WAS는 DB 조회나 다양한 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에 제공하는 것이 좋다
- 만약 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려진다
- 즉 이로 인해 페이지 노출 시간이 늘어나게 될 것이다
- 물리적으로 분리하여 보안 강화
- SSL에 대한 암복호화 처리에 Web Server를 사용
- 여러 대의 WAS를 연결 가능
- 로드 밸런싱을 위해 Web Server를 사용
- 장애 극복,처리에 유리하다
- 특히 대용량 웹 애플리케이션의 경우 (여러 개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다
- 예를 들어, 앞 단의 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작 함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다
- 여러 언어의 웹 어플리케이션 서비스가 가능하다
- Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.
결론적으로, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server, WAS를 각기 사용한다
Web Service Architecture
클라이언트 - WAS - DB
- 장점 :
- WAS,DB만으로 시스템 구성 가능
- WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능
- 단점 :
- WAS가 너무 많은 역할 담당을 해서 서버 과부하가 우려된다
- WAS 장애시 오류 화면도 노출 불가능
클라이언트 - WebServer - WAS - DB
- 정적 리소스는 웹 서버가 처리한다
- 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다
- WAS는 중요한 애플리케이션 로직 처리를 전담한다
- 효율적인 리소스 관리가 가능하다
- 정적 리소스 사용량 ⬆️ : Web Server 증설
- 동적 리소스 사용량 ⬆️ : Web Application Server 증설
- 애플리케이션 로직이 등장하는 WAS 서버는 잘 죽는다
- 정적 리소스만 제공하는 Web Server는 잘 죽지 않는다
- WAS,DB 장애시 Web Server가 오류 화면 제공이 가능하다
'Spring' 카테고리의 다른 글
AOP의 특징과 개념 (feat. Filter, Interceptor) (0) | 2023.03.07 |
---|---|
서블릿과 서블릿 컨테이너 (0) | 2023.03.07 |
IoC와 컨테이너 (0) | 2023.03.07 |
스프링 의존성 주입(Dependency Injection, DI) (0) | 2023.02.25 |
스프링 프레임워크(Spring Framework) (0) | 2023.02.24 |