프록시 (Proxy)
너무 어려운 개념인 프록시를 축약하고 쉽게 설명하면, 남을 대신하여 일을 처리해주는 것, 즉 "대리" 라는 단어로 축약해서 설명할 수 있습니다.
프록시 종류는 너무 다양합니다.
1. Spring proxy
2. Proxy pattern
3. Network proxy
이중에서 오늘 알아볼 부분은 Network proxy에 대한 내용입니다.
프록시 서버
앞에서 프록시는 대리라는 단어로 설명을 하였습니다.
그렇다면, 프록시 서버는 대신 처리하는 서버라고 할 수 있겠네요.
클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버
캐시/보안/트래픽 분산 등 여러 장점을 가질 수 있습니다.
프록시 서버의 구조는 아래와 같습니다.
클라이언트와 서버 사이에 존재하는 구조입니다.
프록시 서버의 종류는 대표적으로 2가지가 존재합니다.
Forward Proxy, Reverse Proxy
각각의 개념을 알아보도록 하겠습니다.
Forward Proxy
일반적인 프록시 서버는 포워드 프록시를 말하는 것입니다.
아래 그림처럼 인터넷과 client 사이에 존재하고 있습니다.
Forward proxy가 갖는 두가지의 장점에 대하여 알아보도록 하겠습니다.
✔ 장점 1: 캐싱
요약: 이전에 요청 받은 내용과 이에 대한 답변을 저장해 놓고, 동일한 요청이 왔을 시 바로 응답을 보내주는 것입니다.
Forward Proxy는 클라이언트가 요청하고 서버에게 응답받은 내용을 캐싱합니다.
클라이언트가 자주 사용하는 리소스를 Forward Proxy서버에 따로 캐싱해두면, 서버단까지 가지 않고도 리소스를 쉽고 빠르게 가져올 수 있습니다.
이는 전송 시간을 절약해줍니다. 또한 불필요한 외부 전송을 하지 않아도 되기 때문에 외부 요청 자체가 감소되고, 네트워크 병목 현상을 방지해줍니다.
✔ 장점 2: 익명성
요약: 서버는 클라이언트 신원 확인을 할 수 없다는 것입니다.
Forward Proxy를 이용하면 클라이언트가 보낸 요청을 감출 수 있습니다.
클라이언트가 서버에 직접 요청을 할 때는 요청한 클라이언트의 여러 정보(OS정보, IP정보 등)들을 서버가 직접 받을 수 있습니다.
하지만 Forward Proxy를 사이에 놓게 되면, 클라이언트가 요청한 것을 Forward Proxy가 요청한 것처럼 위장할 수 있습니다.
따라서 서버는 해당 요청이 누구에게서 왔는지 알지 못하게 됩니다. (Server가 받은 요청 IP = Proxy IP)
✔ 장점 1: 캐싱
Forward Proxy와 동일하게, Reverse Proxy에서도 캐싱을 이용할 수 있습니다.
✔ 장점 2: 보안
Reverse Proxy에서는 서버 정보를 클라이언트에게 숨길 수 있습니다. Reverse Proxy를 이용하면, 클라이언트가 요청할 때 서버에 직접 요청하는 게 아니라, Reverse Proxy서버에 요청을 하게 됩니다.
실제 서버에게 요청하는 것은 클라이언트가 아닌, Reverse Proxy입니다.
따라서 클라이언트에게 실제 서버 IP를 노출하지 않아도 됩니다.
✔ 장점 3: 로드밸런싱
하는 경우도 있고 하지 않는 경우도 있습니다. (선택적입니다.)
로드 밸런싱에 대해서는 아래에서 추가적으로 알아보도록 하겠습니다.
Load Balancing
해야할 작업을 나누어 서버의 부하를 나누는 작업입니다.
한마디로 client의 요청을 여러 서버에게 나누어주는 역할입니다.
Load Balancer가 나타난 배경
사용자가 늘어남에 따라 서버에 부하가 생길 경우,
1) 스케일 업(서버의 하드웨어 성능(메모리⬆, CPU⬆ 등) 업그레이드)
2) 스케일 아웃(여러 대의 서버가 일을 함께 하도록)
두 가지 방식으로 이를 해결할 수 있습니다.
스케일 업에는 한계가 있습니다. 비용이 많이 들고, 성능 확장에 한계가 있습니다.
이와 달리, 로드밸런싱을 이용한 스케일 아웃은 수평 확장이며, 지속적 확장이 가능합니다.
Load Balancing의 종류 - L2, L3, L4, L7
- L4: Transport(IP, Port) Level에서 로드 밸런싱 수행
- ex)www.naver.com 으로 접근 시 서버 A, 서버 B로 로드밸런싱 - L7: Appplication Level에서 로드 밸런싱 수행
- ex) www.naver.com 으로 접근 시 뒤에 무엇을 붙이느냐 url 또는 query param (/search, /category 등..)에 따라 로드밸런싱