프록시 API란 무엇일까요?
# 프록시 API에 대해 알아봅시다.
2024년 12월 10일
학습 배경
최근 다양한 기술과 용어들이 쏟아지는 환경에서, 프록시 API라는 용어가 자주 언급되고 있다는 것을 느꼈습니다. API의 개념에는 익숙하지만, 프록시 API에 대한 이해는 부족하다고 생각했습니다. 그래서 이번 포스팅에서는 프록시 API의 개념, 장단점, 활용 사례를 정리하고, 프론트엔드 개발자로서 어떻게 적용할 수 있을지에 대해 다뤄보겠습니다. 이 글을 통해 프록시 API를 보다 잘 이해하고, 실제 개발에 어떻게 활용할 수 있을지에 대한 유용한 정보를 제공하고자 합니다.
프록시 API
© 출처https://atomicdesign.bradfrost.com/chapter-2
프록시 API는 클라이언트와 서버 사이에서 중간 역할을 하는 API입니다. '프록시'라는 용어는 본래 "대리" 혹은 "중개"라는 의미를 가지고 있습니다. 네트워크 환경에서 프록시 서버는 클라이언트가 직접 접속하는 대신, 중간에서 요청을 처리하고 서비스를 제공합니다. 이 개념이 API 영역으로 확장되면서, 프록시 API는 클라이언트의 요청을 실제 서버로 전달하거나, 그 요청을 가공하여 서버에 전달하는 방식으로 작동합니다.
프록시 API의 작동 방식
- 클라이언트는 프록시 API에 요청을 보냅니다.
- 프록시 API는 요청을 받아 실제 서버로 전달하거나, 요청을 변형하여 전달합니다.
- 서버에서 응답이 오면, 이를 다시 클라이언트로 전달합니다.
프록시 API는 이 과정에서 요청과 응답을 변환하거나, 보안 및 추가 기능을 제공합니다. 예를 들어, 크로스 도메인 문제를 해결하거나, 보안을 강화하며, 요청 데이터를 검증하고 수정하는 등의 작업을 수행합니다.
프록시 API의 장점
보안 강화
- 클라이언트는 실제 서버의 주소를 알 필요 없이, 모든 요청이 프록시를 통해 처리되기 때문에 서버의 민감한 정보가 외부에 노출되지 않습니다.
- 또한 프록시 API는 요청 데이터를 검증하거나 수정할 수 있습니다. 예를 들어, 민감한 데이터를 암호화하거나, 불필요한 데이터를 제거하는 등의 작업이 가능합니다.
크로스 도메인 문제 해결 (CORS)
- 웹 브라우저는 보안상의 이유로 CORS(Cross-Origin Resource Sharing) 정책을 적용하여 다른 도메인에서 리소스를 요청할 때 이를 제한합니다. 프록시 API를 사용하면 요청이 동일한 도메인에서 발생한 것처럼 처리되어 CORS 문제를 우회할 수 있습니다.
유연한 데이터 가공
- 클라이언트 요청 데이터를 사전 처리하여 서버로 전달하거나, 서버 응답 데이터를 클라이언트가 사용하기 쉬운 형태로 변환할 수 있습니다. 예를 들어, JSON 데이터를 XML로 변환하거나 불필요한 필드를 제거하는 작업을 할 수 있습니다.
네트워크 성능 최적화
- 프록시 API는 요청 데이터를 캐싱하여 동일한 요청에 대해 더 빠른 응답을 제공할 수 있습니다. 이를 통해 네트워크 트래픽을 줄이고 서버 부하를 완화할 수 있습니다.
프록시 서버와 프록시 API의 차이점
프록시 서버
- 네트워크 레벨에서 작동하며, 클라이언트와 서버 사이의 모든 트래픽을 중계합니다.
- 데이터를 캐싱하여 네트워크 병목 현상을 줄이고, 외부 트래픽을 최소화합니다.
- 주요 활용 사례: 네트워크 보안, 웹 필터링, IP 주소 숨기기.
프록시 API
- 애플리케이션 레벨에서 작동하며, 특정 API 요청에 대한 중계 및 처리를 담당합니다.
- 클라이언트와 서버 간의 요청을 관리하며, 데이터 가공 및 요청 검증 등의 기능을 제공합니다.
- 주요 활용 사례: CORS 문제 해결, 요청 데이터 변환, 보안 강화.
프론트엔드에서 프록시 API 활용
프론트엔드 개발 환경에서 프록시 API는 개발의 편리함과 생산성을 높여주는 중요한 기술입니다. 특히, React와 같은 프레임워크에서 개발 환경을 설정할 때 유용하게 활용할 수 있습니다.
1. React에서 프록시 설정
create-react-app
을 사용하여 쉽게 프록시를 설정할 수 있습니다. 이를 통해 CORS 문제를 해결하거나, API 요청을 더 효율적으로 관리할 수 있습니다.
1.1. 프로젝트 생성
먼저, React 프로젝트를 생성합니다.
1.2. 프록시 설정
package.json
파일에서 프록시 속성에 백엔드 서버 주소를 추가합니다. 예를 들어, 백엔드 서버가 http://localhost:5000
에서 실행 중이라면 아래와 같이 설정합니다.
1.3. API 호출 코드
React 컴포넌트에서 API를 호출할 때는 별도의 백엔드 주소를 지정할 필요 없이, 상대 경로를 사용합니다.
1.4. 동작 확인
npm start
명령어로 개발 서버를 실행한 후, 브라우저의 네트워크 탭에서 요청이 실제로 프록시를 통해 전달되는지 확인할 수 있습니다.
개발 환경에서의 프록시 API 사용 시 장점
- CORS 문제 해결: 프록시를 사용하면 클라이언트에서 동일한 도메인으로 요청을 보내는 것처럼 처리되어, 개발 환경에서 CORS 문제를 우회할 수 있습니다.
- API 요청 테스트: 프록시를 통해 백엔드 API를 손쉽게 호출하고 테스트할 수 있습니다.
- 개발-운영 환경 분리: 개발 환경과 운영 환경에서 각각 다른 프록시 설정을 사용하여 환경별로 유연하게 동작하도록 구성할 수 있습니다.
백엔드에서의 프록시 API
© 출처 https://cloud.google.com/apigee/docs/api-platform/fundamentals/understanding-apis-and-api-proxies?hl=ko
백엔드에서는 클라이언트의 요청을 처리하고, 실제 데이터를 반환하는 API를 구현합니다. 프록시 API를 통해 전달된 요청을 받아 적절한 응답을 반환하는 방식으로 작동합니다.
서비스 환경에서의 추가 설정
- CORS 설정: 프록시를 사용할 경우 CORS 설정을 별도로 하지 않아도 되지만, 직접적인 요청이 발생할 가능성에 대비해 CORS를 설정할 수도 있습니다.
- 로드 밸런싱 및 보안: 프록시와 함께 사용하여 요청을 효율적으로 분산하거나 보안 관련 로직을 추가 처리합니다.
결론
프록시 API를 사용하면 프론트엔드와 백엔드 간의 연결이 보다 안전하고 효율적입니다. 프론트엔드 개발에서는 특별히 복잡하지 않게 사용할 수 있으며, 보안 강화, CORS 문제 해결, 데이터 가공 측면에서 확실한 이점을 제공합니다. 또한 백엔드에서는 이러한 설정을 통해 다양한 기능을 처리하고, 서비스 환경에서 안정성을 높일 수 있습니다. 프록시 API는 프론트엔드와 백엔드의 효율적인 연결 고리로서, 실제 서비스 환경에서 중요한 역할을 합니다.