웹서버란?
웹 브라우저와 같은 클라이언트로부터 HTTP 프로토콜로 요청을 받아,
HTML 문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어라고 한다.
웹서버의 하드웨어, 소프트웨어 측면
하드웨어 측면
- 웹서버의 소프트웨어와 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터
(컴포넌트 파일에는 HTML문서, Images, CSS stylesheets, js file이 있다.) - 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹서버의 데이터(컴포넌트 파일)를 주고받을 수 있도록 한다
소프트웨어 측면
- 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리
- HTTP 서버는 URL(web addresss)과 HTTP의 소프트웨어 일부
브라우저가 웹서버에 파일을 요청 (HTTP를 통해)
요청이 웹서버(하드웨어)에 도착했을 때, HTTP서버(소프트웨어)는 요청된 문서를 HTTP를 이용해 보내준다.
➡️ 웹사이트가 공개되기 위해서는 정적 혹은 동적 웹서버가 필요하다.
정적 웹서버
HTTP 서버(소프트웨어)가 있는 컴퓨터(하드웨어)로 구성되어 있다.
서버에서 받은 파일을 브라우저에 전송하기 때문에 정적이라 한다.
(서버에서 따로 작업을 하지 않음)
동적 웹서버
동적 웹서버는 정적 웹서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성되어있다.
애플리케이션 서버가 HTTP서버를 통해 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 동적 웹서버라고 한다.
컨텐츠를 데이터베이스로부터 생성, 더 많은 유연성을 제공하지만 복잡해짐
웹서버에 호스팅
웹서버는 HTML과 웹사이트에 사용되는 이미지, css, javascript, 폰트, 비디오를 포함한 관련된 것들을 저장
웹서버는 항상 실행중이어야 하고, 같은 IP주소를 가지고 있고, 제 3자에 의해 유지보수 된다고 한다.
웹 호스팅 솔루션을 설정하고 파일들을 업로드 하면된다.
HTTP를 이용해 통신하기
웹서버는 HTTP(HyperText Transfer Protocol)을 지원한다.
어떻게 두 컴퓨터 간의 hypertext(참조를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트)를 전송하는지를 서술함
프로토콜은 두 컴퓨터간의 통신을 위한 규칙의 집합
➡️ 문자로 된, 독립적인 프로토콜
서버 혹은 클라이언트는 이전의 통신을 기억하지 않는다.
HTTP에만 의존할 경우, 처리한 단계를 기억하지 못한다 (비밀번호 입력..? 등)
그래서 애플리케이션 서버가 필요하다.
HTTP를 통해 파일을 요청할 때, 클라이언트는 반드시 URL 파일들을 제공
웹서버는 최소한의 에러메시지를 포함하여 모든 HTTP 요청에 응답해야 한다.
웹서버 종류
오픈소스
- 아파치
- Nginx
- IIS
장고에 대해 쓰신 분의 블로그를 보고 공부하다보니..!
장고는 장고만의 웹서버를 사용한다고한다. (WSGI라는 Web Server Gateway Interface 를 사용)
장고 자체는 웹 프레임워크이고 웹서버와 웹 애플리케이션 서버 역할을 한다.
프로덕션 레벨에는 다른 웹서버를 사용해야한다고 한다.
WAS (Web Application Server)란?
웹서버 위에 서버 애플리케이션을 얹은 것
동적 리소스 처리를 위해 사용한다
웹서버와 웹애플리케이션 간의 연결을 중계
** nginx와 django간의 연결을 중계, nginx에서 받은 요청을 django에서 처리하기 위한 중계
nginx는 파이썬을 모르기 때문에 uWSGI는 http 요청을 파이썬으로 바꿔주고 django로 부터 받은 응답을 nginx가 알 수 있도록 변환해준다. django로 부터 받은 응답을 nginx가 알 수 있도록 변환한다.
nuxt와 spring boot를 중계하는 것이 nginx이고 nuxt에서 nginx로 보낸 요청을 spring boot에서 처리하기 위한 중계를 하는 tomcat이 WAS (이렇게 표현해도 되는 건지 정확히는 모르겠다 ㅎㅎㅎ)
Spring boot WAS
궁금해서 Spring boot에 사용할 수 있는 WAS에 대해 찾아보았는데
내장 was의 종류에는 다음과 같은 것들이 있다고 한다.
- Tomcat
: java 진영에서 실제로 가장 널리 사용되는 WAS. Spring Boot에서도 기본 내장 WAS는 Tomcat이다. - Jetty
: 경량 WAS, 적은 메모리를 사용하여 가볍다는 이점, 속도 빠름 ➡️ 소형 장비, 소규모 프로그램 등에 내장하여 사용하면 좋다. 즉, 대규모 트래픽에 취약 - Undertow
: Netty 기반, Blocking과 Non-Blocking API를 모두 안정적으로 제공하는 고성능 was, 대규모 트래픽으로부터 Tomcat 보다 안정적 - Netty
: Async, Event-Driven 방식, Webflux Framework를 사용해서 Reactive Progrmming 가능 ➡️ Webflux를 사용하면 기본 내장 WAS는 Netty가 된다.
➡️ 웹서버는 정적인 데이터 처리(그러면 node.js express는?? 정적 데이터 처리라고 해도 되는 걸까?)
➡️ was는 동적인 데이터를 처리하는 서버
Reference
'TIL' 카테고리의 다른 글
포트 / 인바운드 규칙 / 아웃바운드 규칙 (0) | 2022.08.24 |
---|---|
온프레미스(On-premise)란?? (0) | 2022.08.24 |
NGINX 사용 이유 (0) | 2022.08.24 |
Apache Kafka란? (0) | 2022.08.24 |
스프링 빈(Bean)이란? (0) | 2022.08.19 |