프로젝트에 Nginx를 사용하면서 기능은 사용하지만 원리는 잘 알지못하고 사용하고
로드밸런싱, 로드밸런서는 면접 질문이기도 해서 한번 다뤄보고 싶은 내용이였습니다.
Proxy Server, Forward Proxy , Reverse Proxy, Load Balancer 에 대해 학습합니다. 또한 프록시 서버를 얘기 할 때 캐시를 빼고 얘기 할수 없는데 간단하게 정리해보고 나아가 Ngnix가 이 용어와 역할과 관련지어 정리했습니다.
디자인 패턴에도 나오고 JPA에서도 나오고 참 많이 나오는 용어같습니다. Proxy Server에서도 똑같습니다. 기본적으로 많이쓰이는 대리 개념으로 이해하면 되겠습니다.

프록시 서버는 사용자를 인터넷에서 분리하는 중간 서버 역할을 합니다. 중간자 역할을해 클라이언트와 서버가 직접 소통 하는 것이 아닌 프록시 서버를 거치게됩니다.
프록시 서버는 캐시/보안/트래픽 분산등의 역할을 수행가능합니다.
프록시 서버는 정보를 찾는 사용자와 서버 사이에서 게이트키퍼 역할을 하는 컴퓨터 응용 프로그램입니다. 사용자의 모든 요청을 체계적인 방식으로 수집하고 전달하는 동시에 DDoS 공격 등에 대한 보안 및 보호를 제공합니다.
프록시 서버는 사실 다양하지만 일반적으로 크게 2가지로 나뉩니다.
포워드 프록시(forward proxy) , 리버스 프록시(reverse proxy)를 중점으로 살펴보겠습니다.

일반적으로 말하는 Proxy 서버가 Forward Proxy 서버입니다. 주로 캐싱, 보안 향상, 속도 향상, Privacy등 역할을 합니다.
위에서 말한바와 같이 프록시 서버(Forward Proxy를 이단락에서 프록시 서버라 칭하겠습니다.)는 중간 역할을 하게됩니다. 프록시 서버가 없다면 트래픽이 장치에서 웹사이트로 직접 흐르게 되고 프록시 서버가 있을 경우 트래픽이 웹 서버로 이동 전 트래픽이 프록시 서버로 이동하게 됩니다.
Privacy 프록시 서버는 요청자의 위치를 숨기고 익명 브라우징을 보장합니다.
사용자가 서버에 요청시 중간에 프록시 서버를 거치기 때문에 서버는 프록시 서버가 요청을 보낸 것으로 인식합니다.
Security 프록시 서버는 첫 번째 방어선 역할을 하고 사용자와 서버 사이에 서서 모든 파일을 저장하는 기업의 핵심 서버 인프라를 보호할 수 있습니다.
Caching 위 그림처럼 프록시 캐시 서버를 중간에둬 성능을 향상 시킬수 있습니다.
프록시 캐시 서버처럼 공용으로 사용하는 곳은 public 캐시, 로컬에서 사용하는 웹 브라우저 캐시는 private 캐시라고 합니다.

어떠한 요청에 대한 응답을 보내줄 때 캐싱과 보안 취약점 제거를 위해 리버스 프록시를 사용합니다. 클라이언트 입장에서는 서버 측의 실제 IP가 아닌, 리버스 프록시의 IP만 알 수 있기 때문에 보안상 취약점을 커버할 수 있게 됩니다. Load Balancing 역할 또한 해줍니다.
사용자/클라이언트는 Forward Proxy를 사용하고 서버는 Reverse Proxy를 사용합니다.

