웹 서버 Web Server vs. 웹 어플리케이션 서버 Web Application Server
: 웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스를 전달하는 컴퓨터 시스템
정적인 콘텐츠를 응답한다.
HTML CSS JavaScript 이미지 등의 파일을 클라이언트에 전송한다.
Apache HTTP Server나 Nginx가 대표적인 예이다.
: WAS는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 미들웨어 프레임워크
클라이언트 요청에 대해 동적인 처리가 이뤄진 후 응답한다.
DB 조회나 로직 처리 같은 비즈니스 로직을 수행한다.
사용자의 요청에 따라 실시간으로 데이터를 생성하고 이를 웹 서버에 전달하여 클라이언트에게 보여준다.
Java EE 스펙의 Tomcat, JBoss 등이 대표적인 예이다.
정적인 콘텐츠는 웹서버에서 충분히 빠르게 제공할 수 있지만
동적인 콘텐츠를 제공하기 위해서는 DB접근 및 다양한 로직 처리가 필요하므로
별도의 WAS가 필요하다.
WebServer는 요청이 들어왔을 때 정적 파일을 내어주거나 다른 서버로 Reverse Proxy하는 등 안내 데스크와 같은 역할만 한다.
백엔드의 경우 WAS에 해당하며, 요청에 따라 실행되어야할 서버사이드 로직이 실행된다.
WebServer를 앞단에 두어 프론트엔드는 정적으로 서비스하고
백엔드는 Reverse Proxy로 서비스하는 형태가 된다.
WAS의 부담을 줄여주기 위해
서버사이드 렌더링이 아니면 html css js로 정적인 파일이다.
React JS의 경우라면 bulid 명령어 실행 시 build 폴더가 생성되고 그 안에 index.html과 여러 css js 파일로 빌드된다.
빌드된 결과물은 사용자 요청에 따라 내어줄 수 있는 형태로 배포되어야 한다.
: 대리, 대신
: 보안상의 문제로 직접 통신을 주고받을 수 없는 두 PC 사이에서 통신을 할 때 직접 하지 않고 중간에서 대리로 중계하는 기능
: 클라이언트와 인터넷 사이에 있는 서버
서버에게 클라이언트가 누구인지 감춰주는 역할
클라이언트에서 서버로 리소스를 요청할 때 직접 요청하지 않고 프록시 서버를 거쳐서 요청한다.
이 경우 서버에서 받는 IP는 클라이언트의 IP가 아닌 프록시 서버의 IP이기 떄문에 서버는 클라이언트가 누구인지 알 수 없다.
캐싱 기능
자주 사용되는 자원을 캐시에 저장해놓기 때문에
해당 자원 요청이 온다면 서버에게 갈 필요 없이 프록시 서버 자체에서 처리가 가능해 성능 향상할 수 있다.
보안
클라이언트가 서버를 직접 접근하지 못하기 때문에 접근 가능한 사이트를 제한할 수 있으므로 보안을 향상할 수 있다.
: 인터넷과 백엔드 사이에 있는 서버
클라이언트가 서버를 요청할 때 리버스 프록시를 호출하고
리버스 프록시가 서버로부터 응답을 전달받아 다시 클라이언트에게 전송하는 역할
리버스 프록시로 웹 서버를 설정할 경우 사용자가 웹 서비스에 데이터를 요청하면
Reverse Proxy는 이 요청을 받아서 내부 서버(WAS)에서 데이터를 받은 후에 사용자에게 다시 전달
내부 서버는 클라이언트를 알지만, 클라이언트는 프록시를 통해 내부 서버에 접근하여 내부 서버를 알지 못한다.
로드 밸런싱, 서버 확장
여러 개의 내부 서버를 둘 수 있기 때문에 로드 밸런싱이나 서버 확장을 통해 트래픽을 분산시킬 수 있다.
보안
클라이언트는 내부 서버를 접근하지 못하기 때문에 보안을 향상할 수 있다.
: 비동기식 이벤트 기반에 가벼움과 높은 성능을 목표로 하는 Web Server 소프트웨어이자 높은 성능의 로드밸런서, 웹서버, 리버스 프록시, API 게이트웨이
빠름, 비동기 처리
요청에 응답하기 위한 비동기식 이벤트 기반 구조
모든 클라이언트의 요청을 스레드가 아닌 event handler가 처리한다.
스레드의 사용이 적으므로 Nginx의 서버 자원 활용 능력이 더 좋다.


리버스 프록시로 사용가능 Reverse Proxy
SSL 지원
Nginx는 http에 SSL, TLS 프로토콜 기반 인증서를 적용하여 https 프로토콜을 지원한다.
사용자 정보 보호 위해 해당 데이터에 대한 암호화 작업해야한다.
통신이 이루어질 때 마다 암호화하는 방법도 있지만 주로 SSL 혹인 TLS의 보안 프로토콜을 적용한다.
웹페이지 접근 인증
압축
클라이언트가 HTTP로 접속하면 80번 포트로 접속이 된다.
클라이언트가 HTTPS로 접속하면 443번 포트로 접속이 된다.
Nginx는 클라이언트가 HTTP로 접속해도 443번 포트로 우회(리다이렉트)시켜준다.
https://www.youtube.com/watch?v=tqZfdffaaBo