구글 스프레드시트는 강력한 데이터 분석 및 자동화 도구로, 다양한 기능을 활용하여 업무 효율을 극대화할 수 있습니다. 그런데 여기에 ChatGPT를 결합하면, 더욱 강력한 자동화 및 데이터 분석이 가능하다는 사실, 알고 계셨나요?

이번 글에서는 Google Apps Script를 활용하여 ChatGPT API를 호출하는 사용자 정의 함수(커스텀 함수) 를 만들어보겠습니다. 이를 통해 스프레드시트에서 직접 AI를 활용하여 텍스트 생성, 데이터 요약, 번역 등 다양한 작업을 수행할 수 있습니다. 간단한 코드 몇 줄만으로 생성형 AI의 강력한 기능을 스프레드시트에 접목할 수 있는 방법을 차근차근 살펴보겠습니다.

 

  • ChatGPT의 API키가 필요합니다. 사용 시 비용이 청구됩니다.

 

구글 스프레드시트란?

구글 스프레드시트(Google Sheets)는 구글이 제공하는 온라인 스프레드시트 프로그램입니다. 엑셀과 비슷하지만, 웹 브라우저에서 실행되며 자동 저장, 실시간 협업, 클라우드 저장 등의 기능을 제공합니다. 별도의 설치 없이 사용할 수 있으며, 다른 구글 서비스(Google Drive, Google Apps Script 등)와 쉽게 연동할 수 있어 데이터 관리와 자동화에 유용합니다.

 

장점

 

  • 실시간 협업 – 여러 사용자가 동시에 편집 가능하며 변경 사항이 자동 저장됨.
  • 클라우드 기반 – 인터넷만 연결되면 어디서든 접근 가능하고, 데이터가 안전하게 보관됨.
  • 확장성과 자동화 – Google Apps Script를 이용해 다양한 기능 추가 및 자동화 가능.

단점

 

  • 대용량 데이터 처리 제한 – 엑셀에 비해 행 개수(약 1,000만 개) 및 처리 속도가 제한됨.
  • 고급 기능 부족 – 일부 엑셀의 고급 기능(피벗 테이블 고급 옵션, 매크로 등)이 제한적임.
  • 인터넷 연결 필수 – 기본적으로 온라인에서 작동하며, 오프라인 기능이 제한적임.

구글 App Script란?

 

Google Apps Script(GAS) 는 구글이 제공하는 스크립트 언어로, 자바스크립트를 기반으로 합니다. 이를 사용하면 구글 워크스페이스(Google Sheets, Docs, Gmail, Drive 등)와 자동화, 연동 작업을 쉽게 수행할 수 있습니다.

예를 들어, Google 스프레드시트에서 반복 작업을 자동화하거나, 외부 API와 데이터를 주고받는 기능을 만들 수 있습니다. 코드 실행 환경이 클라우드 기반이므로 별도의 설치 없이 브라우저에서 바로 사용 가능하며, 간단한 몇 줄의 코드만으로 강력한 자동화를 구현할 수 있습니다.

 

 


 

그렇다면 스프레드시트에서 ChatGPT는 어떻게?

App Script에서 커스텀 함수를 만들 수 있습니다. 함수에서 ChatGPT API를 호출하여 기능을 사용할 수 있습니다.

 

 

1. 스프레드시트에 접속합니다.

2. 확장 프로그램 -> App Script를 선택합니다.

 

3. 스크립트에 코드를 입력해주면 완성!

 

 


 

위와 같이 매우 간단한 방법으로 커스텀 함수 만들 수 있습니다!

다만, 저는 js나 gs에 대한 지식이 없기에 ChatGPT와 함께 코드를 만들어 보았습니다.

 

아래는 완성된 코드입니다.

