프록시 서버 (proxy-server)

한올·2024년 10월 22일
post-thumbnail

조사 배경

네트워크 관련 책을 보다가 문뜩 Proxy(프록시) 라는 용어가 반복적으로 눈에 띄었습니다. 프록시에 대해서 잘 안다고 생각되지 않아서 이번 기회에 정확한 개념을 알아보았습니다.

단어 자체의 의미

단어의 의미는 '대리' '대리인'이라는 의미로 직관적으로 느껴지네요

프록시 서버를 직역하면 대리자[역할을 하는] 서버 라는 의미로 생각할 수 있겠습니다.

프록시 서버

프록시 서버(Proxy Server) 는 클라이언트와 서버 사이에 중간 역할을 하는 서버로, 클라이언트의 요청을 받아 대신 서버에 전달하고, 서버로부터 받은 응답을 클라이언트에게 전달하는 역할을 합니다. 쉽게 말하면, 클라이언트가 직접 서버에 접근하지 않고, 프록시 서버를 거쳐서 요청을 처리하게 됩니다.

프록시서버는 http 통신에 필수일까?

프록시 서버는 HTTP 통신에 무조건 존재하는 것은 아닙니다.
프록시 서버는 특정 요구나 목적에 따라 사용자가 선택적으로 사용하는 중간 서버입니다.
일반적인 HTTP 통신에서는 클라이언트(웹 브라우저)와 서버(웹사이트)가
직접적으로 통신을 주고받습니다.

프록시 서버의 두 가지 종류: Forward vs Reverse

프록시 서버는 '누구의 편에 서 있느냐'에 따라 크게 두 가지로 나뉩니다.

1. 포워드 프록시 (Forward Proxy)

일반적으로 우리가 "프록시 서버 쓴다"라고 할 때 가리키는 방식입니다. 클라이언트와 인터넷 사이에 위치하여, 클라이언트의 요청을 가로채서 서버에 전달합니다.

  • 특징: 서버는 요청을 준 프록시 서버의 IP만 알 수 있고, 진짜 요청을 보낸 클라이언트가 누구인지는 모릅니다.
  • 주요 용도: 사내 보안망 구축(특정 사이트 차단), 우회 접속, 클라이언트 익명성 보장.

2. 리버스 프록시 (Reverse Proxy)

인터넷과 서버(백엔드) 사이에서 서버의 앞단에 위치합니다. 클라이언트가 웹사이트에 접속할 때 실제 서버에 직접 요청하는 것이 아니라, 리버스 프록시 서버에 요청을 보냅니다.

  • 특징: 클라이언트는 실제 백엔드 서버의 구조나 IP를 알 수 없습니다.
  • 주요 용도: - 로드 밸런싱: 수많은 요청을 여러 대의 서버로 나누어 분산 처리합니다.
    • 보안 및 암호화: SSL(HTTPS) 인증서 처리를 프록시가 전담하여 내부 서버의 부담을 줄이고 보안을 강화합니다.
    • CORS 에러 해결: 프론트엔드 개발 시 로컬 개발 서버를 프록시로 설정하여 브라우저의 CORS 제한을 우회할 때 요긴하게 쓰입니다.

프록시 서버는 언제 사용하지?

  • 익명성 보장: IP 주소를 숨기고 싶을 때.
  • 보안 강화: 회사나 기관에서 내부 서버를 외부에 노출하지 않도록 할 때.
  • 캐싱: 자주 사용하는 콘텐츠를 빠르게 제공하기 위해 데이터를 저장할 때.
  • 접근 제한: 특정 웹사이트에 대한 접근을 차단하거나 제한할 때.
  • 우회: 인터넷 검열을 회피하고 차단된 웹사이트에 접근할 때.

프록시 사용방법

프록시 서버를 사용하는 방법은 여러 환경에서 적용될 수 있으며, 클라이언트 애플리케이션이 프록시 서버를 통해 인터넷과 통신하도록 설정하는 것이 핵심이다.

1. 웹 브라우저에서 프록시 설정

웹 브라우저에서 프록시 서버를 설정하면 사용자가 웹사이트에 접속할 때마다 브라우저가 해당 프록시를 경유하여 요청을 보낸다. 이 방법은 보통 회사 네트워크나 보안 정책을 위해 사용된다.

2. axios와 같은 HTTP 라이브러리에서 프록시 설정

axios 같은 라이브러리에서 API 호출을 할 때 프록시를 설정할 수 있다.
proxy 옵션을 추가하면 된다.

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://example.com/api',
  proxy: {
    host: 'your-proxy-server.com', // 프록시 서버 주소
    port: 8080,                     // 프록시 서버 포트
    protocol: 'http'                // 프록시 서버가 HTTP 또는 HTTPS인지 설정
  }
});

instance.get('/users')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));
profile
노션이 터져서 임시로 사용하는 오픈 세컨 브레인

0개의 댓글