[TIL] 내일배움캠프 React 과정 2024.06.19

김형빈·2024년 6월 19일
0

내일배움캠프

목록 보기
43/81
post-custom-banner

오늘의 한 일

  • 제주도 착한 가격 업소 소개 사이트 (팀프로젝트)
    • 필터 기능

공공데이터 API 호출 오류2 (SERVICE_KEY_IS_NOT_REGISTERED_ERROR)

문제 해결

  • 결국 해결 방법은 encoding, decoding API KEY 중 오류가 나면 다른 KEY를 사용하게 로직을 짜는 것이었다.

예시 코드

//api.js

const jejuStoreUrl = import.meta.env.VITE_API_JEJU_STORE_URL;
const jejuStoreDecodingKey = import.meta.env.VITE_API_JEJU_STORE_DECODING_KEY;
const jejuStoreEncodingKey = import.meta.env.VITE_API_JEJU_STORE_ENCODING_KEY;

export const jejuStoreAPIDecoding = axios.create({
  baseURL: jejuStoreUrl,
  params: { serviceKey: jejuStoreDecodingKey, numOfRows: 11630, pageNo: 2 }
});

export const jejuStoreAPIEncoding = axios.create({
  baseURL: jejuStoreUrl,
  params: { serviceKey: jejuStoreEncodingKey, numOfRows: 11630, pageNo: 2 }
});
//jejuStore.api.js
export async function getJejuStores() {
  const path = '/getGoodPirceStoreList';

  try {
    const response = await jejuStoreAPIEncoding.get(path);
    const responseDataDecoding = response.data?.response?.body.items;
    if (!responseDataDecoding) {
      console.log('encoding key 실패, decoding key 시도');
      try {
        const responseEncoding = await jejuStoreAPIDecoding.get(path);
        const responseDataEncoding = responseEncoding.data?.response?.body.items;
        return responseDataEncoding;
      } catch (encodingError) {
        console.log('encoding key 에러:', encodingError);
        throw encodingError;
      }
    }
    return responseDataDecoding;
  } catch (decodingError) {
    console.log('decoding key 에러 :', decodingError);
  }
}

오늘의 회고

오늘은 필터와 데이터 전처리로 골머리를 앓았다... 특히, 체크한 항목들을 리스트로 저장해서 zustand의 데이터를 필터링하려고 하였는데 리스트를 state로 관리하고, zustand를 커스텀 훅으로 사용하는 과정에서 리스트가 원하는데로 바뀌지 않는 문제가 발생하여 오랜 시간이 걸렸다. 그래서 결국 체크한 항복을 리스트로 저장하는 것이 아닌 체크를 할 때 마다 데이터를 필터링하도록 변경하였다. 그 결과 문제점이 있긴했지만 동작하는데에는 성공시킬 수 있었다. 오늘은 너무 피곤해서 이쯤 정리하고 내일 정리해야겠다...
profile
The secret of getting ahead is getting started.
post-custom-banner

0개의 댓글