프로젝트 회고, 리팩토링/스택오버플로우 팀 프로젝트

[Pre-Project] CORS Proxy우회 트러블슈팅

2023. 6. 25. 18:53
목차
  1. ❌ 에러 발생과정
  2. ✅ 해결방법
  3. ❗️ 수정 전 문제점
  4. 🔓 정리

6/22

오늘은 백엔드팀에서 준 api를 받아서 원래 사용하고 있었던

express 로컬 대신 aws를 통해 배포된 api를 가지고 데이터 패칭을 해볼 수 있었다.

하지만 그 과정이 쉽지않았다.

일단 먼저 cors를 하기위해서 프록시 설정을 해주어야 했는데

프록시를 써볼일이 잘 없었던터라 여기저기 구글링해보고 gpt의 힘을 빌릴수밖에 없었다.

 

하지만 프록시를 우리 프론트엔드팀이 제대로 잘못쓰고 있었다...

 

❌ 에러 발생과정

  • 서버에서 데이터를 가져오기 위해서 axios 라이브러리로 서버와 통신 -> CORS 에러발생
  • CORS 에러를 처리하기 위해서 vite빌드도구의 프록시 설정법은 vite.config.js파일에서 프록시를 설정해주었다.
  • vite.config.js 파일에 서버와 통신을 하는 모든 api주소를 작성하였다. (뭔가 이때부터 쎄했음. 이렇게 통신하는 api를 하나하나 다 프록시 설정을 해주어야한다고..??) 하지만 질문전체리스트는 잘 받아와지기에 어? 되네??
  • 하지만 되네??는 잠시였고 질문상세페이지의 데이터들을 받아오려는 api에서는 계속 에러코드404가 계속 발생됐다.
  • 분명 param, url 오타없고 잘 설정해주었는데 그리고 여러방법으로 수정을 반복했지만 404에러는 없어지지 않았다.

프론트엔드팀 한분이 매우 집요하게 밤늦게까지 검색해보고 알아본 결과

프록시 설정자체를 잘못했다는 것이였다.

 

✅ 해결방법

수정 전 코드

 

위처럼 api요청 하나하나마다 프록시 설정을 해주어야한다고 생각하여 위처럼 작성하였었다.

하지만 id파라미터가 동적으로 바뀌는 api에서는 계속 404에러가 발생하였다.

 

수정 후 코드

 

❗️ 수정 전 문제점

  • 수정 전에는 axios를 통해 get요청하는 부분에는 proxy 타겟을 똑같이 적어야 된다고 생각했다.
  • 그리고 타겟인 백엔드 api주소에도 그대로 파라미터를 추가해서 작성했다.
// vite.config.js

	'/question/:id':{
        target: http://ec2-13-209-35-180.ap-northeast-2.compute.amazonaws.com:8080/question/:id,
        changeOrigin: true,
        secure: false,
        rewrite: (path) => path.replace(/^/api/, '/question/:id'),
      },
// axios 요청 코드부분

  useEffect(() => {
    axios.get(/question/${params.id})
    .then(res => {
       setQuestionList(res.data.data)
        console.log(res.data.data);
      })
      .catch(error => console.log(error));

 

🔓 정리

  • 프록시 설정을 해줄 때는 /api (해당 이름은 자유롭게 설정가능) 라는 경로를 설정을 먼저 해두고,
    axios 주소 적는 곳에 /api 경로를 포함한 주소 뒤에 파라미터를 붙여야한다.

  • rewrite를 통해 /api는 empty해지고, 결국 위의 수정 전 문제 예시로는 question.id가 1인 질문을 클릭하면 프록시상으로는 
    axios.get('/api/question/1')와 같이 요청이 되는 것이고, 실제로는 http://ec2-13-209-35-180.ap-northeast-2.compute.amazonaws.com:8080/question/1 로 요청이 전달되는 것이다.
  1. ❌ 에러 발생과정
  2. ✅ 해결방법
  3. ❗️ 수정 전 문제점
  4. 🔓 정리
'프로젝트 회고, 리팩토링/스택오버플로우 팀 프로젝트' 카테고리의 다른 글
  • [Pre-Project] express 적용
  • [Pre-Project] Prettier, ESlint 초기 설정
  • [Pre-Project ] 이슈 정리, 사용자요구사항 정의서
  • [Pre-Project ] 첫 팀프로젝트 시작
plla2
plla2
프론트엔드 개발자가 되고픈 개미의 일대기 🐜
plla2
코린이 "개미"의 개발블로그
plla2
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프론트엔드 (40)
      • CSS (1)
      • JS (16)
      • React (17)
      • Redux (2)
      • TS (4)
      • Pre-project (0)
    • 프로젝트 회고, 리팩토링 (14)
      • 포트폴리오 프로젝트 (2)
      • moviepop 팀 프로젝트 (1)
      • lofi 프로젝트 (2)
      • 스택오버플로우 팀 프로젝트 (5)
      • commerce 프로젝트 (1)
    • 코테 (26)
      • koans, 코플릿, sprint (9)
      • 데일리 코딩 (17)
    • 백엔드 (5)
      • Node (4)
    • CS (6)
      • 알고리즘 (2)
      • 자료구조 (1)
      • 네트워크 (1)
    • 회고, 면접준비 (16)
      • Next.js Doc 번역 (7)
      • 면접 답변용 정리 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 정규식
  • js
  • 클래스형
  • 배열분해
  • 페이지네이션
  • State
  • Twittler
  • 트리 자료구조
  • dom
  • 프로토타입
  • 데일리 코딩
  • 데일리코딩
  • 객체분해
  • 프로토타입 체인
  • 태그래핑
  • 비동기
  • 렉시컬
  • camelCase
  • 블로킹 논블로킹
  • HTMLCollection
  • 배열렌더링
  • 상태
  • 프론트엔드
  • 구조 분해 할당
  • 리액트 라우터
  • React
  • 단어의 시작
  • NodeList
  • 중첩구조분해
  • 동기 비동기

최근 댓글

최근 글

hELLO · Designed By 정상우.
plla2
[Pre-Project] CORS Proxy우회 트러블슈팅
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.