프록시 서버란? 🤔
`Proxy`라는 단어는 대리(행위)나 대리권, 대리 투표, 대리인 등을 뜻하며 말 그대로 서버 요청에 대한 대리자 역할을 수행하는 것을
프록시 서버 라고 한다.
프록시 서버(Proxy Server) 는 클라이언트와 서버 사이에서 동작하는 중간 서버를 의미한다.
클라이언트가 서버에 직접 요청을 보내는 대신 `프록시 서버`는 클라이언트 요청을 받아 서버로 전달하고,
서버에서 받은 응답을 클라이언트에게 다시 전달하는 중계자 역할을 한다.
프록시 서버의 종류 ⚙️
프록시 서버는 아래와 같이는 2가지 형태가 있다.
💡 포워드 프록시(Forward Proxy)
- `클라이언트`와 `인터넷` 사이에 있는 프록시 서버를 뜻한다.
- `포워드 프록시`는 클라이언트의 익명성을 보장한다.
- 클라이언트의 요청을 가로채 통신을 대리 수행해준다.
- 때문에 `WAS`는 `클라이언트`에 대해 알 수 없다. IP 역추적을 해도 프록시 서버의 IP만 보인다.
- 클라이언트가 요청한 내용을 캐싱한다.
- 연결된 클라이언트가 요청한 데이터를 반환할 때 저장했다가 다른 클라이언트가 동일한 데이터를 요청하면 인터넷을 거치지 않고 바로 반환해준다.
- 전송 시간이 절약되고 외부 요청이 감소되어 네트워크 병목 현상을 방지한다.
포워드 프록시는 요청을 보내는 `클라이언트 측`에 설정해두는 프록시 서버로,
클라이언트에서 특정 서버로 요청을 보내기 전에 프록시를 거쳐서 요청을 전송하는 것이다.
즉, 클라이언트가 아닌 프록시 서버의 입장에서 요청을 보내 익명성을 보장할 수 있는 것이다.
자세한 내용과 Nginx를 통한 설정 방법은 아래 참고 자료를 통해 확인해보길 바란다.
[참고자료]
[Nginx 포워드 프록시 사용법1](https://recordsoflife.tistory.com/m/924)
[Nginx 포워드 프록시 사용법2](https://earth-95.tistory.com/m/138)
[Nginx 포워드 프록시와 리버스 프록시](https://medium.com/humanscape-tech/nginx%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-forward-proxy-%EA%B5%AC%ED%98%84-91f3555549be)
💡 리버스 프록시(Reverse Proxy)
- 리버스 프록시는 대표적으로 로드 밸런싱(Load Balancing)에 사용된다.
- 리버스 프록시를 2개 이상의 서버 앞에 두면 대용량 요청이 들어왔을 때 서버가 과부화 되지않도록
프록시 단에서 `로드 밸런싱`이 가능하다.
- 리버스 프록시를 2개 이상의 서버 앞에 두면 대용량 요청이 들어왔을 때 서버가 과부화 되지않도록
- 서버의 정보를 숨겨 보안성을 얻는다.
- 클라이언트는 `리버스 프록시`이 진짜 서버인 것처럼 요청을 보내게 되기 때문에 클라이언트는 서버의 정체를 알 수 없어 보안성이 좋다.
- 본인은 AWS EC2에서 서버들을 관리하기 때문에 인바운드 보안 규칙 설정을 통해
Reverse Proxy Server를 거쳐서만 WAS에 접근할 수 있도록 설정하여 보안성을 더욱 개선 하였다.
- 클라이언트가 요청한 내용을 캐싱한다.
- Forward Proxy와 동일하지만 이미 프록시 서버가 캐싱하여 알고 있는 내용도 인터넷을 거친다는 차이가 있어
Forward Proxy가 캐싱된 데이터를 조금 더 빠르게 전송하는 것으로 이해했다.
- Forward Proxy와 동일하지만 이미 프록시 서버가 캐싱하여 알고 있는 내용도 인터넷을 거친다는 차이가 있어
리버스 프록시는 요청을 받는 `서버 측`에 설정해두는 프록시 서버로,
WAS에 요청이 도달하기 전에 프록시를 거치게 되는 것이다.
이는 WAS가 직접 요청을 받는 것이 아니라 프록시 서버가 WAS의 앞단에서 요청을 대신 전달받는 것이기 때문에 WAS의 `익명성`을 보장할 수 있는 것이다.
정리
내가 이해한 바를 정리해보면
- `포워드 프록시`는 `클라이언트의 정보를 보호`하는 것에 효과적이며
- `리버스 프록시`는 `서버의 정보를 보호`하는 것에 효과적이다.
다음 포스팅에서는 직접 Nginx를 통해 리버스 프록시 서버를 만드는 과정을 진행해보겠다 :)
'BackEnd' 카테고리의 다른 글
[인증/인가] JWT란? (with. AccessToken, RefreshToken 사용법) (0) | 2024.06.19 |
---|---|
스프링부트에 Nginx 리버스 프록시(Reverse Proxy) 서버 연결하기 (0) | 2024.05.20 |
테스트를 위한 객체, 테스트 더블(Test Double) (0) | 2024.04.04 |
[인증/인가] RefreshToken은 왜 Redis를 사용해 관리할까? (with. RTR 방식) (5) | 2023.06.13 |
WAS(Web Application Server)란 무엇인가 (0) | 2023.01.02 |