서버/인프라를 지탱하는 기술 Ch.2 — 리버스 프록시를 도입하는 이유
서버/인프라를 지탱하는 기술 2장을 읽고 리버스 프록시의 요청 제어, 메모리 효율, 버퍼링 역할을 정리한다.
시리즈 · DevOps 서적2 / 5
- 서버/인프라를 지탱하는 기술 Ch.1 — 다중화와 부하분산의 기본
- 서버/인프라를 지탱하는 기술 Ch.2 — 리버스 프록시를 도입하는 이유
- 서버/인프라를 지탱하는 기술 Ch.4 — 부하 그리고 Load Average
- 시스템 성능 엔지니어링 Ch.1~2 — 소개와 방법론
- 시스템 성능 엔지니어링 Ch.4 — 관측 가능성 도구와 모니터링 S/W의 본질
『서버/인프라를 지탱하는 기술』 2장 “한 단계 높은 서버/인프라 구축” 중 리버스 프록시 도입 부분을 정리한 내용이다.
리버스 프록시란
리버스 프록시는 웹 서버 앞에 위치해 클라이언트의 요청을 받아 뒤의 웹 서버로 전달한다. 외부(WAN)에서 내부(LAN)로 들어오는 요청을 대리하며, 요청 도중에 끼어들어 다양한 전후 처리를 수행할 수 있다.

도입했을 때의 장점은 다음과 같다.
- HTTP 요청 내용에 따라 시스템의 동작을 제어할 수 있다. (L7 스위치와 비슷한 역할)
- 시스템 전체의 메모리 사용 효율이 향상된다.
- 웹 서버가 응답하는 데이터를 버퍼링한다.
- 서버의 실제 IP를 숨길 수 있어 보안상으로도 이점이 있다.
HTTP 요청 내용에 따른 동작 제어
URL에 의한 제어
URL을 보고 최종 처리를 각기 다른 서버에 분배할 수 있다.
/image/logo.jpg는 이미지용 웹 서버로/news는 동적 컨텐츠를 생성하는 AP 서버로
로직 처리가 필요 없는 정적 파일은 바로 응답할 수 있어 요청을 효율적으로 처리할 수 있다.
IP 주소에 의한 제어
IP 주소와 URL에 의한 제어를 조합해, 관리자 전용 페이지에는 특정 IP 주소만 접속 가능하도록 제한할 수 있다.
User-Agent에 의한 제어
검색엔진 로봇 대응에 이용할 수 있다. 일반 사용자에게는 캐싱하기 어려운 페이지라도, 봇의 요청에는 캐싱된 결과를 반환하도록 설정할 수 있다.
메모리 사용 효율 향상
동적 컨텐츠를 반환하는 AP 서버는 정적 컨텐츠만 반환하는 웹 서버에 비해 수 배에서 수십 배의 메모리를 소비한다.
- AP 서버는 클라이언트의 요청 하나에 프로세스 또는 스레드 하나를 할당해 처리한다.
- 정적 컨텐츠 요청을 가벼운 웹 서버가 대신 처리하면, 그만큼 AP 서버의 프로세스와 스레드를 절약할 수 있다.
응답 데이터의 버퍼링
- TCP 연결 비용을 줄이기 위해 Keep-Alive를 사용한다.
- AP 서버가 클라이언트와 직접 Keep-Alive를 유지하면 그동안 AP 서버의 프로세스가 점유된다. 그래서 Keep-Alive는 클라이언트와 리버스 프록시 사이에서만 사용한다.
- 리버스 프록시와 AP 서버 사이의 Keep-Alive는 끈다.
읽으면서 “리버스 프록시의 스레드는 점유당해도 괜찮은가? 그만큼 AP 서버의 자원을 늘리면 되는 것 아닌가?“라는 의문이 들었다. 답은 비용의 차이였다. AP 서버의 프로세스와 스레드는 리버스 프록시가 사용하는 자원보다 훨씬 무겁기 때문에, 연결을 붙잡아 두는 역할은 가벼운 쪽이 맡는 것이 효율적이다.