CORS(Cross-Origin Resource Sharing) 처리방안

 

1. 처리방안

1안) 서버 측에서 Access-Control-Allow-Origin 헤더를 설정하여 클라이언트의 요청 출처를 허용하는 것.

2안) 프록시 서버를 사용하거나, 브라우저 확장 프로그램을 활용하는 방법.

 

openapi 호출할 때 CORS가 발생하여, 1안으로는 해결할 수 없어서 2안으로 진행함.

 

2. 구현절차

2.1 proxy module 설치

npm install http-proxy-middleware

 

2.2 proxy module 설정

setupProxy.js 파일을 생성하고, 설정한다.

 

 - 호출 하려는 url: https://apihub.kma.go.kr/api/typ02/openApi/VilageFcstMsgService/getLandFcst?pageNo=1&numOfRows=10&dataType=JSON&regId=11B20601&authKey=인증키

 

 - proxy로 호출하는 url: http://localhost:3001/proxy/api/typ02/openApi/VilageFcstMsgService/getLandFcst?pageNo=1&numOfRows=10&dataType=JSON&regId=11B20601&authKey=인증키

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/proxy',
    createProxyMiddleware({
      target: 'https://apihub.kma.go.kr',
      changeOrigin: true,
      })
    );
};

 

매핑된 /proxy는 client에서 proxy 구분으로 사용될 뿐, 실제서버에서는 url에 들어가지 않음. (react 버전 19.2.0 기준)

 

2.3. proxy url로 호출

import React, { useState } from 'react';
import './App.css';

function App() {
  // const [temp, setTemp] = useState("");
  const [isReady, setIsReady] = useState(false);
  const [data, setData] = useState(null);
 

  const params = new URLSearchParams({
    pageNo: 1,
    numOfRows: 10,
    dataType: 'JSON',
    regId: '11B20601', // 수원지역
    authKey: '인증키'
  });

  React.useEffect(() => {
    fetch(`proxy/api/typ02/openApi/VilageFcstMsgService/getLandFcst?${params.toString()}`)
      .then(response => response.json())
      .then(data => {
        setData(data.response.body.items.item);
        setIsReady(true);
      })
      .catch(error => console.error('Error fetching data:', error));
  }, []);

  if(isReady) {
    return (
      <div className="App">
        <h1>Weather Data</h1>
        <table border="1">
          <thead>  
            <tr>
              <th>Announce Time</th>
              <th>지역코드</th>
              <th>발효번호(발표시간기준)</th>
              <th>날씨</th>
              <th>강수확률</th>
              <th>풍향1</th>
              <th>풍향2</th>
            </tr>
          </thead>
          <tbody>
            {data && data.map((item, index) => (
              <tr key={index}>
                <td>{item.announceTime}</td>
                <td>{item.regId}</td>
                <td>{item.numEf}</td>
                <td>{item.wf}</td>
                <td>{item.rnSt}</td>
                <td>{item.wd1}</td>
                <td>{item.wd2}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    );
  } else {
    return (
      <div className="App">
        Loading...
      </div>
    );
  }

}

export default App;

 

 

결과

 

end.

 

'Programming Language > React' 카테고리의 다른 글

package.json 버전 표기법  (0) 2021.04.27

package.json 버전 표기법.

 

 

1.버전규칙:

  • 규칙 "major.minor.patch"
  • major: 하위 호환성이 깨질 때 버전 올림.
  • minor: 하위 호환성이 유지되면서, 새기능이 추가할 때 버전 올림.
  • patch: 버그 수정 등에 버전 올림.

2.버전 표기법

2.1 Ranges (>, <=, <, <=)

- =version, >version, <version, <=version
예) ">1.2.3": 1.2.3 버전 이상

2.2 Hyphen Ranges ( - )

  • " - " 로 범위 버전을 지정하고, " "또는 "||"로 표현이 가능함('or' 의미).
    예)
  • "1.2.3 - 2.3.4" := ">= 1.2.3 <= 2.3.4"

2.3 Tilde Ranges (~)

예)

  • "~1.2.3" : 1.2.3 이상, 1.3.0 미만
  • "~1.2" : 1.2.0 이상, 1.3.0 미만
  • "~1" : 1.0.0 이상, 2.0.0 미만

2.4 Caret Ranges (^)

"major.minor.patch" 버전에서 가족 왼쪽에 버전이 0이 아닌 숫자를 수정하지 않는 변경을 허용함.

  • "^1.2.3": 1.2.3 이상, 2.0.0 미만
  • "^0.2.3": 0.2.3 이상, 0.3.0 미만
  • "^0.0.3": 0.0.3 이상, 0.0.4 미만

2.5 X-Ranges (X, *)

와일드 카드 의미.

  • "*": 모든 버전을 허용
  • " ": 모든 버전을 허용
  • "1.2.X": 1.2.0 이상, 1.3 미만

3.참조

https://docs.npmjs.com/cli/v7/using-npm/semver#versions
https://semver.org/
https://semver.org/lang/ko/

+ Recent posts