ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Network] Proxy, Reverse Proxy
    Programming/SpringBoot 2024. 4. 3. 16:35
    728x90

    proxy란?

    "대리"라는 의미로 내부 네트워크에서 인터넷 접속을 할 때 빠른 액세스나 안전한 통신 등을 확보하기 위한 중계 서버를 "프록시 서버"라고 한다.

     

    proxy server

    서버와 클라이언트 사이에 중계기로, 대리로 통신을 수행하는 것

    클라이언트와 웹 서버간의 중개자 역할을 하는 서버이다.

     

    프록시 서버는 크게 포워드 프록시, 리버스 프록시로 나뉜다.

    - 포워드 프록시는 클라이언트

    - 리버스 프록시는 서버쪽의 설정을 한다.

    Forward Proxy

    우리가 흔히 말하는 '프록시 서버'란 포워드 프록시 서버를 의미한다.

    프록시 서버는 클라이언트 앞에 놓여 있다.

    클라이언트가 웹 서버에 요청을 보내면 중간에서 그 요청을 프록시 서버가 가로챈다. 

    프록시 서버는 해당 요청을 웹 서버에게 다시 보내고, 웹 서버에게 받은 응답을 다시 클라이언트에게 전달한다.

    https://engineer-mole.tistory.com/288

    클라이언트는 프록시 서버만을 통해서 정보를 얻게 된다.

    따라서 Web서버쪽에서는 프록시 서버를 통한 액세스 로그가 남긴다.

    포워드 프록시는 어떤 프록시 서버를 경유하도록 할 것인가를 클라이언트가 설정할 수 있다.

     

    프록시 서버는 왜 사용할까?

    (1) 캐시 저장(액세스 고속화)

    프록시 서버에 캐시를 저장할 수 있다.

    다시 동일한 페이지를 리퀘스트했을 때에는 캐시에 남아 있는 정보를 클라이언트에게 준다.

    웹서버를 거치지 않고 프록시 서버에 저장된 캐시를 사용하기에 응답 속도가 빨라진다.

     

    (3) URL필터링 : 제한된 접근을 제공하기 위해

    클라이언트가 www.naver.com에 접근 

     

    정부, 기업, 기관에 속한 사람들의 제한적인 인터넷 사용을 위해 방화벽을 사용한다.

    포워드 프록시 서버는 이런 제한을 위해 사용한다.

    해당 기관에 속한 사람들이 방문하려는 웹 사이트에 직접적으로 방문하는 것을 방지한다.

    -> 이 말은 곧 포워드 프록시 서버는 기관에 속한 유저가 특정 컨텐츠에 접근하는 것을 방지하는데 사용된다. 

    포워드 프록시 서버에 룰을 추가해서 특정 사이트에 접속하는 것을 막을 수 있다.

     

    (4) 유저의 정체를 숨겨준다.

    인터넷을 사용하는 대부분의 유저들은 익명성을 바라는데 프록시 서버를 사용하지 않으면 자시의 정체가 탄로날 수 있다.

    포워드 프록시 서버를 사용하면 IP주소를 역추적해도 정체를 파악하기 어렵다.

    IP추적해도 프록시 서버만 보이기 때문.

     

     

     

    Reverse Proxy

    클라이언트로부터 요청을 대신 받아 웹 서버에 전달하고, 웹 서버의 응답을 클라이언트에게 전달하는 역할을 한다.

    이를 통해 리버스 프록시는 웹 서버의 부하를 분산시키고 보안을 강화하는 등 다양한 기능을 수행할 수 있다.

     

    클라이언트가 리버스 프록시에 요청을 보내면

    리버스 프록시는 요청을 웹 서버에게 전달하고

    웹 서버는 요청된 데이터를 처리한 후 리버스 프록시에게 응답을 보낸다.

    리버스 프록시는 웹 서버로부터 받은 응답을 클라이언트에게 전달

    하는 방식으로 동작한다.

     

    웹서버쪽에 위치하여 클라이언트의 접근을 최초로 받아 리퀘스트에 해당하는 웹서버에 배분해주는 역할을 한다.

    클라이언트에서 액세스를 프록시 서버에 집약해서 URL에 따라 리퀘스트를 받을 웹서버가 바뀌도록 설정하고 있다.

     

     

    리버스 프록시의 필요성

    ● 서버 부하 분산 (Load balancing)

    웹 서비스에 동시에 많은 사용자가 접속 할 경우, 서버에 부하가 집중되어 성능 저하 및 서비스 중단이 발생할 수 있다. 리버스 프록시는 들어오는 요청을 여러 대의 서버로 분산시켜 각 서버의 부하를 줄이고, 서버의 가용성을 높여 안정적인 서비스 제공이 가능하도록 한다.

     

    보안 강화

    리버스 프록시는 외부에서 직접 서버에 접근하지 못하도록 하여 웹 서비스의 보안을 강화한다.

    클라이언트 요청은 먼저 리버스 프록시를 거쳐 서버로 전달되며, 이 과정에서 리버스 프록시는 패킷 필터링, 접근 제한 등의 역할로 서버를 보호한다.

    본래의 서버 IP주소를 노출시키지 않아 해커들의 DDos공격을 막는데 유용하다.

    대신 CDN과 같은 리버스 프록시 서버가 공격의 타겟이 될 수 있다.

     

    캐싱 및 가속화

    리버스 프록시는 자주 사용되는 정적 파일들(이미지, CSS, JavaScript 등)을 캐시에 저장하여 빠르게 제공할 수 있다.

    이로 인해 서버의 부하를 줄이고 응답 시간을 단축시켜 웹 서비스의 성능을 향상시킬 수 있다.

    ex)한국에 있는 유저가 미국 웹 서버 사이트에 접속할 때, 리버스 프록시 서버가 한국에 있다면 

    유저는 한국에 있는 리버스 프록시 서버와 통신하게 된다.

    리버스 프록시 서버에 캐싱되어 있는 데이터를 사용할 경우 더 빠른 성능을 보여줄 수 있다.

     

    ● SSL암호화 비용 감소

    본래 서버가 클라이언트들과 통신할 때 SSL로 암호화, 복호화를 할 경우 비용이 많이 든다.

    그러나 리버스 프록시를 사용하면 들어오는 요청을 모두 복호화하고 나가는 응답을 암호화해주므로 클라이언트와 안전한 통신을 할 수 있으며, 본래 서버의 부담을 줄여준다.

     

     

    리버스 프록시의 장점

    로드 밸런싱 : 여러 서버의 트래픽을 분산시켜 서버 부하를 줄이고 가용성을 높인다.

    보안 강화 : 리버스 프록시는 외부 요청을 필터링하여 보안을 강화한다.

    캐싱 : 정적 콘텐츠를 캐시하여 응답 시간을 개선하고 서버 부하를 줄인다.

    웹 서버 최적화 : 리버스 프록시를 사용하여 웹 서버의 설정 및 성능을 최적화할 수 있다.

     

    리버스 프록시의 단점

    추가적인 서버 설정과 관리 : 리버스 프록시를 사용하려면 추가적인 서버 설정과 관리가 필요하다

    네트워크 지연 : 리버스 프록시를 통과하는 모든 요청에 대해 약간의 네트워크 지연이 발생할 수 있다.

    복잡성 증가 : 리버스 프록시가 있는 아키텍처는 일부 경우에 복잡성이 증가할 수 있다.

     

    오픈 소스 리버스 프록시 솔루션

    NGINX

    웹 서버, 프록시 서버, 메일 프록시 서버 및 일반적인 TCP/UDP프록시 서버로 사용할 수 있는 고성능의 오픈 소스 소프트웨어.

    높은 동시성과 낮은 메모리 사용량이 특징이다.

     

    HAProxy

    고성능 및 고가용성을 목표로 하는 오픈 소스 로드 밸런서 및 프록시 소프트웨어.

    많은 웹 사이트들이 HAProxy를 사용하여 높은 트래픽을 처리

     

    적용 사례

    실무에서 리버스 프록시는 다양한 사례로 활용된다.

    API게이트웨이

     여러 서비스의 API를 하나의 엔드포인트로 통합하여 개발자들이 편리하게 사용할 수 있다.

     리버스 프록시를 통해 요청에 대한 인증 및 인가를 처리할 수 있다.

     

    콘텐츠 전송 네트워크(CDN) 구성

     여러 지역에 있는 사용자들에게 더 빠른 콘텐츠를 전달하기 위해 리버스 프록시 서버를 지역별로 배치할 수 있다.

      이를 통해 웹 서비스의 전체적인 응답 속도와 성능이 향상된다.

     

    웹 애플리케이션 방화벽(WAF) 구현

       특정 유형의 공격(SQL인젝션, XSS)을 차단하고, 보안 정책을 강화할 수 있다.

     

    웹 서비스의 성능, 안정성 및 보안을 향상시키는 데 큰 도움이 된다.

     

    요약

    포워드 프록시 서버는 클라이언트 앞에 놓여져 있고, 리버스 프록시 서버는 웹 서버 앞에 놓여 있다.

    포워드 프록시 서버를 사용하면 클라이언트와 직접 통신하는 웹 서버가 없고, 

    리버스 프록시 서버를 사용하면 웹 서버와 직접 통신하는 클라이언트가 없다.

     

     

    참고

     

    https://aday7.tistory.com/entry/%EB%A6%AC%EB%B2%84%EC%8A%A4-%ED%94%84%EB%A1%9D%EC%8B%9CReverse-Proxy-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%ED%95%84%EC%9A%94%EC%84%B1-%EC%98%A4%ED%94%88-%EC%86%8C%EC%8A%A4-%EC%86%94%EB%A3%A8%EC%85%98%EA%B9%8C%EC%A7%80

     

    https://losskatsu.github.io/it-infra/reverse-proxy/#1-%ED%94%84%EB%A1%9D%EC%8B%9Cproxy-%EC%84%9C%EB%B2%84%EB%9E%80

     

    https://research.aimultiple.com/forward-vs-reverse-proxy/

     

    https://engineer-mole.tistory.com/288

     

     

     

    728x90

    'Programming > SpringBoot' 카테고리의 다른 글

    [Spring] dataSource or dataSourceClassName or jdbcUrl is required.  (0) 2024.05.11
    [Spring] bean 라이프 사이클  (0) 2024.05.09
    [CS] 웹 서비스 구조  (0) 2024.03.27
    [Spring] IntelliJ JSP  (0) 2024.03.25
    [SpringBoot] Lombok 롬복  (1) 2023.12.07

    댓글

© 2022. code-space ALL RIGHTS RESERVED.