포워드 프록시, 리버스 프록시, 로드밸런싱

nGyu·2022년 2월 21일
0

백엔드 CS

목록 보기
2/10

백엔드의 CS지식을 공부하다보니 프록시라는 개념을 접하게 되었다.
프록시는 그저, 우회해서 사이트를 접속할 때 사용하는거다 라는거밖에 들은적이 없었는데, 우연히도 내가 백엔드 공부를 시작한다하니 여러 개념을 알려주던 친구에게 어떤것들이 있는지 설명을 듣고 나 나름대로 또 정리를 해 보았다.

프록시서버

프록시는 정확히 무엇일까? 위에 언급한대로 프록시라는것은 우회접속할 때 사용하는걸로 알고있다고 했는데, 얼추 맞긴하다.
정확히는 클라이언트와 서버 사이에서 데이터를 전달해주는 서버를 프록시 서버 라고 한다.
뭔가 말이 어렵다. 좀 쉽게 말하면 요청에 대한 응답을 해주는 중개인 개념이다.


우리 프록시를 사용해서 어둠의 경로에 들어간다고 가정을 해보자.

어느 한 어둠의 경로는 일부 ip는 접근을 할 수 없게끔 막아두었다.
해당 사이트에 들어가기 위해서는 해외 ip가 필요한데, 이 때 프록시를 이용해 ip를 속여 접속이 차단되지 않고, 접속이 가능해진다.

예시가 어둠의경로라서 설명이 이렇게 되었는데, 이러한 방법으로 사이트에 접속할 수 있도록 하는것이 포워드 프록시라고 할 수 있다.

포워드 프록시

위 예시를 읽어보았는가? 읽어보았다면 몇명 찔리는 사람도 있을것이다
우선, 위 예시처럼 클라이언트가 서버를 속여접속하는 방법을 포워드 프록시라고 할 수 있을것이다.
" 아니 이거 불법이잖아! "
음... 뭐 이런식으로 접속을 하면 불법이려나 ...?
암튼 포워드 프록시의 원래 용도는 이런것은 아니다. 그저 비유를 한것이다!

그래서 포워드 프록시는 무엇이냐?

  • (클라이언트 → 서버) 요청 시 프록시서버를 통해 요청하는 방식
  • 서버에게 클라이언트가 누구인지 감추는 방식
  • 캐싱 기능이 있어, 자주 사용되는 컨텐츠는 월등한 성능 향상을 가져올 수 있음
  • 정해진 사이트만 연결하게 설정하는 등 웹 사용 환경에 제한을 둘 수 있음.

이미지 출처는 예전에 찾아둔 이미지라 잘 모르겠다.. 원작자님 죄송합니다

위 4개의 항목을 잘 읽어보면 위에 예시를 들어 설명한 내용이랑 유사한 내용일것이다.
"그래, 서버를 속이는것이라는것은 잘 알겠어! 그럼 뒤에 내용들은 뭐야?"
자, 이제 한번 제대로 알아보자.

이미지에 보이는대로 Proxy서버를 통해서 서버에 접속을 하는건데, 이 Proxy서버에는 캐싱 기능이 있다. 이 캐싱서버가 사용되는 방식은 아래와 같다.

클라이언트A가 프록시서버를 통해서 서버에 접속을 한다. 서버에 접속을 해서
"고양이"와 관련된 자료를 받아보는데, 클라이언트 B도 "고양이"와 관련된 정보를 받아서 보려고 한다. 이 때 ForwardProxy 서버에서 "고양이"와 관련된 자료를 캐싱해놓고, 클라이언트 B가 서버의 응답을 기다리지 않아도 프록시서버에서 해당 값을 반환해준다.

그러니까 프록시서버에서 자료를 가지고있다가 이 자료가 필요한 클라이언트는 서버까지의 응답을 기다리지 않고 프록시서버에서 응답을 해준다는것이다.

그렇다면 정해진 사이트만 연결하게 하는 설정등 웹 사용 환경에 제한을 둔다는말은 무엇일까? 맨 뒤에있는 서버가 123.4.12.1/24 만 접속을 가능하게 해둔다면 이 ip범위만 접속할 수 있도록 하는 접근에 제한을 둔다는 이야기이다.

