본문 바로가기
Nginx

Nginx - Forward Proxy, Reverse Proxy

by WangTak 2022. 3. 9.
반응형

영한님의 스프링 핵심 원리 - 고급편의 프록시 패턴과 데코레이터 패턴 파트에서 프록시에 대한 설명을 해주셨습니다. 그리고 프록시라는 개념은 클라이언트, 서버라는 큰 개념안에서 자연스럽게 발생할 수 있다고 하셨으며, 웹 서버에서의 프록시도 있다고 하셨습니다.

 

실무에서 Nginx를 사용하고 있고, Nginx의 기능인 Forward Proxy, Reverse Proxy, LB 등을 사용하고 있는 저였기 때문에 좀 더 명확한 개념을 얻고자 공부를 하였고 그중 이해가 가장 잘 되었던 영상을 정리해봤습니다.

 

우아한Tech 채널의 [10분 테코톡] 제이미님의 Proxy 세미나입니다.

출처 : https://www.youtube.com/watch?v=YxwYhenZ3BE

 

본 포스트는 테코톡의 내용을 정리, 요약한 것이기 때문에 가시적인 자료와 데이터의 흐름을 직관적으로 확인하고 싶으신 분들은 10분만 투자하셔서 테코톡을 보시는 것이 전반적인 내용을 이해하는데 있어서 더 편할 것이라 생각이 듭니다.

 

1.1. proxy(프록시) 

[대리] - 남을 대신하여 일을 처리함. (영한님의 강의에서도 대리자로 풀어씁니다.)

 

=> proxy라는 용어는 많이 사용됩니다. - spring proxy, proxy 패턴, network proxy etc..

=> 이 정리에서 사용하는 proxy는 network proxy입니다.

 

1.2. proxy server

Q. 그럼 proxy server는 뭘까?

A. 단순하게 일을 대신 처리하는 서버!

 

Q. 좀 더 디테일하게

A. proxy server는 클라이언트와 서버들 사이에 위치하고 있으며, 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버! [캐시/보안/트래픽 분산 등 여러 장점을 가질 수 있음]

 

1.3. proxy의 종류

- Forward Proxy

- Reverse Proxy

 

2.1. Forward Proxy 흐름도

Client <-> Forward Proxy <-> Internet <-> Server

 

2.2. Forward Proxy의 특징

2.2.1. 특징 1 - 캐싱

Client 1이 서버에게 질문합니다. [(Question) 너 이름이 뭐야?]

Request : Client 1 - [(Question) 너 이름이 뭐야?]  -> Proxy Server -> Internet -> Server

 

그러면 Server는 응답을 할 것입니다. [(Answer) 왕탁이]

Response : Server - [(Answer) 왕탁이] -> Internet -> Proxy Server[(Question) : (Answer)] -> Client 1 [GET Answer]

 

위 질문에 대한 응답을 하는 과정에서 Proxy Server는 [(Question) 너 이름이 뭐야?] 라는 질문에 대한 대답인 [(Answer) 왕탁이]를 기억하고 있습니다. (이게 바로 캐싱입니다.)

 

그렇게 되면 다른 Client 2가 동일한 질문을 했을 때는 서버를 거치지 않고 바로 Proxy Server가 응답을 해줄 수 있습니다.

 

Request : Client 2 - [(Question) 너 이름이 뭐야?] -> Proxy Server (어? 나 이거 알아)

Response : Proxy Server [(Answer) 왕탁이] -> Client 2 [GET Answer]

 

(장점)

- 전송 시간 절약

- 불필요한 외부 전송 X

- 외부 요청 감서 => 네트워크 병목 현상 방지

 

2.2.2. 특징 2 - 익명성

만약 Proxy가 없다면 다음과 같이 요청, 응답이 일어날 것입니다.

Client <-> Internet <-> Server

이렇게 되면 Client가 요청을 보냈을 때, Server는 요청한 Client의 정보를 알 수 있습니다. (브라우저, OS 등등)

 

Proxy가 있다면 다음과 같이 요청, 응답이 일어날 것입니다.

Client <-> Proxy Server <-> Internet <-> Server

이렇게 되면 Client가 요청을 Proxy Server에 보내게 되고, 그 Proxy Server가 Server에 다시 요청을 보내기 때문에 Server는 그냥 Proxy가 요청을 했구나~ 라고 인식합니다.

 

Server가 응답 받은 요청을 누가 보냈는지 알지 못하게 합니다. - Server가 받은 요청 IP는 Proxy Server의 IP일 것입니다.

 

3.1. Reverse Proxy 흐름도

Client <-> Internet <-> Reverse Proxy <-> Server

 

3.2. Reverse Proxy의 특징

3.2.1 특징 1 - 캐싱

이 부분은 Forward Proxy의 특징인 캐싱과 동일합니다.

 

3.2.2 특징 2 - 보안

서버 정보를 클라이언트로부터 숨길 수 있습니다.

 

Client는 Reverse Proxy를 실제 서버라고 생각하여 요청을 보냅니다. - 실제 서버의 IP가 노출되지 않습니다.

[실제 서버들의 IP가 클라이언트로부터 안전하게 보호됩니다.]

 

3.2.3 특징 3 - Load Balancing

- 부하 분산

- 해야 할 작업을 나누어 서버의 부하를 분산시켜 줍니다.

- 여러 대의 서버가 분산(나누어) 처리할 수 있도록 요청을 나누어주는 서비스

 

Nginx의 Load Balancing의 기능을 사용하고 싶으신 분들은 이 포스트를 참조해주시기 바랍니다.

[Spring Security] - Spring Security - Nginx LB + 세션 클러스터링(Session Clustering) ③

 

반응형