Proxy

1. CORS 정책이 ν•„μš”ν•œ 이유

  • λΈŒλΌμš°μ €μ—μ„œλŠ” 기본적으둜 APIλ₯Ό μš”μ²­ν•  λ•Œμ—, λΈŒλΌμš°μ €μ˜ ν˜„μž¬ μ£Όμ†Œμ™€ API의 μ£Όμ†Œμ˜ 도메인이 μΌμΉ˜ν•΄μ•Όλ§Œ 데이터λ₯Ό μ ‘κ·Όν•  수 있게 λ˜μ–΄ 있음

  • κ΅¬μΆ•ν•œ ν΄λΌμ΄μ–ΈνŠΈ λ’€μ˜ μ„œλ²„μ™€ μ—°κ²°λœ DBμ—λŠ” live dataλŠ” 민감성이 높은 데이터듀이 μœ„μ£Όμ΄κΈ° λ•Œλ¬Έμ— λ³΄μ•ˆμ΄ 무엇보닀 μ€‘μš”

  • λ§Œμ•½ μ„œλΉ„μŠ€κ°€ λͺ¨λ“  좜처의 접근을 ν—ˆλ½ν•œλ‹€λ©΄ ν•΄ν‚Ήμ˜ μœ„ν—˜μ— λ…ΈμΆœλ  수 μžˆκΈ°μ— λͺ¨λ“  도메인을 ν—ˆμš©ν•΄μ„œλŠ” μ•ˆ 되고, νŠΉμ • 도메인을 ν—ˆμš©ν•˜λ„λ‘ κ΅¬ν˜„ν•΄μ•Ό 함.

  • λ”°λΌμ„œ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ λ°±μ—”λ“œ κ°œλ°œμžμ—κ²Œ ν”„λ‘ νŠΈμ—”λ“œ 개발 μ„œλ²„ 도메인을 ν—ˆμš©ν•΄ 달라고 μš”μ²­μ„ ν•΄μ•Ό ν•˜κ³ ,

  • λ°±μ—”λ“œ κ°œλ°œμžλŠ” 응닡 헀더에 ν•„μš”ν•œ 값듀을 λ‹΄μ•„μ„œ 전달을 ν•΄μ€˜μ•Ό 함.

  • μ„œλ²„μ—μ„œ μ μ ˆν•œ 응닡 헀더λ₯Ό λ°›μ§€ λͺ»ν•˜λ©΄ λΈŒλΌμš°μ €μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έ

2. Proxy

  • μœ„μ˜ 정석적인 κ³Όμ • 없이 React 라이브러리, ν˜Ήμ€ Webpack Dev Serverμ—μ„œ μ œκ³΅ν•˜λŠ” proxy κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ CORS μ •μ±… 우회 κ°€λŠ₯

  • 즉, λ³„λ„μ˜ 응닡 헀더λ₯Ό 받을 ν•„μš” 없이 λΈŒλΌμš°μ €λŠ” React μ•±μœΌλ‘œ 데이터λ₯Ό μš”μ²­ν•˜κ³ , ν•΄λ‹Ή μš”μ²­μ„ λ°±μ—”λ“œλ‘œ μ „λ‹¬ν•˜κ²Œ λ˜λŠ” 것.

  • μ—¬κΈ°μ„œ React 앱이 μ„œλ²„λ‘œλΆ€ν„° 받은 응닡 데이터λ₯Ό λ‹€μ‹œ λΈŒλΌμš°μ €λ‘œ μ „λ‹¬ν•˜κΈ°μ—, λΈŒλΌμš°μ €λŠ” CORS 정책을 μœ„λ°˜ν–ˆλŠ”μ§€ λͺ¨λ₯΄κ²Œ 됨.

  • 즉, λΈŒλΌμš°μ €λ₯Ό proxy κΈ°λŠ₯을 톡해 μ†μ΄λŠ” 것.

3. Proxy μž‘λ™ 흐름

proxy 적용 μ „ 흐름

