웹 서버
웹 서버는 HTTP를 기반으로 동작하며 우리가 흔히 사용하는 크롬 브라우저, 엣지, 사파리 등의 클라이언트(사용자)로부터 HTTP요청을 받아 단순 HTML, CSS, JS, 이미지 파일들 즉 정적 컨텐츠들을 제공하는 서버이다
웹 서버는 브라우저(클라이언트)의 요청을 받아서 단순히 정적 컨텐츠를 제공하는 것이라면 해당 컨텐츠를 제공해주고 만약 웹 애플리케이션 서버의 도움이 필요하다면 브라우저로부터 받은 요청을 웹 애플리케이션 서버에 전달하는 역할을 수행하기도 한다
예를 들어서 사용자가 웹사이트에 로그인하기 위해서 로그인하러가기 링크를 통해서 사용자에게 로그인 폼을 제공해주는 것은 단순 HTML과 CSS, JS만으로 처리가 가능하기 때문에 이 때는 웹 서버가 컨텐츠를 제공해준다.
사용자가 로그인 폼에 ID와 PASSWORD를 입력하고 로그인 버튼을 클릭하면 해당 요청을 웹 서버가 받지만 이 때 '로그인' 기능은 DB에 접속해서 요청받은 ID와 PASSWORD가 DB에 있는 데이터와 일치하는지 확인해야하고 검증도해야하고 이것저것 처리할 일들이 많다.
이런 경우에는 웹 서버가 요청을 받은 뒤 다시 웹 애플리케이션 서버(WAS)로 넘겨주게 된다.
정리하자면, 웹 서버는 사용자로부터 받은 요청으로부터 정적컨텐츠를 제공해주거나 복잡한 로직이 필요한 요청은 웹 애플리케이션 서버로 요청을 넘겨주는 역할을 수행한다
웹 애플리케이션 서버(WAS)
웹 애플리케이션 서버, 앞으로는 WAS라고 줄여서 설명한다
WAS역시 웹 서버와 마찬가지로 HTTP기반으로 동작하며 웹 서버와 가장 큰 차이점이라면 Java코드를 실행하여 애플리케이션 로직을 수행할 수 있다.
위에 웹 서버에서 예시로 들었던 것처럼 사용자가 로그인을 위한 ID,PASSWORD를 입력하고 로그인버튼을 눌러 요청을 했을 때, WAS에서는 Java코드를 실행한다 하였으므로 JDBC와 같이 DB서버와 연결하여 해당 데이터가 DB에 존재하는지 확인하고 만약 유효하다면 사용자에게 로그인을 허가하는 역할을 수행한다
때문에 WAS는 JSP, Thymeleaf등을 통하여 동적 HTML을 제공하며 뿐만아니라 사용자가 없는 경우 즉, HTML을 제공할 필요가 없고 데이터를 제공해주기만 하면되는 서버간의 통신 같은 경우에는 JSON, XML과 같은 HTTP API통신을 수행하기도 한다
웹 서버와 웹 애플리케이션 서버를 구분하는 이유?
웹 서버와 WAS를 분리하여 설계하여 얻은 이점은 아래와 같다
- 리소스를 효율적으로 제공
- 유연한 서버 스케일링
- 클라이언트 메시지 처리
리소스를 효율적으로 제공
브라우저에게 정적 HTML, CSS, JS, 이미지 파일을 제공할 때에는 굉장히 적은 비용으로 제공하고 반대로 애플리케이션 로직을 수행하거나 동적 HTML을 제공하는 경우에는 굉장히 비싼 비용이 든다고 한다.
웹 서버와 웹 애플리케이션 서버가 하나로 묶여 정적 리소스 제공과 애플리케이션 로직 제공 모두 하나의 서버에서 처리된다면 비효율적인 서버 설계가 될 수 있으며 만약 DB커넥션 또는 애플리케이션 로직에서 에러가나서 서버가 죽어버리게 된다면 브라우저에게 정적 리소스 또한 제공하지 못하는 일이 발생하게 된다
유연한 서버 스케일링
만약 사용자로부터 정적 리소스 요청이 많아진다면 웹 서버를 늘리면되고, 로직이 필요한 요청이 많아진다면 WAS를 늘리면 되기 때문에 유연한 서버 스케일링을 처리할 수 있다
클라이언트 메시지 처리
서비스에서 주로 나타나는 에러는 웹 애플리케이션에서 로직을 처리한다거나, DB와 커넥션할 때 발생된다고 한다.
이 때 웹 서버와 웹 애플리케이션 서버가 하나로 묶여있다면 클라이언트에게 어떤 오류가 났는지 메시지를 제공할 수 없게 된다
하지만 웹 서버와 웹 애플리케이션을 분리하여 서버를 설계한다면 웹 애플리케이션 서버가 죽었을 경우에도 웹 서버에서는 해당 메시지를 클라이언트에게 제공할 수 있게 된다
'CS > HTTP' 카테고리의 다른 글
JSP와 JSP가 사장되는 이유 + MVC패턴을 사용하는 이유 (0) | 2024.04.09 |
---|---|
서블릿 (Servlet) (0) | 2024.04.07 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!