function CallGPT(prompt, temperature=0, model="gpt-3.5-turbo") {
  var apiKey = "OpenAI API-Key"; // OpenAI API 키 입력
  var url = "https://api.openai.com/v1/chat/completions";

  var payload = {
    model: model,
    messages: [{ role: "system", content: "당신은 텍스트에서 핵심 단어를 정확하게 분석하는 전문가입니다." },
               { role: "user", content: prompt }],
    temperature: temperature,
    max_tokens: 20
  };

  var options = {
    method: "post",
    headers: {
      "Authorization": "Bearer " + apiKey,
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  var maxRetries = 5;  // 최대 재시도 횟수
  var delayMs = 2000;  // 2초 대기 후 재시도
  var response, responseCode;

  for (var i = 0; i < maxRetries; i++) {
    response = UrlFetchApp.fetch(url, options);
    responseCode = response.getResponseCode();

    if (responseCode !== 429) {
      break; // 429가 아니면 정상 응답 → 루프 종료
    }

    Logger.log("429 오류 발생, " + delayMs / 1000 + "초 후 재시도...");
    Utilities.sleep(delayMs); // 대기 후 다시 요청
    delayMs *= 2; // 점진적 대기 (2초 → 4초 → 8초 ...)
  }

  Logger.log("최종 HTTP 응답 코드: " + responseCode);
  var responseText = response.getContentText();
  Logger.log("API 응답 내용: " + responseText);

  if (responseCode === 429) {
    return "⚠️ 429 오류: 요청이 너무 많습니다. 잠시 후 다시 시도하세요.";
  }

  var json = JSON.parse(responseText);
  if (!json || !json.choices || json.choices.length === 0) {
    return "⚠️ OpenAI 응답 오류: 데이터를 가져올 수 없습니다.";
  }

  return json.choices[0].message.content.trim();
}

 

저는 만족도 설문에서 핵심 단어를 추출하는 함수를 만들었습니다.

사용을 위해 필요한 부분만 설명하도록 하겠습니다.

 

  • function CallGPT(prompt, temperature=0, model="gpt-3.5-turbo")
    • 함수명을 CallGPT로 지정한 것입니다. 스프레드시트에서 =CallGPT로 호출할 수 있습니다.
    • prompt는 말 그대로 지시할 문장입니다. 사용하실 때 원하시는 문구를 입력하시면 됩니다.
    • temperature는 창의성을 뜻하는 경우가 많습니다. 0에 가까울수록 딱딱한 답변을 뱉으며 1에 가까울수록 자유분방한 문장을 구사합니다. 해당 함수에선 아무런 값을 입력하지 않는다면 0으로 설정하겠다라는 기본값 설정이 되어있습니다.
    • model은 사용할 모델입니다. 아무런 입력값을 주지 않는다면 gpt-3.5-turbo를 사용하겠다는 의미입니다. 원하시는 모델명을 입력하시면 됩니다. 모델명과 가격표는 아래 사진으로 첨부합니다.

출처 : https://platform.openai.com/docs/pricing

 

 

  • var apiKey
    • OpenAI API 키를 넣어주는 곳입니다.
    • OpenAI에서 발급받은 후 입력해주세요. 발급 방법은 아래의 링크를 참고해주세요.
    • *API키는 매우 조심히 보관하셔야 합니다! 
    • OpenAI API키 발급방법

 

 

  • messages의 role : system
    • 해당 부분은 많은 경우에 역할을 지정하는데 사용됩니다. 해당 함수에선 텍스트의 핵심 단어를 분석하는 전문가로 지정하였습니다.
  • max_tokens
    • 출력값의 최대 길이입니다. 수가 클 수록 더욱 긴 답변을 출력할 수 있습니다.

 

그 외에는 에러처리에 대한 예외처리가 대부분이기에 따로 설명하지 않겠습니다.

js지식이 풍부하신 분들은 직접 수정해보셔도 너무 좋을 듯 합니다.


 

스프레드시트에서 직접 사용해보기

아래 사진과 같은 방법으로 프롬프트를 지정하시면 됩니다.

 

 

결과는 아래처럼 나왔습니다.

 

 


 

 

생각보다 사용방법이 매우 쉽죠?

해당 글에서는 매우 간단한 프롬프트를 이용하여 추출하였지만 짜임새있는 시스템 프롬프트와 쿼리를 입력해준다면 무궁무진한 가능성을 지니고 있다고 생각합니다.

여러분들도 마음껏 써보시고 후기를 들려주세요!

 

OpenAI의 API를 사용하려면 API 키가 필요합니다. 이 키를 발급받으면 ChatGPT, DALL·E, Whisper 등 OpenAI에서 제공하는 다양한 AI 모델을 사용할 수 있습니다. 아래 단계에 따라 API 키를 쉽게 발급받을 수 있습니다.


 

1. OpenAI 홈페이지 접속 (https://openai.com/)

 

2. 계정이 있다면 로그인합니다. 없으시다면 OpenAI에 가입합니다.

3. 로그인 후 https://platform.openai.com/account/api-keys 로 이동합니다.

4. 우측 상단의 + Create new secret key를 눌러 새로운 API key를 생성합니다. Name은 편한 인식명으로 입력하시면 됩니다. 기능에 영향을 주지 않습니다.

5. 생성된 API키를 저장해주세요! 잃어버리시면 다시 찾을 수 없습니다.

 

6. 이제 자유롭게 API를 이용하시면 됩니다!


API 키 보안 주의사항

  • API 키는 외부에 노출되지 않도록 주의해야 합니다.
  • 깃허브(GitHub)나 공개 저장소에 키를 업로드하지 않도록 조심하세요.
  • 키를 잃어버렸다면 새로운 키를 생성하고, 기존 키를 삭제하는 것이 좋습니다.

 

이제 OpenAI API 키 발급이 완료되었습니다! 이 키를 활용해 다양한 곳에서 OpenAI의 AI 기능을 사용할 수 있습니다.

사용하시려면 크레딧을 충전해야합니다! 충전해서 마음껏 사용해주세요!

 

 

요즘 AI기술은 너무나도 빠른 속도로 발전하고 있습니다. 이런 시대의 흐름에 편승하기 위해 기초적인 지식에 대해 습득하고자 합니다. 이번 글에서는 RAG(Retrieval-Augmented Generation, 검색 증강 생성)에 대해 주로 알아볼 예정이며 Fine-Tuning과의 비교를 하고자 합니다.


Fine-Tuning이란?

Fine-Tuning은 이미 학습된 대규모 언어 모델(LLM, Large Language Model)을 특정 작업에 맞게 조정하는 과정입니다. 이 과정에서는 새로운 데이터를 추가적으로 학습시켜, 기존 모델이 다루지 못했던 특정 도메인이나 작업에 대한 성능을 향상시킵니다. Fine-Tuning의 장·단점은 다음과 같습니다.

  1. 장점
    1. 도메인 특화 모델을 만들 수 있다.
    2. 최신의 지식을 습득할 수 있다.
  2. 단점
    1. 비싸다.
    2. 어렵다.
    3. 데이터 의존적이다.
    4. 확장성이 적다.

위의 장·단점에서 이야기하듯 우리만의 도메인 특화 모델을 만든다는 것은 매우 큰 장점입니다. 특히나 의료, 법률 등 일반 사람들이 접근하기 어려운 부분은 특히나 그러하지만 단점도 동시에 존재합니다. 일단 가장 큰 단점은 너무 비싸고, 너무 어렵다는 점입니다.

출처 : https://medium.com/@maciej.tatarek93/costs-and-benefits-of-your-own-llm-79f58c0eb47f

 

2023년의 GPT에 대한 Fine-Tuning 테이블입니다.

물론 현재로서는 기술이 많이 좋아져 2~7B의 LLM이면 충분한 성능을 보여준다고 하니 해당 테이블로 가볍게 계산해본다면 

2.7B = $6,000 → 880만원 (환율 1467원 기준)

6.7B = $30,000 → 4400만원 (환율 1467원 기준)

정도 됩니다.

또한, Fine-Tuning을 위해서 이용되는 기술들 또한 어렵고, 복잡한 기술이 많고 주로 사용되는 기술은 클라우드, 분산 학습, 경량화, 양자화 등 각각이 하나의 분야를 이룰만큼 복잡한 기술들인데 이를 할 줄 아는 기술자를 구하는 것도 매우 힘듭니다.

2025년에 이르러서는 점점 가격은 낮아지고 방법은 간편해지겠지만 여전히 어려운 부분이 많기에 대기업이 아닌 기업에서는 택하기가 쉽지 않은 것이 현실인 것으로 보여집니다.

또한, 도메인 특화 모델이다보니 범용성이 많이 떨어지는 경우도 생기고 데이터의 보안 문제, LLM의 환각현상 등이 발생하면서 RAG라는 개념이 대두되기 시작했습니다.


RAG란?

RAG란 Retrieval-Augmented Generation의 약자로 한글로 해석하자면 검색 증강 생성이라고 이야기할 수 있습니다. 기존의 LLM들은 굉장히 방대한 양의 데이터를 학습하고 학습한 데이터를 기반으로 우리에게 답변을 생성해 주었고 저의 경우 이를 Parametric Memory를 이용한 응답이라고 이야기합니다. 그러나 RAG는 외부 지식을 이용한 방법으로 이미 LLM은 충분한 양의 지식을 가지고 있고 추가적인 정보만 제공한다면 더욱 훌륭한 성능을 낼 수 있다고 이야기하는 방법론이라고 할 수 있습니다. 저의 경우에 있어서는 이를 Non-Parametric Memory를 이용한 응답이라고 주로 표현합니다.

출처 : https://arxiv.org/abs/2403.10131, RAFT: Adapting Language Model to Domain Specific RAG

위의 그림이 RAG를 가장 손쉽게 이야기하는 그림이 아닐까 싶은데요. query는 우리의 질문, 로봇이 LLM, 뇌가 Parametric Memory, 책이 외부 지식 즉, Non-Parametric Memory를 뜻하며 이러한 외부 지식을 이용하는 방법으로 얻을 수 있는 장·단점 은 다음과 같습니다.

  1. 장점
    1. 지식을 습득하기 쉽다.
    2. 출처를 명확히 제시할 수 있다.
    3. 보안 수준이 높다.
  2. 단점
    1. 높은 퀄리티의 문서가 필요하다.
    2. 문서 관리가 수시로 필요하다.

장·단점에서 볼 수 있듯이 어느 지식이던 쉽게 습득하기 좋다는 점이 가장 큰 장점이라고 할 수 있습니다. 문서만 존재한다면, 그것을 참고문헌으로 주어 답변할 수 있고 최신의 지식 또한 손쉽게 습득 가능하며 그리고 출처를 명확히 할 수 있기에 환각현상도 완화시킬 수 있게됩니다.

그러나 이러한 장점에도 불구하고 단점도 여전히 존재합니다. 높은 퀄리티의 문서가 필요하나 이를 구하는 것이 매우 어려운 편에 속하며 특히나 도메인에 특화된 문서일수록 더더욱 그렇다고 할 수 있습니다. 또한, 문서관리가 필요하고 RAG의 핵심 기술인 임베딩 관리가 요구됩니다.

 

두 방법 모두 분명한  장·단점이 분명하게 존재하고 그래서 어느 것이 좋다던가 혹은 서로 비교를 한다던가 하는 부분은 이제는 크게 중요하지 않다고 생각합니다. 두 방법 모두 적절하게 사용하는 것이 적절할 것입니다.


출처 : https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag

 

 

 

위의 사진이 전체적인 RAG의 과정을 단순하게 표현한 도식입니다. 해당 그림에서 Retriever, Data Source 부분이 매우 중요한데 이 부분을 리트리버와 벡터스토어라고 주로 표현한며 이는 RAG에 있어서 매우 중요한 부분이기에 이에 대해서는 다음 글에서 이어 다루도록 하겠습니다.

 

추가적으로 RAG에 대한 소개영상이 필요하다면 아래의 유튜브 영상을 매우 추천합니다!

 

https://youtu.be/T-D1OfcDW1M?si=kmvaCJnphOwaZPPm

+ Recent posts