웹 서버란 무엇일까?
우선 웹 서버를 하드웨어 관점과 소프트웨어 관점으로 나누어 보아야한다.
하드웨어 관점 | '웹 서버의 소프트웨어'와 웹 사이트의 '컴포넌트 파일'들을 저장하는 컴퓨터 (컴포넌트 파일 : HTML, CSS, JS, 이미지) 웹 서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터(컴포넌트 파일들)를 주고 받을 수 있도록 한다. |
소프트웨어 관점 | 웹 사용자가 어떻게 호스트 파일에 접근하는지를 관리 웹 서버는 HTTP 서버 형태로 존재(웹 구현 시)하며, HTTP 서버는 HTTP의 소프트웨어 일부 |
위 두 가지 관점을 합쳐 보면 웹 서버는 브라우저가 HTTP를 통해 파일을 요청했을 때,
요청이 올바른 웹 서버(하드웨어)에 도달하면, HTTP 서버(소프트웨어)가 요청된 문서를 HTTP를 이용해 보내주는 것이라고 생각할 수 있다.
웹 서버의 종류
웹 서버에는 대표적으로 Apache, NginX, Window IIS등이 있다. IIS는 윈도우 GUI에 최적화된 것이기에 현업에서는 대부분 Apache 또는 NginX를 사용한다.
WAS의 종류
그렇다면 WAS는 무엇일까?
웹 서버, WAS (Web Application Server) 둘 다 웹과 서버가 들어가다보니 둘이 정확이 어떻게 다른지 헷갈릴 수 있다.
하지만 둘은 정확히 다른 역할을 하며 WAS의 종류도 위와 같이 다르다.
그런데 이상한 점이 있다.
분명 앞서 Apache는 웹 서버라고 했는데 왜 WAS의 종류 중 하나인 Tomcat은 앞에 Apache가 붙어있을까?
이것은 아파치(Apache) 재단에서 만든 것이라 그렇다. 그리고 톰캣(Tomcat)의 경우 안에 웹 서버가 내장되어 있다.
Spring Boot로 프로젝트를 해봤다면 톰캣이 내장되어 있기에 톰캣에 익숙할 것이다.
그런데 톰캣은 위와 같이 웹 서버를 내장하고 있어서 웹 서버와 WAS가 뭐가 다른지 헷갈린다.
하지만 실무에서는 위와 같이 함께 구성하지 않고 따로 따로 분리하여 구성한다.
그 이유에 대해 알아보겠다.
실무에서는 웹 서버를 어떻게 구성하는가?
실무에서는 위와 같이 웹 서버와 WAS를 분리해 사용한다.
그렇다면 왜 분리해서 사용할까? 분리했을 때 장점이 있는걸까?
그 이유는 다음과 같다.
- 서버 부하 방지 (안정성과 성능 향상)
: WAS는 기본적으로 동적 콘텐츠를 제공하기 위해 존재하는 서버이다. 만약 정적 콘텐츠 요청까지 WAS가 처리하게 될 경우 부하가 커지고 동적 콘텐츠 처리가 지연됨에 따라 수행 속도가 느려진다. 또한 '리버스프록시 캐시' 기능도 갖추고 있어 성능 향상에 도움을 줄 수 있다.
- 물리적 분리에 의한 보안 강화
: 웹 서버와 WAS를 물리적으로 분리하고 그 사이에 방화벽을 두어 보안을 강화할 수 있다. 클라이언트와 웹 서버 뿐만 아니라 웹 서버와 WAS 사이에도 보안 요소를 추가할 수 있는 것이다.
- 무중단 운영
: 로드 밸런싱(주기적인 헬스체크)을 위해 웹 서버를 사용한다. 특히 대용량 웹 어플리케이션의 경우 여러 대의 WAS와 연결함으로써 무중단 운영 및 장애에 쉽게 대응할 수 있다.
- 관리의 효율성
: 접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 웹 서버를 분리해 처리하면 효율적이다.
사실 웹 서버에서 하는 일은 백엔드 즉, WAS에서도 다 할 수 있는 것들이다. 하지만 웹 서버를 분리하여 백엔드로 데이터가 들어가기 전 처리할 수 있게해 성능적, 보안적으로 향상된 퍼포먼스를 낼 수 있게 하는 것이다.
그런데 위에서 리버스프록시에 대한 이야기가 나왔다.
리버스 프록시란 무엇일까? 그리고 웹 서버랑 무슨 관련이 있는 것일까?
리버스 프록시란?
리버스 프록시를 알아보기에 앞서 프록시에 대해 알아보겠다.
프록시는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램으로, 중계 서버라고 생각할 수 있다.
이 프록시에는 포워드 프록시와 리버스 프록시, 두 가지 종류가 있다.
● 포워드 프록시 (Forward Proxy)
일반적으로 프록시라 하면 포워드 프록시를 일컫는다.
포워드 프록시는 클라이언트가 서버로 요청할 때 서버에 직접 요청하지 않고 프록시 서버를 통해 요청하는 방식이다.
- ex) 회사 내부 인트라넷에서 인터넷 상에 있는 서버에 요청할 때 프록시 서버를 통해 호출하는 경우
- 서버는 포워드 프록시 서버의 IP를 응답 받기에 클라이언트가 누군지 알 수 없음 (클라이언트를 감추는 역할)
● 리버스 프록시 (Reverse Proxy)
리버스 프록시는 포워드 프록시와 반대다.
클라이언트가 서버로 요청할 때 리버스 프록시를 호출하고, 프록시 서버가 서버에게 요청하여 받은 응답을 클라이언트에게 전달하는 방식이다.
- ex) 내부 인트라넷에 있는 서버를 호출하기 위해 인터넷 망에 있는 클라이언트가 리버스 프록시 서버에 요청하여 응답을 받는 경우
- 클라이언트는 리버스 프록시 서버를 호출하기 때문에 실제 서버의 IP를 알 수 없음 (서버를 감추는 역할)
아파치는 mod_proxy라는 모듈에서 포워드 프록시와 리버스 프록시 두 가지 기능을 제공하며, NginX는 리버스 프록시 기능만 제공한다.
프록시 서버의 장점?
프록시를 사용하면 보안, 성능, 트래픽 분산 측면에서 장점이 있다.
또한 캐시를 통해 성능을 향상 시킬 수 있다.
몇 만명이 넘는 서비스가 있다고 할 때 몇 만명이 자주 접근하는 리소스에 대해서 리버스 프록시 캐시를 하면 더 빠르게 접근하게 할 수 있다.
웹 서버는 리버스 프록시의 역할을 할 수 있기에 성능향상을 꾀할 수 있다.
로드밸런서 기능도 가능한 웹 서버?
앞서 웹 서버와 WAS를 분리하면 여러 대의 WAS와 연결할 수 있다고 했다.
실무에서는 실제로 웹 서버와 WAS를 분리하여 여러 대의 WAS와 연결하여 사용한다.
그런데 이런 구조라면 웹 서버가 고장나면 모든 WAS가 기능을 잃는 것이 아닌가?
간단하게 웹 서버를 많이 두면 된다. 기업에서는 장애에 대응해 많은 웹 서버를 둔다고 한다.
웹 서버와 WAS에 대해 알아보고 왜 둘을 분리해야 하는지에 대해 알아보았다.
다음 포스팅에서는 아파치, NginX 를 설치하고 사용하는 방법에 대해 알아보겠다.
'Infra > Apache | Nginx' 카테고리의 다른 글
[NginX] NginX 502 Error 문제 해결 (0) | 2023.04.28 |
---|