Home > 기타 > Web Server, Application Server

Web Server, Application Server
server web

웹 서버란?

  • 웹 서버 : 일반적으로, 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고 정적 리소스를 반환하는 서버
    • 웹 서버는 정적 리소스 제공은 물론, 기타 부가기능도 제공한다.
    • 웹 서버는 동적 리소스를 요청 받으면 애플리케이션 서버에게 해당 요청을 넘겨주고, 애플리케이션 서버에서 처리한 결과를 받아 클라이언트에게 전달해주는 역할을 한다.
    • 웹 서버도 애플리케이션 서버와 같이 프로그램을 실행하는 기능을 포함할 수도 있다.
  • 정적 리소스 : HTML 문서, CSS, JavaScript, 이미지, 파일 등
    • 정적 리소스는 일반적으로 웹 서버의 저장 장치에 저장되어 있고, 항상 동일한 내용을 반환한다.
      -> 정적 웹 페이지는 이러한 정적 리소스를 기반으로 구성된다.
  • 동적 리소스 : 검색 결과, 실시간 데이터 등
    • 동적 리소스는 주로 데이터베이스와 상호 작용하여 동적으로 생성되고, 항상 동일한 내용을 반환하지 않는다.
      -> 동적 웹 페이지는 이러한 동적 리소스를 기반으로 구성된다.
  • 웹 서버 작동 방식 - 정적 웹 페이지 요청
    1. 브라우저는 URL을 사용하여 웹 서버의 IP 주소를 찾는다.
    2. 브라우저는 정보에 대한 HTTP 요청을 보낸다.
    3. 웹 서버는 저장 장치에서 관련 데이터를 찾는다.
    4. 웹 서버는 HTTP 응답으로 HTML, 이미지, 파일과 같은 정적 리소스를 브라우저에 반환한다.
    5. 브라우저가 정보를 표시한다.
  • 이미지 파일 등의 정적인 리소스들은 HTML 문서가 클라이언트로 보내질 때 함께 가는 것이 아니다.
    • 클라이언트는 HTML 문서를 먼저 받고, HTML 문서 안에 포함된 이미지 파일이나 기타 정적인 리소스들에 대한 URL을 통해 서버로 추가 요청을 보내서 받아온다.

애플리케이션 서버란?

  • 애플리케이션 서버 : 일반적으로, 클라이언트의 요청에 따라 비즈니스 로직(사용자의 요구사항을 해결하기 위한 실질적인 코드)을 실행하여 데이터 처리 등 다양한 서비스를 제공하는 서버
    • 애플리케이션 서버는 주로 데이터 처리와 같은 작업을 담당하는데, 이를 위해 데이터베이스 서버(대부분), 외부 서비스 API 등과 상호 작용한다.
    • 즉, 애플리케이션 서버는 데이터베이스 등의 소프트웨어 구성 요소와 상호 작용하고 비즈니스 로직을 실행할 수 있는 런타임 환경을 제공한다.
  • 애플리케이션 서버에서 제공하는 API
    • 애플리케이션 서버는 클라이언트에게 API, 웹 페이지 등 다양한 서비스를 제공한다.
      -> 애플리케이션 서버는 데이터 처리 등의 비즈니스 로직의 실행을 담당하는데, API는 이러한 애플리케이션 서버의 기능을 외부에 노출하여 클라이언트가 사용할 수 있도록 하는 인터페이스이다.
      -> 즉, 애플리케이션 서버는 API를 통해 클라이언트(모바일 앱 등)에게 데이터와 기능을 제공한다.
  • 일반적으로, 애플리케이션 서버와 웹 애플리케이션 서버는 같은 용어이다. 웹 애플리케이션 서버의 의미는 주로 웹 애플리케이션에서의 애플리케이션 서버의 의미로 사용되며, HTTP 프로토콜을 사용하는 모든 종류의 애플리케이션 서버(API를 제공하는 애플리케이션 서버 등)의 의미도 포함한다.
    • 애플리케이션 서버는 웹 서버가 할 수 있는 대부분의 작업(HTTP 요청 처리, 정적 리소스 제공 등) 또한 수행할 수 있다.
    • 그러나, 이상적인 웹 서비스 아키텍처는 웹 서버와 함께 사용하는 것이다. 이러한 아키텍처에서 애플리케이션 서버는 주로 웹 서버로부터 요청을 받아들이고, 해당 요청에 따라 비즈니스 로직을 실행한다. 그 후에 처리된 결과를 웹 서버로 전달하고, 웹 서버가 이를 사용자에게 전송한다.
    • API만 제공하는 애플리케이션 서버는 굳이 웹 서버를 함께 사용하지 않아도 된다.

  • 애플리케이션 서버 작동 방식(웹 서버 x) - 동적 웹 페이지 요청
    1. 브라우저는 URL을 사용하여 애플리케이션 서버의 IP 주소를 찾는다.
    2. 브라우저는 정보에 대한 HTTP 요청을 보낸다.
    3. 애플리케이션 서버는 데이터베이스 서버 등의 외부 시스템과 상호 작용하며 비즈니스 로직을 수행한다.
    4. 애플리케이션 서버는 주로 HTML 문서를 동적으로 생성(서버 측 렌더링)하고 브라우저에 반환한다.
    5. 브라우저가 정보를 표시한다.
  • 서버 측 렌더링(Server-Side Rendering, SSR)
    -> 서버에서 HTML 최종 결과를 생성해서 클라이언트(웹 브라우저)에 전달하고, 이후 클라이언트에서는 간단한 렌더링 작업을 처리하는 방식
    -> 주로 화면이 정적이고, 복잡하지 않을 때 사용
    -> 관련 기술: JSP, 타임리프 등

  • 클라이언트 측 렌더링(Client-Side Rendering, CSR)
    -> 서버에서 초기 렌더링을 수행하지 않고, 브라우저에서 모든 렌더링 작업을 처리하는 방식
    -> 주로 화면이 동적이고, 복잡할 때 사용 (ex) 구글 지도)
    -> 관련 기술: React, Vue.js 등

