CORS = 교차 출처 리소스 공유(Cross-Origin Resource Sharing)
추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
브라우저에서 기본적으로 API를 요청할 때,
브라우저의 현재 주소와 API의 주소의 도메인이 일치해야만 데이터를 접근할 수 있게 되어 있다.
만약 다른 도메인에서 API를 요청해 사용하려면, CORS 설정이 필요하다.
하지만, React 라이브러리, 혹은 Webpack Dev Server에서 제공하는 proxy 기능을 사용하면 CORS 정책을 우회할 수 있다.
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.(위키백과 참조)
서버와 클라이언트 사이에 대리로 통신을 중계한다.
클라이언트에서 특정 URL로 HTTP 요청을 서버에 보낼 경우,
서버에 주소가 쉽게 노출된다.
외부 사용자가 서버로 접근하기 쉬워지게 된다.
프록시 서버를 거쳐서 서버에 HTTP 요청을 보내면,
외부 사용자가 서버의 위치를 알아내기 어렵다.
즉, 서버의 IP를 숨기는 것이 가능하고 이는 외부로부터 위험을 막아주는 역할을 한다.
*서버에 접근하는게 왜 위험한가?
만약 실제 서비스에서 서버에 중요한 정보(개인정보 등)가 있으면,
사용자들의 개인정보가 노출되므로
아무도 그 앱을 사용하지 않을 것이다.
프록시 서버 중 일부는
프록시 서버에 요청된 내용들을 캐시를 이용하여 저장한다.
만약 클라이언트에서 서버로 새로운 요청을 보냈는데,
캐시에 저장한 데이터는 서버에 다시 요청하지 않고,
캐시에서 클라이언트에 바로 전달한다.
즉, 원격 서버에 접속하여 데이터를 가져올 필요가 없게 된다.
이는 불필요한 네트워크 요청을 감소한다.
따라서, 전송 시간을 절약할 수 있게 되고,
네트워크 병목 현상을 방지하는 효과도 얻는다.
그럼 캐시란 무엇일까?
컴퓨터 과학에서 캐시는 "데이터나 값을 미리 복사해 놓는 임시 장소"를 가리킨다.
캐시는 언제 사용?
왜 사용?
React 앱 개발 시, API 서버와 통신을 가능하게 해주는 라이브러리이다.
React 앱 개발 단계에서는, 로컬 환경에서 React 앱을 실행한다.
-> API 서버와 통신이 필요할 경우가 있다.
-> 이 때, CORS 에러가 종종 발생한다.
왜? 보통 localhost:3000 에서 프론트엔드 기능 개발을 하는데,
보안 상 이 주소에서 서버로 접근하지 못하도록 막기 때문이다.
왜? localhost:3000 에서 접근이 가능하게 하면, 누구나 접근할 수 있을 것이다.
-> 이 문제를 해결하기 위해, React Proxy를 사용한다.
React Proxy를 사용하면, CORS 정책을 우회한다.
Front End <-> Browser <-> Back End
1. Front End 에서 Browser로 HTTP 요청
2. Browser 에서 Server에 접근 권한 있는지 확인
3. Back End 에서 Browser로 응답
4. Browser에서 Front End로 응답 파기 여부 결정(CORS 에러)
시스템 테스트는 모든 모듈을 통합한 후 최종적으로 완성된 시스템이 요구사항을 만족하는지 확인한다. 만약 요구사항을 만족하지 않는다면 다시 요구분석 단계로 돌아가 새로 개발을 하기도 한다.
베타 테스트는 고객의 실제 사용 환경에서 수행되는 테스트이다.
미리 선별된 유저들이 해당 제품을 사용해 보는 테스트 방법이다.
테스팅 단계에 이르러서 이슈가 발견되는 경우가 왕왕 생긴다.
질문: React proxy 사용하는 이유
답변
상황: 이미 상용화된(배포) 서비스가 있음. 프론트엔드 기능을 추가해야 함.
배포된 API 서버는 http://localhost:3000/ 에서 접근하지 못하도록 막을 것이다. 보안 상 이유로.
왜? localhost:3000의 접근을 허용하면, 누구나 접근이 가능할 것이다.
하지만, 프론트엔드 기능 개발 시, local에서(localhost:3000) 개발한다.
즉, 프론트엔드 개발자들이 localhost:300에서 접근할 수 있는 방법이 필요하다.
이 때 사용하는게 React Proxy이다.
Proxy 서버와 React Proxy
Proxy 서버: 클라이언트와 서버의 간접적 통신을 돕는 응용 소프트웨어.
React Proxy: React 개발 서버에서 다른 서버와 통신을 돕는 proxy 서버를 설정해주는 라이브러리(툴)