0. 웹 서버는 무엇일까?
초기 웹 서비스는 대부분 정보 전달이 목적인 문서 위주의 정적 페이지였다. HTML과 같은 마크업 언어로 작성된 문서를 서버에서 보내주기만 하면 됐었다.
이후 조금 발전된 형태로 스크립트 언어를 얹은 동적 페이지가 등장했지만, 이때까지만 하더라도 서버에서 데이터를 처리하고 클라이언트로 전송해주는데 큰 부담이 되지 않았다.
그러나 SPA(single page application) 이라는 개념이 등장하면서 서버가 분리될 필요성이 생겼다.
SPA는 문서 위주의 정적 웹 페이지와는 다르게 페이지 갱신에 필요한 데이터만을 전달받아 페이지를 갱신하기 때문에 필요한 데이터는 사용자마다 다르고, 복잡한 연산이 필요하기도 했다.
만약 웹 페이지에 필요한 정적 데이터와 페이지 갱신에 필요한 동적 데이터를 하나의 서버에서 처리한다면, 부하가 커지게 되고 처리가 지연됨에 따라 수행 속도가 느려질 것이다.
그래서 Web Server 와 WAS(Web Application Server) 같은 개념이 생겨나게 된다.
Web Server 는 클라이언트의 요청을 처리하는 기능을 담당하고, WAS(Web Application Server)는 DB 조회나 다양한 로직을 처리하는 기능을 담당한다.
Web Server는 클라이언트가 HTML,CSS 와 같은 정적 데이터를 요청하면 앞단에서 빠르게 제공하고, 동적 데이터가 필요하면 WAS에 요청을 보내고, WAS가 처리한 데이터를 클라이언트에 전달한다.
=> Web Server 는 정적 데이터를 제공하고, WAS는 동적 데이터를 제공한다.
NginX는 Web Server의 구축을 도와주는 소프트웨어이다.
WAS(Web Application Server = Web Server + Web Container)
apache 같은 경우 WAS 안에 포함되는게 아니라 따로 존재하는 것이기 때문에 아파치 따로 WAS톰캣 따로 분리되어 있고, 굳이 정적 페이지를 요청할때 apache에서 WAS까지 들어갈 필요가 없게 된다. 더 나아가서 Web Server와 WAS를 분리하는 것은 정적/동적 처리만을 위한 것은 아니고, 서버의 물리적인 분리를 통해 보안을 강화하고 로드밸런서가 될 수 있는 등 여러 가지 이유가 있다.
Web Server가 동적 데이터를 제공 못하는 것도 아니고, WAS가 정적 데이터를 제공 못하는 것도 아니지만, Web Server와 WAS를 따로 구분해서 앞단에 배치한 이유는 Web Server가 정적 또는 가벼운 리소스를 제공하는 역할도 있지만 보안 측면의 reverse proxy 역할도 하고 로드밸런싱 역할도 하고 캐싱
*리버스 프록시(Reverse proxy) : 클라이언트에게 서버의 정보를 감추는 것 (보안상 내부 구조 감추기 -> 파일의 위치나 서비스가 돌고 있는 포트번호)
*로드밸런싱(Load balancing) : 서버의 과부하가 오지 않게 요청을 나눠서 전달하는 것
*캐싱(Caching) : 한번 꺼내온 것들을 다시 안 꺼내고 되게끔 가까운 곳에 모아두는 것 -> 한번 받아온 이미지 등 정적 파일이 사용자와 서버 사이에 있는 proxy server란 곳에 저장되었다가 다음 요청 때 서버까지 도달하지 않고 클라이언트에게 빠르게 제공할 수 있다.
웹 서버는 하드웨어와 소프트웨어로 구분한다. 하드웨어는 웹 서버가 설치되어 있는 컴퓨터를 말한다. 한편 소프트웨어의 웹 서버는 브라우저 클라이언트로부터 HTTP 요청을 받아드리고 HTML 등의 정적 웹 페이지 문서에 반응하는 컴퓨터 프로그램이다.
대표적인 Web Server : 아파치 , Nginx , IIS
-> Web Server 점유율 1등 NginX
Apache vs NginX
Apache | NginX | |
작동 방식 | 다중 프로세스 | 이벤트 기반 |
모듈 방식 | MPM, 멀티 프로세스 |
* 컨텍스트 스위칭(Context Switching) : 프로세스나 스레드가 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 작업
1. NginX 란?
트래픽이 많은 웹사이트의 WAS를 도와주는 비동기 이벤트 기반구조의 웹서버 프로그램이다.
클라이언트로부터의 요청에 맞는 정적 파일을 응답해주는 Web Server로 사용되기도 하고, 동적인 리소스를 처리하기 위해 WAS로 요청을 전달해주기도 한다.
2. NginX 기능
- 정적 파일 처리
- WAS 서버에 요청을 보내주는 Proxy 기능
- 다수의 WAS 서버로 요청을 분배하는 로드밸런서 역할
- 클라이언트와 HTTPS 통신, 서버와 HTTP로 통신하는 SSL 기능
- 캐싱
- CORS 처리
- TCP / UDP 커넥션 부하 분산
Proxy
Proxy는 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 말한다.
서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 Proxy라고 한다.
Forward Proxy
일반적으로 Proxy라 불리는 것
- 캐싱 : 클라이언트가 요청한 내용을 캐싱
- 익명성 : 클라이언트가 보낸 요청을 감춤
3. NginX 설정
'개념 정리' 카테고리의 다른 글
깃(Git) 개념(버전 관리 시스템 - VCS)과 명령어 정리(CLI) (0) | 2022.08.16 |
---|---|
Http 통신과 인증&인가(쿠키, 세션) (0) | 2022.07.21 |
DTO, VO 개념과 차이점 (0) | 2022.07.18 |
로드 밸런싱(Load Balancing) 개념 정리 (0) | 2021.12.17 |