로직과의 사투/CS

미들웨어와 WAS 그리고 Web Server

미들웨어

 미들웨어는 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어를 말한다. 3계층 클라이언트/서버 구조에서 미들웨어가 존재하며 일반적으로 웹 브라우저에서 데이터베이스로부터 데이터를 저장하거나 읽어올 수 있게 중간에 미들웨어가 존재하게 된다. 대표적으로 TP Monitor(Transaction Processing Monitor), WAS(Web Application Server) 등이 있다.
 클라이언트 사이드의 비즈니스 로직을 최소로 줄이고 비즈니스 로직 자체를 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입력과 출력만 담당하게 만들어 클라이언트의 크기를 줄일 수 있다. 만약 프로그램의 비즈니스 로직이 변경되어도 모든 클라이언트를 다시 배포할 필요가 없이 미들웨어만 변경하면 된다.

정적 페이지(Static pages)와 동적페이지(Dynamic Pages)

 WAS와 Web Server를 이해하기 위해선 정적페이지와 동적페이지를 먼저 알아야한다.
 정적페이지는 간단히 미리 저장된 파일(HTML, JavaScript, CSS)이 그대로 전달되는 페이지이다. 사용자는 서버에 저장된 데이터가 변경되지 않는 한 고정된 웹 페이지를 보게 된다.
 동적페이지는 서버에 있는 데이터를 비즈니스 로직등에 의해 가공 처리한 후 생성되어 전달되는 웹페이지를 말한다. 동적 페이지는 데이터를 가공해 사용자에게 보여지기때문에 DB와 WAS가 필요하게 된다. 클라이언트에서 요청을 보내면 WAS에서 DB를 조회하거나 외부 서버에서 데이터를 읽어와 HTML로 가공 후 렌더링하는 과정을 거치며 이 과정을 서버 사이드 렌더링 (Server Side Rendering, SSR) 이라한다.

웹서버 (Web Server)

 웹서버는 클라이언트의 요청이 들어오면 정적 페이지를 전용으로 처리하는 역할을 한다. HTTP를 기반으로 하여 클라이언트의 요청을 서비스 하는 기능을 담당한다. 정적 콘텐츠를 제공함에 있어 WAS를 거치지 않고 바로 제공이 가능하며, 동적인 컨텐츠에 대한 요청이 들어오면 WAS에 Request를 보내고 WAS가 처리한 결과(Response)를 클라이언트에게 전달한다. 대표적으로 Apache HTTP Server, Nginx 등이 있다.

WAS (Web Application Server)

 WAS(통칭 와스)는 DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server 이다. HTTP를 통해 컴퓨터나 장치 어플리케이션을 수행해주는 미들웨어이다. 주로 DB서버와 같이 수행되는데 클라이언트의 요청을 DB 서버와의 매개를 통해 비즈니스 로직 등을 처리하는 역할을 수행한다.

웹서버와 WAS를 분할하여 사용하는 이유

 WAS에도 웹서버처럼 정적인 컨텐츠를 처리하는 데 있어서 성능상 큰 차이가 없지만 웹서버와 WAS를 구분하는 이유에는 여러가지가 있다. 일반적으로 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 그렇기 때문에 DB 조회나 다양한 로직을 처리하기 바쁜 WAS는 정적 컨텐츠에 대한 요청은 웹서버에 일임하고 동적 컨텐츠를 응답하는 데 집중하여 서버의 부담을 줄일 수 있다. 두번째로 웹서버와 WAS를 분리하여 보안강화를 시킬 수 있다. WAS에는 실제 Web Application이 실행되기 때문에 외부와 직접 연결이 되어 있다면 리소스들이 외부로 노출될 우려가 있다. 세번째 이유로는 WEB서버에 여러대의 WAS를 연결하여 로드 밸런싱이 가능하다는 데 있다. 규모가 큰 서비스에서는 하나의 WEB서버에 하나의 WAS가 연결된 구조로는 많은 요청을 처리하는 데에 어려움이 생기게 된다. 그렇기 때문에 WAS를 여러대 두고 Web Server에서 요청을 분산시켜 로드밸런싱 해줌으로써 하나의 WAS가 처리하는 요청의 양이 줄어들어 안정적인 서비스 운영이 가능하다. 또한, 여러 대의 WAS를 사용하면 하나의 WAS에서 장애가 생기더라도 해당 WAS를 사용 중지시키고 재시작 함으로써 무중단 운영, 장애 극복(Failover) 등에 유리하다.

References

https://ko.wikipedia.org/wiki/%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4

https://swjeong.tistory.com/57

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

https://velog.io/@change/WEB%EC%84%9C%EB%B2%84-WAS-%EB%B6%84%EB%A6%AC-%EC%9D%B4%EC%9C%A0

'로직과의 사투 > CS' 카테고리의 다른 글

헥사고날 아키텍처 적용하기  (0) 2024.06.26
[Network] 자주 찾게 되는 네트워크 상식  (0) 2023.01.31
빅오 표기법  (0) 2021.06.21