본 포스팅은 테코톡 유튜브를 기반으로 만들어졌습니다.
https://www.youtube.com/watch?v=YxwYhenZ3BE
1. Proxy
프록시를 하나의 단어로 표현하면 '대리'라고 할 수 있습니다.
남을 대신하여 일을 처리한다는 의미입니다.
프록시는 Spring Proxy, Proxy 패턴, Network Proxy 등등 많은 프록시가 있습니다.
이번에 알아볼 Proxy는 Network Proxy 입니다.
Proxy Server
한마디로 대신 처리하는 서버라고 할 수 있습니다.
Proxy Server란?
클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로
접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜
'프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.
출처 - 위키백과 https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9D%EC%8B%9C_%EC%84%9C%EB%B2%84
프록시 서버1
프록시 서버2
위의 두 이미지 모두 프록시 서버입니다.
앞과 뒤를 합치게 된다면 아래의 모습이 나옵니다.
프록시가 서버와 클라이언트 사이에 위치하는것을 알 수 있습니다.
Proxy Server란?
클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버입니다.
캐시/보안/트래픽 분산 등 여러 장점을 가질 수 있습니다.
이러한 장점들에 대해서는 뒤에서 상세하게 알아보겠습니다.
Proxy의 종류
1. Forward Proxy
일반적으로 말하는 Proxy는 Forward Proxy를 의미합니다.
ex) Proxy 서버 설정을 한다, 인터넷 속도를 향상시키기 위해 Proxy 설정을 한다,
외국에서 접속하는 것처럼 테스트하기 위해 Proxy 설정을 한다,
개인정보를 빼돌린 해커 A씨는 IP추적을 방지하기 위해 Proxy 설정을 한다.
Foward Proxy의 특징 첫번째 - 캐싱
캐싱이란? 클라이언트가 요청한 내용을 캐싱하여
여러가지 부가적인 효과를 나타내게 됩니다.
만약 클라이언트가 오늘 날씨에 대해서 서버에 요청한다면
아래의 그림처럼 요청이 흘러가게 되고
서버가 응답함과 동시에 프록시 서버에서 해당 응답을 저장하게 됩니다.
이것을 캐싱 이라고 합니다.
이후부터 다른 클라이언트가 날씨에 대한 요청을 하게 된다면
Forward Proxy에서 바로 응답을 하게 됩니다.
캐싱을 함으로써 얻는 장점
- 전송시간 절약
- 불필요한 외부 전송 X
- 외부 요청 감소 -> 네트워크 병목 현상 방지
Foward Proxy의 특징 두번째 - 익명성
클라이언트가 보낸 요청을 감추게 됩니다.
무슨말인지 설명을 하자면
클라이언트가 서버로 직접 호출할 때는 우리의 요청을 서버로 그대로 전달합니다.
ID나, 장비정보, OS 등을 받을 수 있습니다.
하지만, 그 사이에 Forward Proxy를 넣게되면
클라이언트가 요청했지만 Proxy Server가 요청한것처럼 동작합니다.
이것이 바로 익명성 입니다.
Server가 응답 받은 요청을 누가 보냈는지 알지 못하게 합니다
즉, Server가 받은 요청 IP = Proxy IP가 됩니다.
2. Reverse Proxy
Forward Proxy와 비슷하다고 생각할 수 있습니다.
특징이 있다면 프록시와는 다르게 인터넷과 서버 사이에 위치하고 있습니다.
흐름은 프록시와 비슷한 형태로 흘러갑니다.
Reverse Proxy의 특징 첫번째 - 캐싱
Forward Proxy와 동일합니다.
Reverse Proxy의 특징 두번째 - 보안
서버 정보를 클라이언트로부터 숨깁니다.
무슨 말인가 하면,
클라이언트는 요청을 할때 서버들을 직접 알지 못하고
클라이언트 입장에서의 서버인 Reverse Proxy에게 요청을 전달합니다.
이렇게되면 Reverse Proxy가 자신이 알고있는 서버들에게 요청을 전달하니다.
클라이언트는 Reverse Proxy를 실제 서버라고 생각하여 요청하므로
실제 서버의 IP가 노출되지 않습니다.
Reverse Proxy의 특징 세번째 - 로드 밸런싱
앞서 배운 특징들도 마찬가지이긴 하지만
하는 경우도 있고, 하지 않는 경우도 있습니다.(선택적)
3. Load Balancing
로드 밸런싱이란? - 부하분산
해야할 작업을 나누어 서버의 부하를 분산시키는 것입니다.
아래의 그림을 예시로 들겠습니다.
각각의 회색원은 요청에 해당합니다.
로드 밸런싱 이전
로드 밸런싱 이후
즉, 요청들을 가각 원하는곳으로 나누어주는것이 로드밸런싱 입니다.
로드 밸런서는 서버들에게 요청을 나누어줍니다.
이때 다양한 알고리즘을 이용합니다.
아래 접은글을 펼쳐주세요
다양한 로드밸런싱 알고리즘
• 라운드로빈 방식(Round Robin Method) - 기본 알고리즘, 쉽게말해 뺑뺑이
서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식입니다. 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합합니다.
• 가중 라운드로빈 방식(Weighted Round Robin Method)
각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다. 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식입니다. 예를 들어 A라는 서버가 5라는 가중치를 갖고 B라는 서버가 2라는 가중치를 갖는다면, 로드밸런서는 라운드로빈 방식으로 A 서버에 5개 B 서버에 2개의 요청을 전달합니다.
• IP 해시 방식(IP Hash Method)
클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식입니다. 사용자의 IP를 해싱해(Hashing, 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그러한 함수) 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장합니다.
• 최소 연결 방식(Least Connection Method)
요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽을 배분합니다. 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식입니다.
• 최소 리스폰타임(Least Response Time Method)
서버의 현재 연결 상태와 응답시간(Response Time, 서버에 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간)을 모두 고려하여 트래픽을 배분합니다. 가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분하는 방식입니다.
Load Balancer가 나타난 배경
왜 쓰는가?
서비스의 사용자가 늘어남에 따라서 서버에 부하가 발생합니다.
처음 어떤 개발자는 Scale Up을 하는것을 채택하게 됩니다.
하드웨어 성능을 높여 요청을 잘 처리하게 되었습니다.
하지만 여기서 그치지않고 사용자는 끊임없이 늘어나게 됩니다.
서버에는 다시 부하가 발생하게 됩니다.
Scale Up은 한계가 있기 때문에 Scale Out이 등장하게 됩니다.
여기서 여러 대의 Server가 나누어 일을 해야하기 때문에
로드밸런서가 등장하게 됩니다.
Load Balancer란?
여러 대의 서버가 분산 처리할 수 있도록
요청을 나누어주는 서비스 입니다.
Load Balancer의 종류
L2, L3, L4, L7
OSI 7 Layer 기준으로 어떤 것을 나누는지에 따라 다릅니다.
실질적으로 백엔드 개발자에게 필요한 것은 L4, L7입니다.
L2는 Mac 주소를 바탕으로 로드밸런싱을 하고
L3는 IP 주소를 바탕으로 로드 밸렁싱을 합니다.
L4는 Transport Layer(IP & Port) Level에서 로드밸렁싱 합니다.(TCP/UDP)
ex) https://wonuk.tistory.com/ 예를들어 작성자의 블로그에 접근 시
서버 A, 서버 B로 로드밸런싱 해줍니다.
어떤 사이트로 접속할 때 80포트로 접근하게 되는데
그 요청을 서버 A, B로 고르게 나누어 줍니다.
이것이 바로 L4 Load Balancer 입니다.
L7는 Application Layer(User Request) Level에서 로드밸런싱 합니다.(HTTPS/HTTP/FTP)
ex) https://wonuk.tistory.com/ 예를들어 작성자의 블로그에 접근 시
/category와 /search를 담당 서버들로 로드밸런싱 해줍니다.
즉, URL에 따라서 혹은 쿼리 파라미터 혹은 요청방법에 따라서
어떠한 서버로 로드밸런싱 할것인지 결정합니다.
정리
proxy
클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버입니다.
Forward Proxy
클라이언트와 인터넷 사이에 위치하는 프록시 서버이며
일반적으로 Proxy라고 불립니다.
1. 캐싱 : 클라이언트가 요청한 내용을 캐싱합니다.
2. 익명성 : 클라이언트가 보낸 요청을 감춰줍니다.
Reverse Proxy
인터넷과 서버들 사이에 위치하는 프록시 서버이며
1. 캐싱 : 클라이언트가 요청한 내용을 캐싱합니다.
2. 보안 : 서버 정보를 클라이언트로부터 숨깁니다.
3. Load Balancing : 부하 분산(요청을 나눠줍니다.)
Load Balancer
여러 대의 서버가 요청을 분산 처리할 수 있도록 나눠주는 서비스
'프로젝트 > 프로젝트 관련' 카테고리의 다른 글
Docker Compose (0) | 2022.01.09 |
---|---|
Web Server와 Web Application Server(WAS) (0) | 2022.01.06 |
JUnit이란? 단위, 통합, 기능 테스트란? (0) | 2021.12.28 |
CI/CD 개념정리 (0) | 2021.12.28 |
NGINX란 무엇인가? 왜 사용하는가? (0) | 2021.12.28 |