Proxy, Proxy 프로그램, Proxy 서버
Proxy
는 자신을 '통해서' 다른 네트워크에 간접적으로 접속 할 수 있도록 '중계'해주는 컴퓨터 혹은 프로그램이다.
그리고 이러한 일을 하는 프로그램을 Proxy 프로그램이라 하며, Proxy 프로그램은 Proxy Server
에서 작동한다.
Proxy의 종류
Proxy에는 Forward Proxy
와 Reverse Proxy
가 있다.
1) Forward Proxy
일반적으로 사용하는 Proxy방식이며 클라이언트와 애플리케이션 서버 사이에 위치해서 클라이언트가 애플리케이션 서버로 서비스를 요청 할 때 내부망(아래 사진에서 남색으로 표시)에 위치한 Proxy Server에서 먼저 요청을 받고, Proxy Server가 타겟인 애플리케이션 서버로 요청을 전달한다. 그리고 나서 요청에 대한 응답을 클라이언트에 전달(forward)해준다.
이렇게 하는 것의 장점은 클라이언트가 서버에 직접 접근하는 것을 막고, 서버가 응답받은 IP은 Proxy Server의 IP이기 때문에 서버는 클라이언트가 누군지 알 수 없다. 또한 Proxy Server가 중간에서 requests, responses, their sources and their destinations들을 추적할 수 있고 정해진 사이트만 연결하게 설정하는 등웹 사용 환경을 제한할 수 있으므로 기업 환경등에서 많이 사용한다.
그리고 Forward Proxy는 Cache
기능이 있어서 앞서 [Network] CDN(Contents Delivery Network) 이해하기에서도 나왔던 Cache의 장점을 가지고 있다. 즉 Cache되어 있는 것은 Origin Server에 다시 요청하지 않아도 되기 때문에 통신 속도 개선이 된다.
앞선 웹 사용환경 제한과 Cache기능으로 불필요한 외부와의 연결을 줄여서 트래픽으로 인한 네트워크 병목 현상을 방지할 수도 있다.
Forward Proxy의 네트워크 흐름에 대한 설명은 이 글에 잘 나와 있다.
2) Reverse Proxy
Forward Proxy와 다르게 클라이언트는 타겟 애플리케이션 서버의 URL(아래 그림에서는 mail.a.com,bbs.a.com 등)이 아닌 Proxy Server(아래 그림에서 www.abc.com)의 URL로 요청을 보낸다. 이 요청을 받은 Proxy Server는 내부망 내의 URI에 매핑된 타겟 애플리케이션 서버로 요청을 중계해준다. 그리고 나서 요청에 대한 응답을 클라이언트에 전달(forward)해준다.
In effect, whereas a forward proxy hides the identities of clients, a reverse proxy hides the identities of servers.
이렇게 함으로써클라이언트는 서버를 알 수 없으므로 서버의 정보가 보안된다는 것은 물론 Reverse Proxy는 서버의 로드 밸런서 역할을 하여 요청을 분산 처리해주는 역할도 한다.
그 외에도 HTTPS의 인증서 관리를 하나의 Proxy Server가 담당하고 뒤에 동작하고 있는 애플리케이션 서버는 HTTP로 서비스하게 하여서 서버를 실행할 때마다 인증서를 관리할 필요가 없도록 할 수 있다는 장점도 있다.
Nginx와 Reverse Proxy
SAFU 프로젝트 서비스 배포 환경을 구축하면서 [NGINX] EC2에 nginx 설치 및 세팅에서 Nginx
를 Reverse Proxy
로 사용했었다. Proxy에 대해 공부하고나서
이 두 그림을 보니 이제서야 저 Reverse Proxy가 어떤 의미였는지 더 잘 보인다.
그 때 Nginx 설정 파일을 아래 코드와 비슷한 형태로 수정해 주었었는데, 그때는 무슨 의미인지 완벽히 파악도 못한 채 무작정 되게만 하기 바빴다. 그런데 이제는 아~주 조금 알겠다.
아래 코드을 해석해보면,
'클라이언트가 54.180.102.122:80라는 Proxy Server 주소로 요청하면 현재 같은 내부망에서 실행되고 있는 http://127.0.0.1:3000 으로 요청을 중계해준다.'(Reverse Proxy) 는 의미이다.
아직 '내부망'이라는 개념이 잘 와닿지는 않지만 공부한 만큼 점점 보이는게 정말 재미있다 🙂
reference
www.joinc.co.kr/w/Site/System_management/Proxy
Forward Proxy와 Reverse Proxy 차이점
Forward Proxy vs. Reverse Proxy JSCAPE
포워드(Forward) 프록시와 리버스(Reverse) 프록시
앞으로 더 공부하고 싶은 것
'Computer Science > Network' 카테고리의 다른 글
[Network] Socket Programming (0) | 2022.01.29 |
---|---|
[Network] 네트워크 계층과 네트워크 간의 연결 (0) | 2021.05.02 |
[Network] CDN(Contents Delivery Network) 이해하기 (0) | 2021.01.17 |
[Network] DNS(Domain Name System) 이해하기 (0) | 2021.01.16 |
[Network] 네트워크 기본 용어 (0) | 2021.01.15 |