웹 서버란?
- 웹 서버 : 일반적으로, 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고 정적 리소스를 반환하는 서버
- 웹 서버는 정적 리소스 제공은 물론, 기타 부가기능도 제공한다.
- 웹 서버는 동적 리소스를 요청 받으면 애플리케이션 서버에게 해당 요청을 넘겨주고, 애플리케이션 서버에서 처리한 결과를 받아 클라이언트에게 전달해주는 역할을 한다.
- 웹 서버도 애플리케이션 서버와 같이 프로그램을 실행하는 기능을 포함할 수도 있다.
- 정적 리소스 : HTML 문서, CSS, JavaScript, 이미지, 파일 등
- 정적 리소스는 일반적으로 웹 서버의 저장 장치에 저장되어 있고, 항상 동일한 내용을 반환한다.
-> 정적 웹 페이지는 이러한 정적 리소스를 기반으로 구성된다.- 동적 리소스 : 검색 결과, 실시간 데이터 등
- 동적 리소스는 주로 데이터베이스와 상호 작용하여 동적으로 생성되고, 항상 동일한 내용을 반환하지 않는다.
-> 동적 웹 페이지는 이러한 동적 리소스를 기반으로 구성된다.
- 웹 서버 작동 방식 - 정적 웹 페이지 요청
- 브라우저는 URL을 사용하여 웹 서버의 IP 주소를 찾는다.
- 브라우저는 정보에 대한 HTTP 요청을 보낸다.
- 웹 서버는 저장 장치에서 관련 데이터를 찾는다.
- 웹 서버는 HTTP 응답으로 HTML, 이미지, 파일과 같은 정적 리소스를 브라우저에 반환한다.
- 브라우저가 정보를 표시한다.
- 이미지 파일 등의 정적인 리소스들은 HTML 문서가 클라이언트로 보내질 때 함께 가는 것이 아니다.
- 클라이언트는 HTML 문서를 먼저 받고, HTML 문서 안에 포함된 이미지 파일이나 기타 정적인 리소스들에 대한 URL을 통해 서버로 추가 요청을 보내서 받아온다.
애플리케이션 서버란?
- 애플리케이션 서버 : 일반적으로, 클라이언트의 요청에 따라 비즈니스 로직(사용자의 요구사항을 해결하기 위한 실질적인 코드)을 실행하여 데이터 처리 등 다양한 서비스를 제공하는 서버
- 애플리케이션 서버는 주로 데이터 처리와 같은 작업을 담당하는데, 이를 위해 데이터베이스 서버(대부분), 외부 서비스 API 등과 상호 작용한다.
- 즉, 애플리케이션 서버는 데이터베이스 등의 소프트웨어 구성 요소와 상호 작용하고 비즈니스 로직을 실행할 수 있는 런타임 환경을 제공한다.
- 애플리케이션 서버에서 제공하는 API
- 애플리케이션 서버는 클라이언트에게 API, 웹 페이지 등 다양한 서비스를 제공한다.
-> 애플리케이션 서버는 데이터 처리 등의 비즈니스 로직의 실행을 담당하는데, API는 이러한 애플리케이션 서버의 기능을 외부에 노출하여 클라이언트가 사용할 수 있도록 하는 인터페이스이다.
-> 즉, 애플리케이션 서버는 API를 통해 클라이언트(모바일 앱 등)에게 데이터와 기능을 제공한다.
- 일반적으로, 애플리케이션 서버와 웹 애플리케이션 서버는 같은 용어이다. 웹 애플리케이션 서버의 의미는 주로 웹 애플리케이션에서의 애플리케이션 서버의 의미로 사용되며, HTTP 프로토콜을 사용하는 모든 종류의 애플리케이션 서버(API를 제공하는 애플리케이션 서버 등)의 의미도 포함한다.
- 애플리케이션 서버는 웹 서버가 할 수 있는 대부분의 작업(HTTP 요청 처리, 정적 리소스 제공 등) 또한 수행할 수 있다.
- 그러나, 이상적인 웹 서비스 아키텍처는 웹 서버와 함께 사용하는 것이다. 이러한 아키텍처에서 애플리케이션 서버는 주로 웹 서버로부터 요청을 받아들이고, 해당 요청에 따라 비즈니스 로직을 실행한다. 그 후에 처리된 결과를 웹 서버로 전달하고, 웹 서버가 이를 사용자에게 전송한다.
- API만 제공하는 애플리케이션 서버는 굳이 웹 서버를 함께 사용하지 않아도 된다.
- 애플리케이션 서버 작동 방식(웹 서버 x) - 동적 웹 페이지 요청
- 브라우저는 URL을 사용하여 애플리케이션 서버의 IP 주소를 찾는다.
- 브라우저는 정보에 대한 HTTP 요청을 보낸다.
- 애플리케이션 서버는 데이터베이스 서버 등의 외부 시스템과 상호 작용하며 비즈니스 로직을 수행한다.
- 애플리케이션 서버는 주로 HTML 문서를 동적으로 생성(서버 측 렌더링)하고 브라우저에 반환한다.
- 브라우저가 정보를 표시한다.
- 서버 측 렌더링(Server-Side Rendering, SSR)
-> 서버에서 HTML 최종 결과를 생성해서 클라이언트(웹 브라우저)에 전달하고, 이후 클라이언트에서는 간단한 렌더링 작업을 처리하는 방식
-> 주로 화면이 정적이고, 복잡하지 않을 때 사용
-> 관련 기술: JSP, 타임리프 등
- 클라이언트 측 렌더링(Client-Side Rendering, CSR)
-> 서버에서 초기 렌더링을 수행하지 않고, 브라우저에서 모든 렌더링 작업을 처리하는 방식
-> 주로 화면이 동적이고, 복잡할 때 사용 (ex) 구글 지도)
-> 관련 기술: React, Vue.js 등
웹 서비스 아키텍처
- 웹 서비스는 다양한 아키텍처를 가질 수 있다.
- 클라이언트 - 웹 서버 - 데이터베이스 서버
- 클라이언트 - 애플리케이션 서버 - 데이터베이스 서버
- 클라이언트 - 웹 서버 - 애플리케이션 서버 - 데이터베이스 서버 : 이상적인 웹 서비스 아키텍처
- 애플리케이션 서버만 사용하지 않고, 웹 서버와 함께 사용하는 이유
- 기능을 분리하여 서버 부하 방지
- 애플리케이션 서버는 데이터베이스 조회 등의 다양한 비즈니스 로직을 처리하고, 웹 서버는 정적 리소스를 클라이언트에게 제공한다.
- 효율적인 리소스 관리
- 정적 리소스가 많이 사용되면 웹 서버를 증설하고, 동적 리소스가 많이 사용되면 애플리케이션 서버를 증설한다.
- 오류 화면 제공 가능
- 정적 리소스만 제공하는 웹 서버는 잘 죽지 않고, 비즈니스 로직을 처리하는 애플리케이션 서버는 잘 죽는다. 애플리케이션 서버나 데이터베이스 서버 장애 시 웹 서버가 오류 화면을 제공할 수 있다.
- 여러 대의 애플리케이션 서버를 연결 가능
- 앞 단의 웹 서버에서, 오류가 발생한 애플리케이션 서버를 이용하지 못하도록 한 후 애플리케이션 서버를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
- 여러 웹 애플리케이션 서비스 가능
- 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