💡 프록시(Proxy) - 클라이언트와 서버 사이에서 통신을 할 때, 중간에서 ‘중계 역할을 수행하는 서버’를 의미합니다. 즉, 클라이언트와 서버 간에는 직접적으로 통신하는 것이 아닌 중계 역할을 하는 ‘프록시 서버’를 거쳐서 서로간의 요청-응답을 수행합니다.
https://jung-story.tistory.com/117
[ 더 알아보기 ] 💡 클라이언트와 서버 사이에 프록시 서버가 존재하면, 클라이언트가 호출하는 엔드포인트는 프록시 서버가 되는 건가?
- 프록시를 사용하면 클라이언트는 프록시 서버로 요청을 보내야 합니다. 프록시 서버는 이러한 요청을 받아 실제 서버로 전달하고, 서버의 응답을 다시 클라이언트에게 전달합니다. - 이를 통해 클라이언트는 직접 서버와 통신하지 않고, 프록시 서버를 통해 간접적으로 통신하게 됩니다. - 단, DNS를 이용하면 프록시 서버의 역할을 보다 간편하게 수행할 수 있습니다. DNS를 통해 도메인 이름을 프록시 서버의 IP 주소로 매핑하면, 클라이언트는 별도의 설정 변경 없이도 프록시 서버를 통해 통신할 수 있습니다.
💡 프록시 서버가 AWS Gateway랑 비슷한 역할을 하는 거 같은데 똑같은 거야?
- 둘 다 요청을 중계하고 보안을 강화하며 로드 밸런싱과 캐싱 등의 기능을 제공합니다. - AWS Gateway는 주로 API 요청을 관리하고 게이트웨이 서비스로서의 역할을 수행하는데 주력합니다.프록시는 다양한 네트워크 트래픽을 중계하고, 웹 브라우징, 콘텐츠 필터링, 접근 제어 등 더 넓은 범위의 기능을 제공합니다.
💡 포워드 프록시(Forward Proxy) - 클라이언트와 서버 사이에서 ‘클라이언트의 요청을 대신 전달’하는 역할을 수행합니다. 즉, 클라이언트가 인터넷에 직접 접근하는 것이 아니라 특정 자원을 포워드 프록시 서버로 요청하면 이 요청을 받아 실제 서버로 전달하고, 서버로부터 응답을 받아 다시 클라이언트에게 전달합니다.
- 이 과정에서 클라이언트는 직접 서버와 통신하지 않고, 포워드 프록시를 통해 간접적으로 통신하게 됩니다.
https://jung-story.tistory.com/117
💡 사용 예시
- 회사 내의 직원들이 인터넷에 접속할 때, 보안과 관리 목적으로 포워드 프록시를 사용할 수 있습니다. 직원들이 웹 사이트에 접속하려고 할 때, 그 요청은 먼저 회사의 포워드 프록시 서버를 거쳐 갑니다.
- 이를 통해 직원들의 IP 주소를 숨기고, 캐싱을 통해 자주 요청되는 데이터를 저장하여 빠른 응답을 제공합니다. - 또한, 특정 웹사이트에 대한 접근을 제한하거나 모니터링할 수 있습니다. - 이를 통해 회사는 네트워크 보안을 강화하고, 효율적인 네트워크 관리를 실현할 수 있습니다.
💡 리버스 프록시(Reverse Proxy) - 서버와 클라이언트 사이에서 ‘서버의 요청을 대신 처리’하는 역할을 수행합니다. 즉, 클라이언트가 특정 자원을 요청하면 리버스 프록시 서버에서는 요청을 받아서 실제로 서버로 전달하고, 서버로부터의 응답을 받아 다시 클라이언트에게 전달합니다. - 이 과정에서 클라이언트는 직접 서버와 통신하지 않고 리버스 프록시를 통해 간접적으로 통신하게 됩니다.
https://jung-story.tistory.com/117
💡사용 예시
- 대형 웹 사이트는 트래픽을 여러 서버에 분산시키기 위해 리버스 프록시를 사용합니다. - 사용자가 웹 사이트에 접속하면 리버스 프록시는 여러 서버 중 하나로 요청하여 라우팅 하여 서버 부하를 분산시킵니다. 또한 금융 기관이나 민감한 데이터를 처리하는 기업은 리버스 프록시를 사용하여 실제 IP 서버 주소를 숨기고 외부 공격으로부터 서버를 보호할 수 있습니다. - 자주 요청되는 콘텐츠를 리버스 프록시에서 캐싱하여 빠른 응답을 제공하고, SSL 암호화를 리버스 프록시에서 처리하여 서버의 성능을 최적화할 수 있습니다.
💡 [참고] 리버스 프록시 주요 기능
리버스 프록시 기능
설명
웹 서버 로드 밸런싱
대형 웹사이트는 트래픽을 여러 서버에 분산시키기 위해 리버스 프록시를 사용합니다. 예를 들어, 사용자가 웹사이트에 접속하면 리버스 프록시는 여러 서버 중 하나로 요청을 라우팅하여 서버 부하를 분산시킵니다.
보안 강화
금융 기관이나 민감한 데이터를 처리하는 기업은 리버스 프록시를 사용하여 실제 서버의 IP 주소를 숨기고, 외부 공격으로부터 서버를 보호할 수 있습니다.
콘텐츠 캐싱
자주 요청되는 콘텐츠를 리버스 프록시에서 캐싱하여 빠른 응답을 제공합니다. 이를 통해 사용자 경험을 개선하고 서버 부하를 줄일 수 있습니다.
SSL 종료
리버스 프록시가 SSL 암호화를 처리하여 실제 서버의 부담을 줄입니다. 예를 들어, 전자상거래 사이트는 SSL 암호화를 리버스 프록시에서 처리하여 서버의 성능을 최적화할 수 있습니다.
[ 더 알아보기 ] 💡 로드 밸런싱(LB, Load Balancing) - 네트워크 트래픽을 여러 서버에 고르게 분산시키는 기술로, 웹 애플리케이션의 성능과 가용성을 높이는 데 중요한 역할을 합니다. - 이를 통해 하나의 서버에 과도한 부하가 걸리는 것을 방지하고, 많은 사용자가 동시에 서비스를 이용할 수 있도록 합니다. 💡 그럼, 포워드 프록시와 리버스 프록시가 같이 존재할수도 있는가?
- 포워드 프록시와 리버스 프록시가 동시에 존재할 수 있습니다. - 예를 들어, 회사 내에서는 포워드 프록시를 사용하여 직원들의 인터넷 접근을 관리하고 외부 공격으로부터 서버를 보호하기 위해 리버스 프록시를 사용할 수 있습니다. - 이러한 설정을 통해 네트워크 보안과 효율성을 극대화할 수 있습니다.
- 도메인 네임 시스템(DNS) 요청을 중계하는 서버입니다. 사용자가 도메인 이름을 입력하면 프록시 서버가 해당 도메인의 IP 주소를 조회하여 사용자에게 반환합니다. 이는 DNS 캐싱, 로드 밸런싱, 그리고 DNS 요청의 보안을 강화하는 데 유용합니다.
1. 클라이언트는 도메인 이름을 요청합니다. - 사용자가 웹 브라우저에서 웹 사이트 주소를 입력할 때, 이 주소를 실제 IP 주소로 변환하는 과정입니다. 2. DNS Proxy는 이를 받아 실제 DNS 서버에 전달합니다. 3. DNS 서버는 응답을 받아 클라이언트에게 전달합니다.
- 이를 통해 클라이언트는 직접 DNS 서버에 접근하지 않고 DNS Proxy를 통해 간접적으로 서버와 통신하게 됩니다.
💡 SMTP Proxy - 이메일 전송 프로토콜인 SMTP(Simple Mail Transfer Protocol) 트래픽을 중계하는 프록시 서버입니다. - 이메일을 보낼 때, 프록시 서버가 이메일을 대신 전송하거나 수신합니다. 이를 통해 스팸 필터링, 이메일 모니터링, 보안 강화 등의 기능을 제공합니다.
1. 이메일 전송 요청 - 클라이언트가 이메일을 전송하려고 할 때, 클라이언트의 이메일 클라이언트는 SMTP Proxy 서버로 이메일 전송 요청을 보냅니다.
2. 요청 수신 및 처리 - SMTP Proxy 서버는 클라이언트의 전송 요청을 수신하고 이를 처리합니다. 이 단계에서 프록시 서버는 요청의 유효성을 확인하고 필요한 경우 추가 보안 검사를 수행할 수 있습니다.
3. 실제 이메일 서버로 전달 - SMTP Proxy 서버는 클라이언트의 요청을 실제 이메일 서버로 전달합니다. 이 이메일 서버는 수신자의 이메일 서버일 수 있습니다.
4. 이메일 서버의 응답 수신 - 실제 이메일 서버는 요청을 처리하고 응답을 SMTP Proxy 서버로 다시 보냅니다. 이 응답에는 이메일이 성공적으로 전송되었는지 여부 등의 정보가 포함될 수 있습니다.
5. 클라이언트로 응답 전달 - SMTP Proxy 서버는 받은 응답을 클라이언트에게 전달합니다. 클라이언트는 이를 통해 이메일 전송 상태를 확인할 수 있습니다.
- 이를 통해 클라이언트는 직접 이메일 서버와 통신하지 않고, SMTP Proxy를 통해 간접적으로 서버와 통신하게 됩니다.
💡 FTP Proxy - 파일 전송 프로토콜(FTP, File Transfer Protocol)을 사용하는 파일 전송 트래픽을 중계하는 서버입니다. - 사용자가 파일을 업로드하거나 다운로드할 때, 프록시 서버가 대신 파일을 전송합니다. 이를 통해 파일 전송의 보안 강화, 속도 최적화, 그리고 접근 제어를 할 수 있습니다.
1. 클라이언트는 파일을 업로드 혹은 다운로드를 FTP Proxy로 요청합니다. 2. FTP Proxy는 요청을 받아 실제 FTP 서버로 전달합니다. 3. FTP 서버의 응답을 받아 클라이언트에게 전달합니다.
- 이를 통해 클라이언트는 직접 FTP 서버와 통신하지 않고, FTP Proxy를 통해 간접적으로 서버와 통신하게 됩니다.
Mail Proxy 기능
설명
IP 주소 숨기기
클라이언트의 IP 주소를 숨겨 익명성을 제공합니다. 이를 통해 클라이언트의 개인 정보를 보호할 수 있습니다.
캐싱(Caching)
자주 요청되는 파일을 캐시에 저장하여 빠른 응답을 제공합니다. 이를 통해 네트워크 트래픽을 줄이고 서버 부하를 감소시킬 수 있습니다.
콘텐츠 필터링
특정 파일이나 폴더에 대한 접근을 제한할 수 있습니다. 예를 들어, 조직 내에서 일부 파일에 대한 접근을 차단할 수 있습니다.
보안 강화
클라이언트와 서버 간의 통신을 암호화하여 보안을 강화할 수 있습니다. 또한, 악성 파일이나 의심스러운 파일에 대한 접근을 차단할 수 있습니다.
로깅 및 모니터링
모든 파일 전송 요청과 응답을 기록하여 네트워크 사용 현황을 모니터링하고 분석할 수 있습니다. 이를 통해 비정상적인 트래픽을 감지하고 차단할 수 있습니다.
- Socket Proxy는 다양한 프로토콜의 소켓 통신을 중계하는 프록시 서버입니다. 이는 TCP 또는 UDP 기반의 네트워크 트래픽을 프록시 서버를 통해 전달하는 방식입니다. - 이를 통해 사용자는 다양한 애플리케이션의 트래픽을 프록시 서버를 통해 보낼 수 있으며, 보안 강화와 네트워크 모니터링을 할 수 있습니다.
Socket Proxy 주요 기능
설명
IP 주소 숨기기
클라이언트의 IP 주소를 숨겨 익명성을 제공합니다. 이를 통해 클라이언트의 개인 정보를 보호할 수 있습니다.
보안 강화
클라이언트와 서버 간의 통신을 암호화하여 보안을 강화할 수 있습니다. 또한, 악성 코드나 의심스러운 트래픽에 대한 접근을 차단할 수 있습니다.
로깅 및 모니터링
모든 소켓 통신 요청과 응답을 기록하여 네트워크 사용 현황을 모니터링하고 분석할 수 있습니다. 이를 통해 비정상적인 활동을 감지하고 차단할 수 있습니다.
성능 최적화
통신 경로를 최적화하여 데이터 전송 속도를 향상시키고, 네트워크 자원의 효율적인 사용을 도모할 수 있습니다.
접근 제어
특정 소켓 연결에 대한 접근을 제한하거나 허용할 수 있습니다. 이를 통해 네트워크 보안을 강화하고, 불필요한 트래픽을 줄일 수 있습니다.
- HAProxy (High Availability Proxy)는 높은 성능과 가용성을 제공하는 오픈 소스 로드 밸런서 및 프록시 서버입니다. - TCP와 HTTP 기반의 애플리케이션을 위한 로드 밸런싱 및 프록싱을 지원하며, 대규모 트래픽을 효과적으로 처리할 수 있는 능력 덕분에 많은 기업과 서비스에서 널리 사용됩니다.
다양한 로드 밸런싱 알고리즘을 지원하여 트래픽을 여러 서버에 분산시킵니다. 이를 통해 서버의 부하를 고르게 분산시키고, 서비스의 가용성을 높일 수 있습니다.
고가용성
장애 발생 시 트래픽을 자동으로 다른 서버로 전환하는 기능을 제공하여 서비스의 연속성을 보장합니다.
SSL/TLS 지원
SSL/TLS 암호화를 통해 클라이언트와 서버 간의 통신을 안전하게 보호할 수 있습니다.
세션 지속성
클라이언트의 세션을 지속적으로 유지할 수 있는 기능을 제공하여 사용자 경험을 향상시킵니다.
모니터링 및 로깅
다양한 모니터링 및 로깅 기능을 제공하여 서버 상태와 트래픽을 실시간으로 모니터링하고 분석할 수 있습니다.
복잡한 라우팅
복잡한 라우팅 규칙을 설정하여 다양한 조건에 따라 트래픽을 라우팅할 수 있습니다.
성능 최적화
낮은 레이턴시와 높은 처리 성능을 제공하여 대규모 트래픽을 효과적으로 처리할 수 있습니다.
💡사용예시
1. 대규모 웹 애플리케이션 - HaProxy는 대규모 웹 애플리케이션에서 트래픽을 여러 서버에 분산시키고, 서버 부하를 관리하는 데 사용됩니다. - 예를 들어, e-커머스 사이트는 HaProxy를 사용하여 트래픽을 여러 웹 서버에 분산시켜 높은 가용성과 성능을 보장합니다.
2. 금융 서비스 - 금융 기관은 HaProxy를 사용하여 트랜잭션 트래픽을 여러 서버로 분산시키고, 고가용성을 제공하여 서비스 중단을 방지합니다.
3. 클라우드 서비스 - 클라우드 서비스 제공업체는 HaProxy를 사용하여 다양한 클라우드 리소스 간에 트래픽을 분산시키고, 클라우드 인프라의 성능과 안정성을 최적화합니다.