일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- scrapping
- graphql
- Recoil
- 웹팩
- typescript
- Redux
- 웹크롤링
- javascript animation
- CDN
- sequelize
- docker
- 반응형웹
- socket.io
- 포트포워딩
- 성능최적화
- cicd
- Modal
- route
- styled-component
- 회고
- express
- go
- component
- react
- npx
- 정규표현식
- AWS
- Today
- Total
프로그래밍 공부하기
Proxy Server 본문
웹 서버를 구축할 때 웹 서버 외에도 프록시 서버도 함께 구축하는 경우가 있다. 프록시 서버는 무엇이고 왜 구축하는 것일까? 프록시 서버에 대해 알아보자.
1. Proxy Server
Proxy는 대리인이라는 뜻이다. Proxy Server란 대리인 역할을 하는 서버로, 클라이언트와 서버 간의 데이터를 중계하는 역할을 한다. 즉, 클라이언트와 서버간 데이터 통신을 위해서 데이터가 반드시 프록시 서버를 거쳐야하는 것이다.
프록시 서버는 위치에 따라 Forward Proxy, Reverse Proxy로 나뉜다. 구체적으로는 Forward Proxy는 클라이언트의 내부망에 존재(LAN -> WAN 중계)하고, Reverse Proxy는 보통 서버의 내부망 밖(WAN -> LAN 중계)에 있으며, 사용자 요청을 처리하기 위해 서버 내부망과 통신한다. 이제 프록시 서버가 어디에 사용되는지 알아보자.
1) 캐시 서버
프록시 서버의 전통적인 사용방식은 캐시 서버이다. 컴퓨터 공학에서 캐시란 두 개의 시스템 간의 데이터 전달을 더 빠르게 하기 위해 두 시스템의 중간에서 미리 필요로 하는 데이터(예상)를 저장하고 있는 장치를 의미한다. 프록시 서버는 캐시 서버로 사용될 수 있다. 예를 들어 클라이언트에서 서버로 요청을 보낼 때 처음에는 서버에서 직접 응답을 주지만, 그 다음에 요청할 때는 처음의 클라이언트 요청과 응답을 캐시 서버가 기억했다가 서버에 도달하기 전에 캐시 서버에서 미리 응답을 준다. 캐시 서버는 서버에 항상 직접 요청하는 것에 비해 불필요한 외부전송/서버 부하를 줄일 수 있으며, 더 빠른 응답을 줄 수 있다. Forward / Reverse Proxy 모두 캐시 서버로 사용될 수 있다.
2) IP 우회 / 보안
프록시 서버는 위치에 따라 클라이언트 혹은 서버의 IP를 숨길 수 있다.
먼저 Forward Proxy는 내 로컬 PC가 아닌 프록시 서버의 IP에서 서버(사이트)에 접속하는 것처럼 보이게 할 수 있다. 따라서 한국에서 접속이 안되는 사이트를 접속하기 위해, 혹은 웹 서비스를 외국에서 접속한 것처럼 테스트를 하기 위해 프록시 서버를 사용한다.(IP 우회 용도)
반대로 Reverse Proxy는 클라이언트가 서버에 직접 요청을 보내는 것이 아니라 프록시 서버로 요청을 보내게 함으로써 서버의 IP를 알 수 없게 만들어 보안을 강화할 수 있는 효과가 있다.
3) 컨텐츠 필터링
서버와 클라이언트간 이동되는 데이터(트래픽)는 프록시 서버를 거치게 되므로, 인터넷 통신을 프록시 서버에서 일원적으로 관리할 수 있게 된다. 즉, 네트워크 트래픽에 대해 모니터링 및 필터링이 가능해진다. 예를 들어 직장 내에서 특정 사이트 접속을 제한하거나 정부가 바람직하지 않은 컨텐츠를 검열하기 위해 사용된다. 또한 바이러스 패턴 파일(시그니쳐)와 클라이언트가 다운로드할 파일을 비교하여 미리 바이러스가 포함된 컨텐츠를 다운받지 못하도록 할 수도 있다.
4) Load Balancer
서버가 여러 대 있을 경우 (리버스)프록시 서버는 로드 밸런서 역할을 할 수 있다. 로드 밸런서는 서버로 들어온 여러 요청을 적절히 서버에 분배하는 역할을 한다. 트래픽 분산의 역할을 하는 것이다. 그 외에도 로드 밸런서는 http서버를 https 요청을 받을 수 있도록 해주는 역할을 한다. 서버 자체는 http이지만, 프록시 서버만 SSL을 적용하여 https 요청을 받을 수 있는 것이다.
2. VPN과의 비교
IP를 우회하기 위해 프록시 서버 뿐만이 아니라 VPN을 사용하기도 한다. VPN(Virtual Private Network)은 인터넷과 같은 공용망을 사설망처럼 이용하는 것이다. 회사 내부에서 인트라넷을 구축할 때 한 곳에 있는 컴퓨터 끼리는 전용선으로 연결할 수 있지만, 다른 지역에 지부가 있다면 이들과는 어떻게 연결할 수 있을까? VPN을 통해 이를 가능하게 한다.
VPN을 이용하면 내 로컬 PC가 아닌 VPN 서버에서 제공하는 IP에서 서버로 접속하는 것 처럼 보인다. 프록시 서버처럼 IP를 우회할 수 있는 것이다. 그렇다면 둘의 차이는 무엇일까? VPN은 공용망을 사설망처럼 사용하는 용도이기 때문에 보안 측면에서 Proxy보다 훨씬 뛰어나다. 프록시 서버는 송수신되는 데이터는 보호하지 않지만, VPN은 데이터 까지 암호화한다.
VPN은 두 장소간 안전한 터널을 만들어주는 역할이고, 프록시는 경로 중간에 놓여진 벽과 같다. 따라서 팀이 원격에 존재하는 회사 리소스에 대해 안전하게 작업하길 원하는 등 철저한 보안이 필요한 경우 VPN을 사용한다. 그렇지 않은 경우, 사용자의 공격/접속을 차단하기 위한 경우(what websites are my users hitting) 프록시 서버를 사용한다.
3. GateWay와의 비교
게이트웨이 역시 두 네트워크 사이를 중계하는 역할을 수행한다. 그러나 용도가 조금 다르다. 게이트웨이의 경우 서로 다른 프로토콜(HTTP와 HTTPS외의 케이스)끼리도 네트워크 통신이 가능하도록 하는 연결이 중심적인 역할이다. 프록시는 데이터를 중계함으로서 캐싱, 컨텐츠 필터링과 같은 역할을 하는 것이 목표이다. 최근 상용되는 프록시 서버의 경우 방화벽, FTP 접근 등을 지원하기 위해 게이트웨이 기능이 구현되어있는 경우도 있다.
4. 방화벽과의 비교
프록시 서버는 방화벽과 유사하게 네트워크 연결을 제한하거나 차단하는 역할을 할 수 있다. 이 둘은 무엇이 다른 것일까? 방화벽은 포트를 차단할 수 있다. 따라서 방화벽의 차단은 인터넷 자체(80포트)를 차단시키는 것을 의미한다. 반면 프록시 서버는 오고가는 데이터의 중계자 이므로 특정 웹 사이트만 접근하지 못하게 한다. 또한 프록시 서버의 네트워크 차단은 사실 리다이렉션이다. 허용되지 않은 웹 사이트에 엑세스하려고 하면 프록시 서버는 다른 페이지로 리다이렉션시키는 것이다. 추가적으로 방화벽은 프로그램이 컴퓨터에서 실행되는 것도 막을 수 있다.
Proxy 위키: https://ko.wikiqube.net/wiki/Proxy_server#Content-control_software
참고 영상: https://www.youtube.com/watch?v=YxwYhenZ3BE
컨텐트 필터링: https://docs.oracle.com/cd/E19438-01/819-3161/agfltr.html
VPN 위키: https://namu.wiki/w/%EA%B0%80%EC%83%81%20%EC%82%AC%EC%84%A4%EB%A7%9D?from=VPN
게이트웨이 위키: https://namu.wiki/w/%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4
프록시 vs vpn: https://www.fortinet.com/resources/cyberglossary/proxy-vs-vpn
프록시 vs 방화벽: https://yourbusiness.azcentral.com/difference-between-firewall-proxy-server-20024.html
'기타' 카테고리의 다른 글
Modal? (0) | 2021.10.02 |
---|---|
개방형 오피스 문서 (0) | 2021.09.16 |
Git Branch 전략 (0) | 2021.06.05 |
AWS CodeBuild (0) | 2021.05.13 |
aws crontab 설정하기 (0) | 2021.04.30 |