HTTP 프로토콜
을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당한다.
웹 서버는 클라이언트가 웹 브라우저를 통해 요청한 정적 콘텐츠를 제공하는 역할을 한다.
웹 서버는 주로 HTTP 프로토콜을 사용하여 작동하며, 클라이언트가 URL을 통해 요청한 웹 페이지를 찾아 전송해준다.
웹 서버는 웹 사이트의 코드와 데이터를 호스팅하는 기술이다.
브라우저에 URL을 입력할 때 이 URL은 실제로 웹 서버의 주소 식별자이다.
브라우저와 웹 서버는 다음과 같이 통신한다.
블로그, 헤더 이미지 또는 기사와 같은 정적 컨테느를 호스팅하는 웹 사이트를 웹 서버에서 실행할 수 있다.
하지만 대부분의 웹 사이트와 웹 애플리케이션은 훨씬 더 대화형이기 때문에, 애플리케이션 서버 (WAS)가 필요하다.
was
를 거치지 않고 바로 자원을 제공클라이언트에 이미지 파일(정적 컨텐츠)를 보내는 과정을 생각해보자.
이미지 파일과 같은 정적인 파일들은 웹 문서(HTTP 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.
클라이언트는 HTML 문서를 먼저 받고, 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일을 받아온다.
Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
따라서 Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분할하여 서버의 부담을 줄일 수 있다.
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
HTTP를 통해 컴퓨터나 장치에서 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.
WAS 서버는 웹 애플리케이션을 실행하여 동적 콘텐츠를 생성하고, 웹 서버와 클라이언트 간의 데이터 처리를 담당하는 역할을 한다.
WAS 서버는 클라이언트의 요청에 따라 데이터베이스에서 정보를 가져오거나, 웹 애플리케이션을 실행하여 동적인 웹 페이지를 생성한 후 결과를 웹 서버에 전달한다.
웹 서버는 이를 받아 클라이언트에게 전달한다.
웹 사이트에서 대화형 컨텐츠에 엑세스하려고 할 때, 프로세스는 다음과 같이 작동한다.
사용자가 장바구니에 항목을 추가하거나, 물품을 결제할 때 애플리케이션 서버와 상호 작용한다.
ex) 온라인 쇼핑몰, 은행 인터넷 뱅킹, SNS 등
웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다.
사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다.
이때, Web Server만을 이용한다면, 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스해야 한다.
하지만, 이렇게 수행하기에는 자원이 절대적으로 부족하다.
따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.
실제 웹 서비스 환경에서는 웹 서버와 WAS 서버가 협업하여 작동한다.
일반적으로 웹 서버는 정적 컨텐츠를 처리하고, WAS 서버는 동적 컨텐츠를 처리하는 역할를 맡아 사용자에게 원활하고 다양한 웹 서비스를 제공하게 된다.
이를 통해 웹 사이트의 로딩 속도와 서비스 품질이 향상되며, 웹 애플리케이션이 성능이 개선된다.
온라인 쇼핑몰
사용자가 상품을 검색하거나 장바구니에 담는 등의 동적 작업을 WAS 서버에서 처리하고, 상품 이미지나 스타일 정보 등 정적 컨텐츠를 웹 서버에서 제공한다.
온라인 커뮤니티
게시판 글 작성, 댓글 달기 등 동적인 기능은 WAS 서버에서 처리하고, 게시글 내용이나 이미지 등 정적 콘텐츠는 웹 서버에서 제공한다.
새 요청은 항상 웹 서버에 먼저 수신된다.
웹 서버에서 정보 자체를 생성할 수 있는 경우, 그렇게 한 다음 HTTP 응답을 다시 보낸다.
또한, 사용자가 요청안 데이터가 캐시에 이미 있지 않은지 확인한다.
웹 서버에서 사용자가 필요로 하는 컨텐츠에 엑세스할 수 없는 경우 웹 서버는 해당 요청을 애플리케이션 서버에 전달한다.
그러면 애플리케이션 서버가 데이터를 처리하고 비즈니스 로직을 사용하여 올바른 정보를 제공한다.
그런 다음 요청을 웹 서버로 다시 전달하고, 웹 서버가 이를 사용자에게 전달한다.
멀티스레딩에서 서버는 여러 스레드를 동시에 생성하고 실행하며, 각 스레드는 별도의 태스크 또는 태스크의 일부를 처리한다.
멀티스레디이 지원되면 더 많은 웹 트래픽을 관리하면서 웹 컨텐츠를 더 빠르게 제공하는 데 도움이 된다.
대부분의 웹 서버는 멀티스레딩을 지원하지 않는다.
웹 서버는 각각의 새 연결 요청을 대기열에 배치하고, 이벤트 루프를 사용하여 대기열에서 새로 들어오고 나가는 요청을 모니터링한다.
효율성을 높이기 위해 서버는 비차단 I/O 및 콜백을 사용하여 요청을 처리한다.
웹 서버는 비차단 작업 및 이벤트 기반 아키텍처를 통해 동시 연결을 처리할 수 있다.
애플리케이션 서버는 멀티스레딩을 사용하여 높은 확장성과 효율성을 제공한다.
요청에 외부 리소스가 필요한 경우 애플리케이션 서버는 별도의 스레드를 사용하여 이러한 상호 작용을 처리한다.
여러 스레드를 한 번에 처리하여 많은 클라이언트 상호 작용을 병렬로 처리할 수 있다.
항목 | 웹 서버 | WAS 서버 |
---|---|---|
정의 | 정적인 콘텐츠(HTML, CSS, 이미지 등)를 제공하는 서버 | 동적인 콘텐츠(웹 애플리케이션)을 처리하고 제공하는 서버 |
기능 | HTTP 프로토콜을 이용해 클라이언트에게 웹 페이지 제공 | 웹 애플리케이션 실행 및 데이터베이스 등 데이터 처리, 웹 서버와 클라이언트간의 중계 역할 |
사용되는 프로토콜 | 주로 HTTP, FTP와 SMTP도 지원 | 많은 프로토콜 지원 |
멀티스레딩 | 일반적으로 멀티스레딩을 사용하지 않음 | 멀티스레딩을 사용하여 요청을 동시에 처리 |
주요 소프트웨어 | Apache, NginX, IIS | Tomcat, JBoss, WebLogin, WebSphere |