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

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

프록시 서버는 HTTP 통신에 무조건 존재하는 것은 아닙니다.
프록시 서버는 특정 요구나 목적에 따라 사용자가 선택적으로 사용하는 중간 서버입니다.
일반적인 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));