특히 보안상 강점이 있는데 리버스 프록시 서버를 WEB/WAS로 구성된 서버 앞에 두게됩니다. 이 때 클라이언트는 프록시 서버를 거쳐 WEB/WAS로 구성된 서버를 거치기 때문에 내부 서버를 직접 접근하는 것이 아니게됩니다.
즉 클라이언트는 내부 서버에 대한 정보를 알 필요 없이 리버스 프록시에만 요청하면 됩니다.
리버스 프록시 서버를 DMZ(내부네트워크/외부네트워크에 둘다 접근할 수 있는 공간)에 두고 실제 서비스 서버는 내부망에 위치 시킵니다. WAS는 DB에 직접 접근하기 때문에 외부 네트워크에 노출시키지 않습니다.
예를들어 Web Server에 Ngnix를 두고 Was에 Tomcat을 두는 방식으로 이때 Nginx 리버스 프록시 역할을 한다고 보면됩니다.
Load Balancer란 들어오는 클라이언트 요청을 서버 그룹 간에 분산하며 각 경우에 선택한 서버에서 적절한 클라이언트로 응답을 반환합니다.
Reverse Proxy 는 클라이언트의 요청을 수락하고 이를 이행할 수 있는 서버로 전달한 다음 서버의 응답을 클라이언트에 반환합니다.
로드 밸런싱(Load Balancing)은 트래픽을 여러 대의 서버로 분산시켜서 성능을 향상시키는 개념을 의미합니다. 로드 밸런서(Load Balancer)는 로드 밸런싱을 구현하는 기술이나 장치를 말합니다.
정리하자면 리버스 프록시와 로드 밸런서는 서로 다른 개념이지만, 일부 경우에는 리버스 프록시가 로드 밸런서의 역할을 수행할 수 있습니다.
로드밸런싱도 중요한 내용이니 밑에서 더 설명하겠습니다.
Global Server Load Balancing (GSLB 글로벌 서버 로드 밸런싱)
GSLB는 전 세계에 전략적으로 배치된 많은 서버 간에 웹 사이트 트래픽을 분산하기 위한 고급 로드 밸런싱 방법입니다. 일반적 으로 Reverse Proxy가 클라이언트와 서버 간의 가장 빠른 이동 시간을 기준으로 서버 노드를 선택하는 애니캐스트 라우팅 기술을 통해 수행됩니다.
암호화 (Encryption)
SSL 암호화에도 좋습니다. 서버가 클라이언트들과 통신을 할때 SSL,TSL로 암호화, 복호화를 는 많은 비용이듭니다.
하지만 리버스 프록시를 사용하면 들어오는 요청을 모두 복호화하고 나가는 응답을 암호화해주므로 클라이언트와 안전한 통신을 할수 있으며 본래 서버의 부담을 줄여줄 수 있다.
그 밖에도 밑에와 같은 기능이 있습니다.

둘의 차이를 간단히 요약 해보면
Forward Proxy는 클라이언트의 정보를 감춥니다. 요청 받는 서버는 클라이언트 정보를 모릅니다. 단 클라이언트가 요청하는 엔드 포인트는 실제 url입니다.
클라이언트와 프록시 서버간의 소통이며
Reverse Proxy는 서버의 정보를 감춥니다. 프록시 서버 url로만 접근이 가능 하므로 본서버의 IP정보를 숨길수 있습니다.
WEB/WAS 앞 단 에있습니다. 프록시와 내부서버의 통신이라고 보면됩니다.
트래픽이 증가할때 대응 방법으로 서버를 물리적인 하드웨어 성능을 올리는 Scale-up 방식이 있고 여러대의 서버가 나눠서 일하는 방식의 Scale-oup 방식이 있습니다.
이 때 서버의 트래픽을 여러 곳으로 분리시키는 로드 밸런싱이 필수적입니다.
로드 밸런싱(Load Balancing)은 트래픽을 여러 대의 서버로 분산시켜서 성능을 향상시키는 개념을 의미합니다.
로드 밸런싱은 트래픽을 상황에 맞게 분산 시키는 알고리즘이 중요합니다.
대표적으로는 라운드로빈 방식,최소 연결 방식등이 있습니다.
로드 밸런싱 중 가장 많이 활용되는 로드밸런싱은 L4와 L7으로
OSI 7계층의 레이어를 의미합니다. 즉 각 로드밸런싱이 Transport layer나 Application layer 계층에서 헤더를 부하 분산에 이용하는 것입니다.
L7은 비정상적인 트래픽을 필터링할수 있지만 L4에 비해 성능이 느립니다. 보통 말하는 기본적인 로드밸런서는 L7을 말합니다.
NginX(리버스프록시 서버)가 소프트웨어에서 로드밸런싱을 한다고 보시면됩니다.
검색 엔진 최적화(SEO)는 페이지 속도가 웹사이트 순위를 매기는 주요합니다현대 웹사이트는 복잡해지고 무거워지고 있습니다. 캐싱은 필수적이라 할수 있습니다. 캐시를 사용하는 다양한 방법들을 간단하게 알아보겠습니다.
TTL(Time to Live)은 레코드가 캐시된 상태로 유지되는 기간을 나타냅니다.
레코드 저장소를 DNS 캐시 라 부릅니다. 레코드를 저장하는 행위를 캐싱이라고 합니다
참고자료 > https://www.nginx.com/resources/glossary/reverse-proxy-vs-load-balancer/
https://kinsta.com/blog/reverse-proxy/#how-to-set-up-nginx-as-a-reverse-proxy
https://www.geeksforgeeks.org/difference-between-apache-and-nginx/
https://kinsta.com/blog/nginx-vs-apache/
https://www.baeldung.com/nginx-forward-proxy