Never give up

Node - appending row to Google spread sheet 본문

WEB

Node - appending row to Google spread sheet

대기만성 개발자 2025. 9. 16. 16:17
반응형

최근에

1. aws s3에 업로드 되는 파일이 보기 편하면 좋겠다(링크, 날짜, 해당 파일 정보)

2. 에러 발생시 에러대응 가능하도록 트래킹 할수있게 해달라

라는 요구를 받아서 비개발자가 보기에 가장 편한방식이 뭐가 있을까 고민해봤습니다

 

먼저 개발진행된 상황으로는

1. 특정 pc에만 배포되어있는 react, node

2. 외부 서버 없음

3. 해당 pc는 유저들이 사용하는 pc

 

그래서 고민해봤던게 2가지로

slack을 사용하는 환경으로 webhook추가(빠른 알람 및 대응)

google spread sheet를 사용해 줄추가를 해보게 됐습니다

 

webhook은 url이랑 data약속만 지키면 되니 건너뛰고 예제를 만들어봤습니다

(사실 대부분이 url이랑 약속만 잘지키면 됩..)

export const appendToGoogleSheet = async ({
  state,
  songInfo,
  uuid,
}: {
  state: number;
  songInfo?: string[];
  uuid: string;
}) => {
  try {
    const client = (await auth.getClient()) as any;
    const sheets = google.sheets({ version: "v4", auth: client });

    const s3Link = process.env.S3_BUCKET_FOLDER + uuid + "/";

    let values: string[][];
    let range: string;

    if (state === MEDIA_STATE.error) {
      values = [[s3Link, getCurrentDate()]];
      range = getRange("error", values[0].length);
    } else {
      values = [[...songInfo!, s3Link, getCurrentDate()]];
      range = getRange("log", values[0].length);
    }

    await sheets.spreadsheets.values.append({
      spreadsheetId: SPREADSHEET_ID,
      range,
      valueInputOption: "RAW",
      requestBody: {
        values,
      },
    });
  } catch (err) {
    logger.error(`[google] error: ${getErrMsg(err)}`);
  }
};

const getRange = (sheet: string, columnCount: number) => {
  const lastColumn = String.fromCharCode("A".charCodeAt(0) + columnCount - 1);
  return `${sheet}!A:${lastColumn}`;
};

google api를 사용하다보니 서비스계정이 필요하고

 

api 설정, 편집자 등록 후 GoogleAuth를 콜해서 인증을 해줍니다

 

그리고 values에 넣을 데이터를 적어줍니다

 

이후 range에 "sheet name!첫번째행:마지막행"으로 적어주시면 됩니다

 

작업 후 확인해보면 정상적으로 작동되는데, 한가지 아쉬움이 있다면

 

최신 데이터를 맨 위로 쌓는 기능은 제공하지 않더군요

반응형
Comments