리버스 프록시

음 그렇다면 리버스프록시는 무엇인가?
포워드 프록시와는 상황이 반대가 된다고 생각하면 편할것이다.

  • 일반 프록시랑 관점만다름
  • 클라이언트가 서버를 호출할 때 리버스 프록시를 호출한다. 그 후 프록시 서버가 받은 요청을 서버에게 전달하고, 이 응답을 프록시서버를 통해 클라이언트에게 전달한다.
  • 클라이언트에게 서버가 누군지 감추는 방식
  • 내부에 대한 내용을 외부가 모르게 통신하는것

서비스별로 서버를 운용하고있다면, 서비스별로 ip가 할당이 될것이다.
예를들어 로그인api, 주문api가 있다고 해보자.

클라이언트 A 가 로그인을 하려고 한다. 이 때 142.23.45.12:80 으로 로그인 요청을 보낸다. 그리고 로그인이 되었다. 또, 필요한 재료를 주문하기 위해 142.23.45.12:80으로 요청을 보냈고, 주문이 완료되었다는 응답이 왔다. 그렇다면, 로그인 서비스와 주문 서비스는 142.23.45.12:80에 구동되고 있을까?

이 예시에대한 답은 그럴수도있고 아닐수도 있다.
리버스프록시를 이용하지 않는다면 한 서비스에서 로그인과 주문 서비스를 모두 구현해두고 계속 한 서비스에 접근하여 데이터를 주고받고 할것이다.


로그인 서비스는 142.23.45.12:8080,
주문 서비스는 142.23.45.12:8081 에서 구동을 하고있다고 가정해보자.
"어? 그럼 로그인할 때 142.23.45.12:8080으로 요청을 보내면 안되나요?"
아니다. 외부에서 8080포트로 접속 허용이이 되어있지 않다면 아무리 요청을 보내도 원하는 응답은 오지 않을것이다. 이 때 80포트만 열려있는 상황이라면, 로그인 요청시 142.23.45.12:80/login 으로 요청을 한다면, 이 요청은 142.23.45.12:80/login 에서 142.23.45.12:8080으로 요청이 다시 보내진다. 즉, 서버의 입장에서는 프록시서버가 클라이언트가 된다는것이다.

로드밸런싱

리버스 프록싱에서 부가기능을 추가한다면 로드밸런싱까지 가능하다!
엥 갑자기 무슨 로드밸런싱? 이게뭔데?
라고 할 수 있다. 그럼 천천히 알아보자.

하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등 다양한 조건을 고려하여 적적히 트래픽을 분산처리하는 기법.
즉, 서버 여러대에 트래픽을 균등하게 분산시켜주는 역할

위에 딱 정의를 해두었다. 로드밸런싱이 무엇인지..
대용량 트래픽을 처리할 때 사용되는 기법 중 하나이다.

로드밸런서가 API GateWay의 상태를 확인하여 트래픽의 부하정도를 판단 후 트래픽을 분산시켜준다.

Nginx

앞서 리버스 프록시에서 부가기능을 추가하면 로드밸런싱이 가능하다고 언급하였다.
그런데 어떻게 하는것일까?
Nginx라고 대부분 들어보앗을것이다.
이에 관해서는 다른 글로 더 자세히 설명을 해보도록 하겠다.
일단은 간단하게 왜 리버스프록시랑 로드밸런싱 이야기가 나왔는지 알아보자.

Nginx에서 설정을 통해서 리버스프록시를 할 수 있다.
Nginx는 웹 서버로서 사용할 수 있다.
그렇다면 Nginx = 프록시서버 인가? 맞을수도 있고 아닐수도 있다.
설정을 통해서 리버스프록시가 되기때문에 반은맞고 반은 틀리다는것이다.

그렇다면 왜 로드밸런싱에서 Nginx이야기가 나왔을까?
앞서 말했듯이 설정을 통해 리버스프록시를 적용할 수 있듯이 Nginx에 부가기능을 추가하는등의 설정을 통해 리버스 프록시를 적용할 수 있다.

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글