[React] 구글 스프레드 시트 API 이용하기(with google-spreadsheet)

2023. 2. 22. 20:56·React
반응형

구글 스프레드 로고

버전 정보

  • react: ^18.2.0
  • react-scripts: ^4.0.2 (5버전은 에러가 너무 많이 나서 다운그레이드)
  • google-spreadsheet: ^3.3.0

 

구글 스프레드 시트 API

구글 스프레드 시트 API를 이용하여 받아온 데이터를 React에서 처리하려고 한다.

API를 이용하면 자바스크립트나 파이썬등에서 코드를 통해 시트 내용을 조회, 생성, 수정, 삭제를 할 수 있다.

 

이 작업은 주로 정적인 사이트에 활용하기 좋다. 또한, 구글 스프레드시트에 익숙한 기획자들과의 협업에도 큰 도움이 될 수 있다.

예를 들어, 기획자들이 스프레드시트에서 작업한 내용을 DB에 반영해야 하는 경우가 종종 있다. 하지만 스프레드시트의 데이터가 자주 업데이트되면, 이를 관리하는 데 상당한 노력이 필요하게 된다. 반대로, 개발 측에서 데이터를 수정하면, 그 변경 내용을 스프레드시트에도 반영해야 한다.

이런 상황에서 한쪽에서 변경된 내용이 실수로 전달되지 않으면, 스프레드시트와 개발 쪽의 데이터가 일치하지 않을 위험이 있다.

이럴 때 구글 스프레드시트 API를 사용하면 두 매체 간의 데이터를 자동으로 동기화할 수 있어, 이러한 문제를 효과적으로 해결할 수 있다.

 

구글 스프레드 시트 API 등록 과정

우선 https://console.cloud.google.com/apis/credentials로 이동하여 프로젝트를 생성한다.

구글 스프레드 시트 API 사이트
구글 스프레드 시트 프로젝트 추가

 

프로젝트를 생성 후에 서비스 계정을 생성한다.

구글 스프레드 시트 사용자 인증 정보
구글 스프레드 시트 서비스 계정

 

사용자 인증 정보 화면의 서비스 계정 부분에 생성된 계정을 클릭하여 키를 추가한다.

구글 스프레드 시트 API 키 발급

 

키 추가가 완료되면, 해당 키값이 들어있는 json파일이 다운로드된다.

구글 스프레드 시트 API 키 파일 다운로드

 

구글 스프레드 시트 API 활성화

처음 구글 스프레드 시트를 만들고, 위의 파일을 적용하면 API가 닫혀있어서 403 에러가 발생한다.

다음과 같이 API를 사용 상태로 수정하자.

구글 스프레드 시트 API 활성화
구글 스프레드 시트 API 검색
구글 스프레드 시트 API 활성화 버튼

 

권한 부여

위와 같이 작업 했더라도, 공유가 안되어 있어서 메시지만 다른 403 에러가 발생한다.

서비스 계정 목록에 있는 계정을 추가하자. 키 생성시 다운로드 받은 json파일에도 client_email이 존재한다. 

구글 스프레드 시트 API 권한 부여

 

스프레드 시트를 입맛에 맞게 만든다. 이때 Document ID와 worksheet ID값을 복사한다.

구글 스프레드 시트 API ID 값들

 

React 작업

$yarn add google-spreadsheet --dev

# 타입 스크립트를 사용할 경우
$yarn add @types/google-spreadsheet --dev

 

정상적으로 동작하는지만 확인하면 되기에 간단하게 작성했다.

위에서 다운로드 받은 파일을 적절한 위치에 넣은 후 require하고, 바로 위에서 복사한 Document ID 값을 넣어준다.

// src/libs/googlesheet.ts

import {GoogleSpreadsheet, GoogleSpreadsheetRow} from "google-spreadsheet";
import {useEffect, useState} from "react";

const credential = require(키 추가한 후 다운로드된 json파일 위치);

// 구글 시트 조회하는 로직
export const getGoogleSheet: () => Promise<GoogleSpreadsheet> = async () => {
    const doc = new GoogleSpreadsheet(Document ID 값 넣는 곳);
    // 구글 인증이 필요하다.
    await doc.useServiceAccountAuth(credential);
    await doc.loadInfo();
    return doc;
}

// 구글 시트 조회하는 custom useHook
const useGoogleSheet = (sheetId: string) => {
    const [googleSheetRows, setGoogleSheetRows] = useState<GoogleSpreadsheetRow[]>([]);

    const fetchGoogleSheetRows = async () => {
        const googleSheet = await getGoogleSheet();
        const sheetsByIdElement = googleSheet.sheetsById[sheetId];
        const rows = await sheetsByIdElement.getRows();
        setGoogleSheetRows(rows)
    }

    useEffect(() => {
        fetchGoogleSheetRows();
    },[]);

    return [googleSheetRows];
}

export default useGoogleSheet;

 

worksheet ID값도 넣어준다.

// src/App.tsx

const App = () => {

    const [data] = useGoogleSheet(worksheet ID 값 넣는곳);
    const languageList = ['아이디','설명'];

    return (
        <div>
            {data.map((row) => {
                return (<div>아이디: {row[languageList[0]]}, 설명: {row[languageList[1]]}</div>);
            })}
        </div>
    )

}

export default App;

 

React를 실행하면 정상적으로 받아오는 것을 확인할 수 있다.

React 결과 값

 


Refereneces

thenewstack 사이트 - https://thenewstack.io/how-to-use-google-sheets-as-a-database-with-react-and-ssr

반응형
저작자표시 동일조건 (새창열림)
'React' 카테고리의 다른 글
  • [React] ChatGPT와 구글 스프레드 시트를 이용한 i18n작업
  • [React] Module not found: Can't resolve 'http2' in ~
SooJae
SooJae
코드는 효율적으로, 공부는 비효율적으로
    반응형
  • SooJae
    이수재 블로그
    SooJae
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Spring (8)
      • Next.JS (4)
      • React (3)
      • Angular (1)
      • Language (6)
        • Java (1)
        • Kotlin (1)
        • Javascript (4)
      • Keycloak (5)
      • Knowledge (16)
        • Test (4)
        • Web (9)
        • Security (2)
        • Data Structure (1)
      • Infra (9)
        • Proxmox (2)
        • AWS (0)
        • Kubernetes (3)
      • Tools (1)
        • IntelliJ (1)
      • Algorithm (2)
      • Tistory (4)
      • ETC (1)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    openAI
    GPT
    웹 마스터 도구
    test
    스프링 ai
    Next.js
    Functional Programming
    ai
    React
    티스토리챌린지
    오블완
    deepl api
    ChatGPT
    Kotlin
    springboot
    javascript
    spring ai
    keycloak
    스프링 번역
    Auth
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
SooJae
[React] 구글 스프레드 시트 API 이용하기(with google-spreadsheet)
상단으로

티스토리툴바