Web Server와 WAS(Web Application Server)에 대해 알아보도록 하자.
이들을 설명하기 앞서, 이 둘의 차이를 이해하기 위해 정적 페이지와 동적 페이지의 차이부터 알아보자.
📄 정적 페이지와 동적 페이지
정적 페이지 (Static Pages)
정적 페이지는 미리 작성된 내용이 고정되어 있으며, 요청에 따라 동일한 내용을 제공한다.
이는 정적 콘텐츠(HTML, CSS, JavaScript, 이미지 등)로 구성되며, 파일 시스템에 저장되어있다.
내용이 변경되지 않거나 변경 주기가 적은 경우에 사용된다.
정적 페이지는 웹 서버에 의해 처리되며, 클라이언트의 요청에 따라 해당 파일을 그대로 전송하여 보여준다.
동적 페이지 (Dynamic Pages)
동적 콘텐츠는 클라이언트의 요청에 따라 서버에서 동적으로 생성되는 페이지이다.
동적 페이지는 DB 조회, 사용자 입력 처리, 외부 API 호출 등을 통해 콘텐츠를 생성한다.
이는 사용자에게 맞춤화된 정보를 제공하거나 사용자와의 상호 작용을 위해 사용된다.
동적 페이지는 WAS에 의해 처리되며, 클라이언트의 요청에 따라 동적으로 콘텐츠를 생성하여 보여준다.
정적 페이지와 동적 페이지 예시
정적 페이지와 동적 페이지 예시로 각각 정책 페이지, 게시판을 들 수 있다.
정적 페이지 예시) 정책 페이지
정책 페이지는 회사나 기관의 정책, 이용 약관, 개인 정보 보호 정책 등을 안내하는 페이지이다.
일반적으로 HTML로 작성되며, 내용이 변경되지 않는 경우가 많다.
사용자가 해당 페이지에 접근을 요청하면, 웹 서버는 정적 페이지 HTML 파일을 그대로 클라이언트에게 전송한다.
이후에도 정책이 변경되지 않는 한 동일한 내용이 계속해서 제공된다.
동적 페이지 예시) 게시판
사용자가 게시판 페이지에 접속하면 웹 서버는 동적으로 게시판 페이지를 생성해야 한다.
게시판 페이지는 DB에 저장된 글 목록을 조회하여 게시물 리스트를 동적으로 생성한다.
사용자가 새로운 글을 작성하면 웹 서버는 해당 글을 DB에 저장하고, 게시판 페이지를 업데이트하여 새로운 글을 표시한다.
게시판은 사용자들의 활동에 따라 동적으로 변하는 콘텐츠를 제공한다.
🖥 웹 서버와 WAS
웹 서버와 WAS는 웹 어플리케이션의 구성 요소로서 역할이 다르다.
웹 서버는 정적 콘텐츠 제공과 클라이언트와의 통신을 처리하는 역할을 수행하는 반면,
WAS는 동적 콘텐츠 생성과 DB와의 상호 작용을 처리하는 역할을 한다.
Web Server와 WAS에 대해 구체적으로 알아보자.
웹 서버
웹 서버는 클라이언트로부터 HTTP 요청을 받아들이고, 해당 요청에 대한 처리를 수행하여 클라이언트에게 HTTP 응답을 전송하는 소프트웨어이다.
ex) Apache HTTP Server, NginX
요청에 따라 아래 두 가지 기능 중 적절하게 선택하여 수행한다.
- without WAS - 정적 페이지 제공
- WAS를 거치지 않고 바로 정적인 웹 컨텐츠를 제공한다.
- HTML, CSS, 이미지 파일 등과 같은 정적 파일을 클라이언트에 전송하여 웹 페이지를 표시한다.
- with WAS - WAS에게 요청 전달
- 동적인 컨텐츠 제공을 위해 WAS에게 요청을 전달한다.
- 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(Response)한다.
WAS
동적인 웹 어플리케이션을 실행하는 역할을 한다.
웹 어플리케이션 로직을 실행하고 DB와의 상호 작용, 비즈니스 로직 처리, 트랜잭션 관리 등을 수행한다.
웹 서버와 함께 작동하여 클라이언트 요청에 대한 동적인 처리를 담당한다.
ex) Apache Tomcat, JBoss, WebSphere
일반적으로 WAS는 웹 서버와 웹 컨테이너를 통합하여 제공한다.
웹 서버는 위에서도 설명했듯 클라이언트로부터의 HTTP 요청을 받아들이고, 정적인 콘텐츠를 제공하는 역할을 수행하며
웹 컨테이너는 서블릿이나 JSP같은 웹 어플리케이션 컴포넌트를 실행하고, 필요한 서비스(세션 관리, DB 연동 등)를 제공한다.
웹 서버와 WAS의 협업 in 동적 컨텐츠
동적 컨텐츠 제공 요청이 웹 서버에 도착하면, 웹 서버는 해당 요청을 WAS에게 전달하여 처리를 요청한다.
WAS는 동적 페이지를 생성하고 필요한 데이터 처리, 비즈니스 로직 실행 등을 수행한 후, 응답을 생성한다.
이 응답은 다시 웹 서버로 전달되고, 웹 서버는 클라이언트에게 해당 응답을 반환한다.
이렇게 웹 서버와 WAS가 협력하여 동적 컨텐츠를 제공하는 구조를 일반적으로 사용한다.
웹 서버와 WAS간의 통신
여기서 웹 서버와 WAS 간의 통신은 주로 HTTP 프로토콜을 사용한다.
즉, 클라이언트와 웹 서버간의 통신도 HTTP 통신으로, 웹 서버와 WAS간의 통신도 HTTP 통신으로 이루어진다.
웹 서버와 WAS가 통합된 소프트웨어로 제공되는 경우엔, 웹 서버와 WAS는 하나의 프로세스 또는 스레드로 실행되며, 내부적으로 통신을 수행한다.
📌 웹서버와 WAS를 분리하는 이유?
위에서도 보편적인 경우 WAS는 웹 서버와 웹 컨테이너를 통합하여 제공한다고 했다.
WAS가 웹 서버의 역할도 동시에 수행가능한데, 웹서버를 따로 두는 경우는 왜 그러는걸까?
그는 바로 서버의 부하를 분산하기 위해서이다.
책임 분할
우선, 책임 분할을 통해 서버 부하를 방지할 수 있다.
정적 컨텐츠는 웹 서버가, 동적 컨텐츠는 WAS가 담당하도록 하여 WAS에게 몰리는 서버 부하를 분산할 수 있다.
로드 밸런싱
또한, 웹 서버의 로드 밸런싱 기능을 통해 여러대의 WAS를 동시에 운영해 서버 부하를 방지할 수 있다.
쉽게 말해, 웹 서버에 들어온 요청들을 여러대의 WAS에 적절히 분배한다.
이 때, 여러대의 WAS중 한 대에 문제가 생길 경우, 웹 서버는 Health Check를 통해 비정상 서버에게 요청을 전달하지 않도록 할 수 있다.
또한, 지정 횟수 이상의 정상 응답이 오면 다시 해당 서버를 정상 서버로 판단하여 요청을 전달한다.
결론
WAS는 보편적으로 웹 서버를 내포함으로 WAS만으로도 서비스가 정상적으로 동작한다.
하지만, 서비스의 확장성과 안정성을 고려한다면 앞단에 웹 서버를 두는 것이 유리하다.
참고 자료
'프로그래밍 > 인프라' 카테고리의 다른 글
Nginx란? (0) | 2023.05.28 |
---|---|
[Proxy] Forward Proxy와 Reverse Proxy (0) | 2023.05.28 |