API를 받았는데, API의 속성이 제한되는 현상이 일어났다.
하지만, 동료는 정상적으로 API 정보(속성들)가 전달된다한다.
무엇이 문제였을까?
결론부터 말하면, 백엔드에서 Header 설정을 하지 않았다.
좀 더 구체적으로 보자.
문제의 발생
몇 가지 조건이 겹쳤다.
1. 현재 우리는 local Proxy를 이용하여 가볍게 개발중이다.
2. 백엔드에서 cors 에러를 방지하기 위해서 'Access-Control-Allow-Origin: *' 설정을 하여서 예외처리 해두었다.
이 상황에서 나는 테스트 서버로 api 요청을 보내야했고, 이 과정에서 굳이 local Proxy를 사용할 필요가 없다 느껴서 서버 주소를 직접 입력하여서 보냈다.
그리고 아래 사진처럼 제한된 값이 도달했다. 하지만, 네트워크에는 원하는 정보들이 제대로 전송되었다. cors 및 기타 에러는 전혀 발생하지 않았다.. 근데 왜 안 보일까..?
문제의 원인 및 해결
CORS-safelisted response header 라는 것이 있다.
교차 자원(cross-origin)에서 온 자원들 중 client의 노출되어도 괜찮은 header 값들만 브라우저(Client)에 공개된다는 것이다. 그래서 아래 속성을 제외하고는 브라우저(Client)에서는 접근이 불가능하다.
- Cache-Control
- Content-Language
- Content-Length
- Content-Type
- Expires
- Last-Modified
- Pragma
위 값을 제외한 다른 값들을 접근하고 싶다면, 백엔드쪽에서는 Access-Control-Expose-Headers를 설정해주면, 브라우저에서 이제 접근이 가능해진다.
느낀 점
어느정도 네트워크와 백엔드에 대한 지식은 필수적이여야하는 것 같다...
에러가 났는데, 200 상태코드가 나오니 내 잘못인 줄 알고 코드를 하나하나 분해해서 디버깅했다. 하루를 통째로 디버깅을 해보고 나서야, 나는 잘못된 게 없다는 걸 알았고 다른 조건인 로컬 프록시는 이런 에러가 발생하지 않는 걸 알았다.
그 뒤에는 다시 왜 로컬프록시는 되는 지 하나하나 비교하고 찾아보느라 반나절을 사용했다. 덕분에 깔끔하게 속성 하나하나 조사하고, 에러 원인을 명확히 찾을 수 있었지만 개발을 이틀이나 할 수 없었다..
다음에는 그래도, 이거 설정해서 주세요. 라고 당당히 말할 수 있으니 좋은 기회라 생각하자
참고자료
CORS-safelisted response header mdn : https://developer.mozilla.org/en-US/docs/Glossary/CORS-safelisted_response_header
'Frontned Development > FE 프로젝트 개발' 카테고리의 다른 글
Axios를 이용하여 formData 객체를 전송 시, 서버에 빈 객체가 전달되는 문제 (0) | 2023.08.06 |
---|---|
FormData 에러 (console.log , boundary 미확인) (0) | 2023.08.06 |
[프로젝트 세팅] gitignore.io를 이용하여 .gitignore 생성하기 (0) | 2023.01.10 |
ESLint와 React 안정성 에러 - Enforce a specific function type for function components (react/function-component-definition) (0) | 2023.01.03 |
ESLint 자동 변환 이슈(에러) (0) | 2023.01.02 |