proxy_before
  1. ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ κ°œλ°œν•œ React μ•±μ—μ„œ λΈŒλΌμš°μ € μͺ½μœΌλ‘œ μš”μ²­μ„ 보냄

  2. λΈŒλΌμš°μ €λŠ” λ°±μ—”λ“œ, 즉 μ„œλ²„ μͺ½μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•¨. μ΄λ•Œ μ ‘κ·Ό κΆŒν•œμ΄ μžˆλŠ”μ§€, 즉 μΆœμ²˜κ°€ 같은지 ν™•μΈν•˜λŠ”λ° μ΄λ•Œ λ°±μ—”λ“œ μ„œλ²„λŠ” μ •μƒμ μœΌλ‘œ 200 OK 응닡을 λΈŒλΌμš°μ €μ—κ²Œ 보냄.

  3. λΈŒλΌμš°μ €λŠ” 받은 λ¦¬μ†ŒμŠ€ 및 응닡과 ν•¨κ»˜ μΆœμ²˜κ°€ 같은지 μ•„λ‹Œμ§€ ν™•μΈν•˜κ²Œ λ˜λŠ”λ°, μ΄λ•Œ μΆœμ²˜κ°€ λ‹€λ₯΄λ‹€λ©΄ 응닡을 파기(CORS Error) ν•˜κ³ , μΆœμ²˜κ°€ κ°™λ‹€λ©΄ 응닡을 νŒŒκΈ°ν•˜μ§€ μ•Šκ³  λ‹€μ‹œ ν”„λ‘ νŠΈμ—”λ“œ μͺ½μœΌλ‘œ 응닡을 λ³΄λ‚΄μ£ΌλŠ” κ²ƒμž„.

proxy 적용 ν›„ 흐름

proxy_after
  1. React μ•±μ—μ„œ λΈŒλΌμš°μ €λ₯Ό 톡해 APIλ₯Ό μš”μ²­ν•  λ•Œ, proxyλ₯Ό 톡해 λ°±μ—”λ“œ μ„œλ²„λ‘œ μš”μ²­μ„ μš°νšŒν•˜μ—¬ 보냄

  2. λ°±μ—”λ“œ μ„œλ²„λŠ” 응닡을 React μ•±μœΌλ‘œ 보내고, React 앱은 받은 응닡을 λ°±μ—”λ“œ μ„œλ²„ λŒ€μ‹  λΈŒλΌμš°μ €μ—κ²Œ 전달함.

  3. μ΄λ ‡κ²Œ 되면 μΆœμ²˜κ°€ κ°™μ•„μ§€κΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ €λŠ” 이 사싀을 λˆˆμΉ˜μ±„μ§€ λͺ»ν•˜κ³  ν—ˆμš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

4. Proxy μ‚¬μš©λ²•

webpack dev server proxy

  1. μ›ΉνŒ© κ°œλ°œμ„œλ²„μ˜ proxy 섀정은 μ›λž˜ μ›ΉνŒ© 섀정을 ν†΅ν•΄μ„œ μ μš©ν•˜μ§€λ§Œ, CRAλ₯Ό 톡해 λ§Œλ“  λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈμ—μ„œλŠ” package.json μ—μ„œ "proxy" 값을 μ„€μ •ν•˜μ—¬ μ‰½κ²Œ μ μš©ν•  수 μžˆλ„λ‘ ꡬ성됨

  1. 기쑴의 fetch, ν˜Ήμ€ axiosλ₯Ό 톡해 μš”μ²­ν•˜λ˜ λΆ€λΆ„μ—μ„œ 도메인 뢀뢄을 제거

React Proxy μ‚¬μš©λ²•

  • webpack dev serverμ—μ„œ μ œκ³΅ν•˜λŠ” proxyλŠ” 전역적인 섀정이기에, μ’…μ’… ν•΄λ‹Ή 방법이 μΆ©λΆ„νžˆ μ μš©λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ 생기기도 함.

  • κ·Έλž˜μ„œ μˆ˜λ™μœΌλ‘œ proxyλ₯Ό μ μš©ν•΄μ€˜μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλŠ”λ°, μ΄λ•ŒλŠ” http-proxy-middleware 라이브러리λ₯Ό μ‚¬μš©

  1. http-proxy-middleware 라이브러리 μ„€μΉ˜

  2. React App의 src 파일 μ•ˆμ—μ„œ setupProxy.js 파일 생성 ν›„, μ•ˆμ—μ„œ μ„€μΉ˜ν•œ 라이브러리 νŒŒμΌμ„ 뢈러온 λ‹€μŒ, μ•„λž˜μ™€ 같이 μž‘μ„±

  3. 기쑴의 fetch, ν˜Ήμ€ axiosλ₯Ό 톡해 μš”μ²­ν•˜λ˜ λΆ€λΆ„μ—μ„œ 도메인 뢀뢄을 제거

Last updated