최근 API Gateway 역할을 하는 서버를 만들 일이 생겨서 리서치를 했다. Spring Cloud Gateway
, Netflix Zuul
같은 프레임워크들을 사용해서 인증을 포함한 API Gateway 를 만들 수 있는 것으로 확인했다.
Netflix Zuul
같은 경우에는 업데이트가 중단 됐다는 내용을 보기도 했고 Spring
생태계(?) 내에 있는 툴을 사용하는게 여러모로 익숙하고 안전하니 Spring Cloud Gateway
를 배워보기로 했다.
그래서 배우기 전에 뭐하는 친구인가 이리저리 찾아보니 Reverse Proxy
역할을 한다더라, Proxy 용어 자체는 굉장히 많이 들어봤었는데 Reverse Proxy
라는 용어가 무슨 뜻인지는 몰랐고 사실 Proxy
키워드에 대한 지식도 전무해서 본격적으로 프레임워크를 공부하기 전에 Proxy
키워드에 대해 좀 더 알아보고자 했다.
프록시 서버(proxy server 프록시 서버)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.
위키백과의 프록시 서버 설명이다. 대리로 통신을 수행하는 중계기의 역할
으로 간단하게 설명할 수 있다. 프록시를 사용해 우회해서 직구하거나 해외 결제를 하거나 했던 경험이 있어서 쉽게 이해 했지만,, forward, reverse 의 개념을 몰랐고 아래 그림을 보고 한 번에 이해할 수 있었다.
출처는 아래
forward proxy 는 말 그대로 앞에 존재한다. 클라이언트들의 요청을 forward proxy server 가 대리 수행한다. 이렇게 한다면 forward proxy server 를 거치는 여러 클라이언트/기기들에 대한 정보를 감추고 forwrad proxy server 하나가 모든 리소스를 요청하는 것 처럼 보일 것이다. 위에 예시였던 우회해서 직구하는 등의 방법도 이 forward proxy 이며 회사나 조직의 내부망도 forwrad proxy server 를 사용해서 특정 사이트에 접근을 불가능하게 한다던가(생각해보면 학창시절 교내에서 게임 사이트 접근이 안됐다..), 반대로 이를 거쳐야만 특정 사이트/리소스에 접근이 가능하게 한다던가 하는 방법으로 써먹을 수 있다.
reverse proxy 는 말 그대로 forward proxy 가 뒤집힌 형태다. 클라이언트의 요청을 전부 중계해서 하나의 네트워크에서 요청하는 것 처럼 보이는 역할을 했었다면 reverse proxy server 는 반대로 여러개의 resource server 에 접근하는 방법을 하나의 server 로 통하도록 한다.
이번에 만들어보려는 api gateway 의 예를 들어서 설명하면 MSA 구조를 가지고 있을 때 member, product 에 도메인에 관한 서버가 각각 아래의 주소를 갖는다면,
member.resource-server.com
product.resource-server.com
또 여기에 인증을 관리하는 서버가 추가되면?
auth.resource-server.com
등등 늘어나는 서버들을
api.resource-server.com
라는 주소를 가진 reverse proxy server 로만 요청하도록 하고 엔드포인트에 따라 뒤에 존재하는 리소스 서버로 요청을 전달해주는 것이다.
api.resource-server.com/api/v1/member/*
-> member..
api.resource-server.com/api/v1/product/*
-> product..
api.resource-server.com/api/v1/auth/*
-> auth..
뭐 예시가 적절한지 모르겠는데 난 이렇게 이해했고, 굉장히 쓸모있다고 생각했다.
proxy 에 장점만 있는건 아니고 어쨌든 관리해야하는 리소스가 하나 더 늘어나는 격이 될 수도 있고 길이 하나다보니 문제가 생겼을 때 전체 서비스에 문제가 생기거나 응답 속도나 문제들이 있긴 한데, 해소가 불가능하거나 심각한 문제들은 아니라서,, 장점이 강하니까 다들 쓰는거 아닐까? 무튼 개념적으로는 대강 이해했으니 다음에는 만들어보면서 이해할란다. 벌금 마감시간이 다가와서 끝!