UMC Study 내용 중
Web Server와
Web Application Server에 대해 조사해본 내용이다.
웹 서버는 인터넷에서 웹 페이지와 같은 웹 콘텐츠를 제공하는 컴퓨터 프로그램 또는 하드웨어 입니다.
웹 서버는 동적 웹 서버와 정적 웹 서버로 구분됩니다.
Apache HTTP Server: 가장 널리 사용되는 웹 서버 중 하나로, 무료 오픈 소스 소프트웨어입니다. 다양한 운영 체제에서 실행될 수 있으며, 많은 기능과 모듈을 지원합니다.
Nginx: 또 다른 인기 있는 웹 서버로, 높은 성능과 안정성을 제공합니다. Apache보다 가볍고 적은 자원을 사용하며, 동시 접속자 수가 많을 때 더 빠른 응답 속도를 보입니다.
Microsoft IIS(Internet Information Services): 마이크로소프트에서 개발한 웹 서버로, 윈도우 운영 체제에서 실행됩니다. ASP.NET과 같은 마이크로소프트 기술과 통합되어 있으며, Windows 서버에서 실행되는 .NET 응용 프로그램을 지원합니다.
Lighttpd: 경량 웹 서버로, 빠른 응답 시간과 적은 메모리 사용량으로 알려져 있습니다. Apache나 Nginx와는 다르게 모듈화된 설계로, 필요한 기능만 활성화하여 사용할 수 있습니다.
Caddy: 최근에 인기를 얻고 있는 웹 서버로, 자동 SSL 인증서 생성, HTTP/2 지원 등의 기능을 내장하고 있습니다. 간단한 설정 파일로 쉽게 설정할 수 있습니다.
1) WAS의 부하를 줄이기 위해
정적 컨텐츠는 WS 측에서 처리하고, 동적 컨텐츠의 경우 WAS에 요청해서 받아옴으로써, WAS의 부하를 줄일 수 있다.
2) 로드 밸런싱
배포할 때 한 대의 WAS로 충분할 줄 알았는데, 사용자가 늘어 WAS 서버를 늘리게 된다면, 서버마다 각각 다른 고유 IP주소를 가지게 된다.
이 때 사용자의 입장에서는 서버의 부하에 대해 관심이 없기에
로드밸런싱을 위해서 각기 다른 IP주소를 통해 접속하지 않을 것이다.
웹 서버는 사용자의 요청에 따라 부하가 적은 WAS에 해당 요청을 넘김으로써 WAS의 부하를 줄일 수 있다.
또한 운영되는 WAS들 중 일부가
따라서, 서비스의 확장성과 가용성을 증가시키는데 이용될 수 있다.
3) 보안
Reverse Proxy
WAS는 DB 접속, 서비스를 제공하기 위해 사용하는 프로세스의 포트번호 등 민감한 정보와 기능을 수행한다.
WAS 에 직접적으로 접속하게 되면, 이런 크리티컬한 정보가 노출되어 보안에 위협이 될 수 있다.
이 때, Apache 나 Nginx와 같은 Web Server를 WAS 앞에 둠으로서 WAS의 정보를 감출 수 있다.
SSL 인증을 통한 암호화, 복호화 처리를 할 수 있다.
4) WAS의 HealthCheck
WAS ( Web Application Server )는
실제 배포한 서비스가 돌아가는 서버이다. ( 웹 컨테이너 라고도 한다 )
실제로 배포한 서비스에 필요한 프로그램의 실행 환경과 DB 접속 기능을 제공하는 서버이다.
여러 개의 트랜잭션을 관리하고, 서비스의 비즈니스 로직을 처리한다.
cf. 편돌이 ( WS : 진열대에 있는 물건을 갖다 줌 ) vs 요리사 ( WAS : 고객의 주문한 요리를 맛나게 조리해서 줌 )
Apache Tomcat : 오픈 소스이며, 경량화된 WAS로 가볍고 간단한 구성이 가능하며, JSP, Servlet 등의 Java 웹 프로그래밍 기술을 지원합니다.
JBoss : Red Hat에서 개발한 오픈 소스 WAS로 Java EE 플랫폼의 모든 스펙을 지원하며, 안정적이고 확장성이 높은 WAS입니다.
IBM WebSphere : IBM에서 개발한 상용 WAS로 Java EE 플랫폼의 모든 스펙을 지원하며, 안정적이고 확장성이 높은 WAS입니다.
Oracle WebLogic : 오라클에서 개발한 상용 WAS로 Java EE 플랫폼의 모든 스펙을 지원하며, 안정적이고 확장성이 높은 WAS입니다.
Microsoft IIS : 마이크로소프트에서 개발한 WAS로, Windows 운영체제와 함께 제공됩니다. ASP.NET과 같은 마이크로소프트의 웹 프로그래밍 기술을 지원합니다.
웹 클라이언트의 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 그때마다 결과를 만들고 제공하면서 자원을 효율적으로 사용할 수 있다.
모든 요청에 대한 경우의 수를 미리 생각하고, 그에 해당하는 HTML/CSS/JS/이미지 파일을 싹 다 조합해서 정적 페이지를 만들 수 없기 때문이다. 스토리지 자원이 절대적으로 부족하며, 애초에 모든 요청의 경우의 수를 알아낼 수가 없다.
Web Server 에서는 정적인 컨텐츠 or 아주 간단한 동적인 컨텐츠를 제공해주고
클라이언트의 요구에 따라 달라져야하는 복잡한 동적인 컨텐츠의 경우
Web Server 가 Web Application Server에 넘겨서 DB와 비즈니스 로직을 통해 페이지를 가공해서 넘겨준다.
WS와 WAS를 나눔으로써, 정적인 컨텐츠 처리를 WS에 위임함으로서, WAS 서버의 부하를 내릴 수 있다. 또한 WS가 WAS 앞에 위치함으로써, 로드 밸런싱 역할을 통해 WAS 부하를 내려주고 및 리버스 프록시 역할 / SSL 을 통한 인증 등을 통해 보안을 강화할 수 있다.