웹 서비스 아키텍처

  • 웹 서비스는 다양한 아키텍처를 가질 수 있다.
    1. 클라이언트 - 웹 서버 - 데이터베이스 서버
    2. 클라이언트 - 애플리케이션 서버 - 데이터베이스 서버
    3. 클라이언트 - 웹 서버 - 애플리케이션 서버 - 데이터베이스 서버 : 이상적인 웹 서비스 아키텍처

  • 애플리케이션 서버만 사용하지 않고, 웹 서버와 함께 사용하는 이유
    • 기능을 분리하여 서버 부하 방지
      • 애플리케이션 서버는 데이터베이스 조회 등의 다양한 비즈니스 로직을 처리하고, 웹 서버는 정적 리소스를 클라이언트에게 제공한다.
    • 효율적인 리소스 관리
      • 정적 리소스가 많이 사용되면 웹 서버를 증설하고, 동적 리소스가 많이 사용되면 애플리케이션 서버를 증설한다.
    • 오류 화면 제공 가능
      • 정적 리소스만 제공하는 웹 서버는 잘 죽지 않고, 비즈니스 로직을 처리하는 애플리케이션 서버는 잘 죽는다. 애플리케이션 서버나 데이터베이스 서버 장애 시 웹 서버가 오류 화면을 제공할 수 있다.
    • 여러 대의 애플리케이션 서버를 연결 가능
      • 앞 단의 웹 서버에서, 오류가 발생한 애플리케이션 서버를 이용하지 못하도록 한 후 애플리케이션 서버를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
    • 여러 웹 애플리케이션 서비스 가능
      • ex) 하나의 서버에서 PHP Application과 Java Application을 함께 사용할 수 있다.

참고 자료

https://en.wikipedia.org/wiki/Application_server https://ko.wikipedia.org/wiki/웹_서버 https://ko.wikipedia.org/wiki/웹_애플리케이션_서버 https://aws.amazon.com/ko/compare/the-difference-between-web-server-and-application-server/ https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html https://yozm.wishket.com/magazine/detail/1780/ https://youwjune.tistory.com/41 https://www.quora.com/What-is-the-difference-between-a-web-API-and-an-application-server https://www.quora.com/Web-Applications-What-is-a-web-server https://www.quora.com/Can-you-explain-server-side-rendering-in-the-simplest-possible-way chatgpt bard