웹 서버는 클라이언트의 요청을 받아들이고, 해당 요청에 대한 처리를 수행하여 클라이언트에게 응답을 반환하는 소프트웨어이다. 웹 서버는 클라이언트-서버 모델에서 서버 측에 위치하며, 웹 애플리케이션을 호스팅하고 웹 리소스를 제공하는 역할을 한다. 웹서버의 주요 기능은 다음과 같다.
① HTTP 요청 처리
② 정적 리소스 제공
③ 동적 콘텐츠 생성
④ 세션 및 상태 관리
⑤ 보안 기능
※ SSL/TLS
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 모두 네트워크 통신에서 사용되는 암호화 프로토콜이다. 엄밀히 말하면 TLS는 SSL의 후속버전으로 더 강력한 보안과 호환성을 지니고 있다.
⑥ 로깅 및 모니터링
⑦ 확장성
웹 어플리케이션 서버(Web Application Server)는 웹 서버의 확장된 개념으로, 동적인 웹 어플리케이션을 실행하고 관리하는 소프트웨어이다. 웹 어플리케이션 서버는 웹 서버의 기능뿐만 아니라 추가적인 기능과 서비스를 제공하여 웹 애플리케이션의 실행 환경을 제어하고 관리한다. 웹 어플리케이션 서버의 주요 기능은 다음과 같다.
① 컨테이너 기능
② 서블릿 컨테이너
※ 서블릿
서블릿(Servlet)은 자바 웹 애플리케이션에서 동적인 웹 컨텐츠를 생성하고 관리하기 위해 사용되는 자바 클래스이다. 서블릿은 웹 서버에서 동작하며, 클라이언트의 요청을 처리하고 그에 따른 응답을 생성하는 역할을 한다. 서블릿은 웹 어플리케이션 서버에서 실행되며, 일반적으로 HttpServlet 클래스를 상속하여 사용된다.
③ 자원 관리: 웹 어플리케이션 서버는 웹 애플리케이션 실행에 필요한 자원을 관리한다. 이는 데이터베이스 연결, 캐시, 트랜잭션 관리, 메모리 관리 등을 포함한다.
④ 보안 기능: 웹 어플리케이션 서버는 웹 애플리케이션의 보안을 강화하기 위한 다양한 보안 기능을 제공한다. 인증, 권한 부여, 암호화, 보안 설정 등을 통해 웹 애플리케이션의 보안을 유지한다.
⑤ 확장성: 웹 어플리케이션 서버는 수평 및 수직 확장을 지원하여 애플리케이션의 성능과 가용성을 향상시킬 수 있다. 클러스터링, 로드 밸런싱, 세션 관리 등의 기술을 사용하여 확장성을 확보할 수 있다.
⑥ 트랜잭션 관리: 웹 어플리케이션 서버는 데이터베이스나 다른 서비스와의 트랜잭션 관리를 지원한다. 트랜잭션 처리를 통해 데이터 일관성과 안정성을 유지할 수 있다.
⑦ 모니터링과 로깅: 웹 어플리케이션 서버는 애플리케이션의 상태와 동작을 모니터링하고 로그를 기록한다. 이를 통해 애플리케이션의 성능, 에러, 장애 등을 파악하고 분석할 수 있다.
html, 이미지 요청등 정적 데이터 요청을 처리하는 속도가 빠르다.
servlet , jsp 등 비즈니스 로직을 수행하는데 적합하다. 물론, WAS가 html,이미지 등의 요청을 처리하지 못한다는 말은 아니다. 다만 처리속도가 WS에 비해 느리다.
이렇게 서로 다른 강점을 합해서 사용하기 위해 WS 와 WAS를 연동하여 서비스를 하는 경우가 대부분이다.
아파치 웹서버(Apache Web Server)는 리눅스 기반의 무료 오픈소스 웹서버 소프트웨어이다. 아파치 웹서버는 고성능의 HTTP 서버로써, 안정성과 확장성, 호환성이 매우좋아 세계에서 가장 높은 점유율을 가지고 있다. (하지만 최근들어서는 NginX에게 밀리는 추세에 접어들었다.)
리눅스, 유닉스, 윈도우 등 거의 모든 운영체제에서 설치 및 사용이 가능하며, 특히 리눅스 운영체제에서의 APM(Apache+PHP+MySQL)은 웹서버구성의 기본으로 받아들여질 정도이다.
① 오픈소스로 무료이다.
② 다양한 모듈을 제공한다.
③ 강력한 커뮤니티로 인한 방대한 자료가 있다.
④ 확장성이 좋다.
⑤ 보안 수준이 높다.
① 많은 기능들로 인해 느린 측면이 있다.
② 오버헤드가 발생한다.
※ 오버헤드
어떤 작업이나 프로세스를 수행하기 위해 추가적으로 필요한 비용, 부담, 자원, 시간 등을 의미한다. 일반적으로 오버헤드는 원래 목적에 비해 불필요하거나 부가적인 작업을 수행하는 데 발생하는 비용을 나타낸다. 오버헤드는 효율성과 성능에 영향을 미칠 수 있으므로 최적화를 위해선 오버헤드를 최소화해야 한다.
Nginx는 메일 프록시, 리버스 프록시 서버로 무료 오픈 소스로 사용할 수 있는 HTTP 서버이다. 최소한의 리소스로 많은 수의 동시 사용자를 처리할 수 있어 대규모 웹 트래픽 처리 상황이 발생할 때 고효율을 발휘한다.
※ 메일 프록시
메일 프록시(Mail Proxy)는 이메일 트래픽을 중개하고 필터링하는 역할을 수행하는 프록시 서버이다. 일반적으로 메일 서버와 클라이언트 간의 통신을 중개하여 보안, 트래픽 관리, 필터링, 캐싱 등의 기능을 제공한다.
① 오픈소스로 무료이다.
② Apache에 비해 가볍다.
③ 프록시 기능이 뛰어나다.
① 커뮤니티의 자료가 부족하다.
② 확장 모듈이 Apahce에 비해 적다.
웹 서버와 웹 컨테이너의 결합으로 현재 가장 일반적이고 많이 사용되는 WAS이다. Tomcat에서는 8080포트를 사용한다. WAS는 동적인 데이터를 처리하는 서버이기 때문에 DB연결, 데이터 조작 등과 같은 처리에는 WAS를 활용하는 것이 적합하다.
간혹 톰캣을 아파치 톰캣이라고 부르기도 하는데, 이는 톰캣이 편의를 위해 아파치의 기능을 포함하고 있기 때문이다. 다시 말해 톰캣이 아파치의 기능 일부를 가져와서 제공해주는 형태라는 것이다. 물론, 톰캣이 아파치의 모든 기능을 제공하지는 않다보니 따로 아파치 서버를 설치하고 톰캣과 연결하는 경우도 많다.
Jetty는 자바로 작성된 경량 웹 서버 및 서블릿 컨테이너이다. Jetty는 빠르고 효율적인 서버 솔루션으로 널리 사용되며, 다양한 용도로 활용될 수 있다. Jetty의 특징은 아래와 같다.
① 경량성
② 고성능
③ 내장형
④ 유연성
⑤ 확장성
Jetty는 다양한 프레임워크 및 플랫폼에서 사용되며, 특히 웹 애플리케이션 개발, 마이크로서비스 아키텍처, IoT 등의 분야에서 활발하게 활용된다. 또한 Jetty는 개발자 커뮤니티에서 활발하게 관리되고 업데이트되어 안정성과 보안성을 유지하고 있다.