쓸모 쓸모연구소 · 실전 노트
제 740 호이번 주 새 글 260 편2026 · 10 · 30
바이브코딩⁠·앱 만들기
Supabase · Vercel · Codex

RAG 챗봇 만들기, Supabase 구글 로그인과 대화 저장까지

RAG 챗봇 만들기를 코덱스(Codex)로 따라 하는 순서로 정리했습니다. 이미 배포해 둔 업스테이지 챗봇에 세 가지를 붙입니다. 우리 회사 PDF를 근거로 답하는 RAG(검색 증강 생성), 구글 계정 로그인, 대화 내역 저장입니다. 코드는 코덱스가 쓰고, 구글⁠·Supabase·버셀(Vercel)을 서로 잇는 설정은 사람이 직접 합니다. 이 연결이 가장 많이 막히는 곳이라 화면 단위로 적었습니다.

RAG 챗봇 만들기, Supabase 구글 로그인과 대화 저장까지 삽화
삽화 · 쓸모연구소

RAG 챗봇이 필요한 이유

LLM(대규모 언어 모델)에는 한계가 두 가지 있습니다.

  • 학습이 끝난 시점 이후의 일을 모릅니다. 최신 모델도 지식 컷오프가 있습니다.
  • 인터넷에 없는 회사 내부 자료나 개인 정보는 처음부터 배운 적이 없습니다. 모르는 걸 그럴듯하게 지어내 답하는 현상을 할루시네이션이라고 부릅니다.

신입사원용 업무 도우미 챗봇을 떠올리면 쉽습니다. 회사 코드 스타일, 일하는 방식, 직원 연락처를 묻는 챗봇은 일반 LLM만으로는 만들 수 없습니다. 회사 자료를 찾아 모델에게 쥐여 주는 장치가 필요하고, 그게 RAG입니다. RAG를 프롬프트⁠·파인튜닝과 언제 골라 쓰는지는 "LLM 원리" 글에서 따로 다룹니다.

RAG가 움직이는 순서

RAG는 Retrieval(검색), Augmented(증강), Generation(생성)의 앞글자입니다.

  • 회사 자료(PDF, 이미지, 한글 파일 등)를 미리 잘게 나눠 데이터베이스에 넣어 둡니다.
  • 질문이 들어오면 LLM에 바로 보내지 않고, 자료에서 질문과 가장 비슷한 조각을 먼저 찾습니다.
  • 찾은 조각과 질문을 함께 LLM에 보내 답을 쓰게 합니다.

웹 검색 도구를 붙여 최신 정보를 가져오던 구조와 같습니다. 검색 대상이 인터넷 대신 우리 자료로 바뀐 것뿐입니다.

임베딩: 비슷한 것은 가까운 숫자로

"비슷한 조각"을 찾는 데 쓰는 게 임베딩입니다. 임베딩 모델은 글의 특징을 숫자 묶음(벡터)으로 바꾸는 AI로, 뜻이 비슷한 글은 가까운 숫자로, 다른 글은 먼 숫자로 바꾸도록 학습돼 있습니다. "안녕하세요"와 "하이"는 가깝고, "I'm so sad"는 멉니다. 단어를 3차원 공간에 펼쳐 보면 king 옆에 queen이 있고, 손글씨 숫자 데이터에서는 모양이 닮은 0과 6, 7과 9가 가까이 모입니다.

RAG 챗봇은 회사 자료 조각과 질문을 모두 숫자로 바꾼 뒤 거리를 재서 가장 가까운 조각을 고릅니다. 이번에는 업스테이지의 Solar 임베딩 API를 씁니다. 업스테이지 공식 문서 기준으로 새로 만들 때는 Solar Embedding 2(solar-embedding-2 계열)를 권하고, 이전 Solar Embedding 1은 2026년 12월 31일에 종료됩니다.

Supabase가 맡는 일

Supabase는 데이터베이스, 로그인, 파일 저장 같은 웹 서비스의 뒤쪽 기능을 빌려 쓰는 클라우드 서비스입니다. 이번 챗봇에서는 네 가지를 맡깁니다.

  • 임베딩 숫자를 저장하는 벡터 저장소
  • 채팅 내역을 저장하는 데이터베이스
  • 회원 가입⁠·로그인 정보와 토큰 저장
  • 업로드한 이미지⁠·PDF 같은 파일 저장

로그인은 이렇게 돌아갑니다. 사용자가 "구글로 시작하기"를 누르면 구글이 사용자 정보와 신분증 같은 토큰을 Supabase에 넘깁니다. Supabase는 이 토큰으로 누가 어떤 대화를 했는지 기록합니다.

준비물과 비용

이 절차는 업스테이지 API로 챗봇을 만들어 버셀에 배포까지 마친 상태에서 시작합니다. 그 앞 단계는 "코덱스 AI 챗봇 만들기" 글의 순서를 따릅니다.

  • 앞서 만든 챗봇 폴더(예: 바탕화면 chatbot 폴더)와 깃허브 저장소
  • 버셀에 배포된 그 챗봇. 주소는 ...vercel.app으로 끝납니다.
  • 코덱스 앱
  • 업스테이지 API 키. 앞에서 받은 키를 그대로 씁니다.
  • 구글 계정
  • 메모장. Supabase 데이터베이스 비밀번호를 적어 둡니다.
  • 챗봇이 근거로 쓸 PDF. 회사 규정집, 상품 설명서, 보험 약관처럼 텍스트가 들어 있는 PDF면 됩니다.

비용은 이렇습니다.

  • Supabase: 무료 플랜으로 충분합니다. 2026년 10월 공식 요금 안내 기준 무료 플랜은 활성 프로젝트 2개, 프로젝트당 데이터베이스 500MB, 월 활성 사용자 5만 명까지이고, 일주일 동안 쓰지 않으면 프로젝트가 일시 중지됩니다(다시 켤 수 있습니다).
  • 구글 클라우드: 구글 로그인용 OAuth 클라이언트를 만드는 절차(Supabase 공식 안내)에는 결제 단계가 없습니다. 콘솔에서 무료 체험(300달러 크레딧, 90일)을 권하면 가입해도 되는데, 이때는 카드 같은 결제 수단을 등록해야 합니다. 구글 공식 안내 기준으로 체험 중에는 청구되지 않고, 체험이 끝나도 직접 유료 계정으로 올리지 않으면 자동으로 청구되지 않습니다.
  • 코덱스: 상위 모델로 오래 작업하면 사용 한도에 걸릴 수 있습니다.

개인정보와 비밀값 관리도 미리 정해 둡니다. 구글 클라이언트 보안 비밀번호, Supabase 데이터베이스 비밀번호는 화면 캡처나 글에 올리지 않습니다. 결제 정보는 주소창이 console.cloud.google.com인 공식 화면에서만 입력합니다.

따라 하기 1. 코덱스에 Supabase MCP 설치

MCP는 AI 도구가 외부 서비스를 직접 다루게 해 주는 연결 규격입니다. Supabase MCP를 붙이면 코덱스가 테이블 만들기 같은 데이터베이스 작업을 직접 합니다.

  1. 구글에서 "Supabase MCP"를 검색해 Supabase 공식 MCP 안내 페이지(supabase.com)를 엽니다.
    • 확인: MCP 설치 방법이 적힌 페이지다.
  2. 그 페이지 주소를 복사합니다. 설치 명령을 직접 따라 쳐도 되지만, 주소를 코덱스에 넘기는 편이 쉽습니다.
  3. 코덱스에서 새 채팅을 열고 주소를 붙여 넣은 뒤, 이어서 아래 문장을 입력합니다.
    • 확인: 입력칸에 주소와 요청 문장이 함께 있다.
프롬프트
링크 참고해서 Supabase MCP 설치해 줘
  1. 모델은 가벼운 것으로, 추론 수준은 "미디엄"으로 고르고 보냅니다. 설치에는 고급 모델이 필요 없습니다.
    • 확인: 코덱스가 설치를 마쳤다고 알려 준다.
  2. 코덱스 앱을 완전히 종료했다가 다시 엽니다. MCP는 앱을 다시 켜야 목록에 나타납니다.
  3. 왼쪽 아래 프로필 > 설정으로 들어가 MCP(또는 플러그인) 항목을 엽니다.
    • 확인: 목록에 Supabase가 보인다.
  4. Supabase 항목의 인증(Authenticate) 버튼을 누릅니다.
    • 확인: 브라우저에 Supabase 로그인 창이 열린다.
  5. Supabase에 가입합니다. 깃허브 계정으로 가입하면 편하고, "Authorize Supabase"를 눌러 깃허브 연결을 허용합니다.
    • 확인: Supabase에 로그인된다.
  6. 조직(Organization) 만들기 화면에서 유형은 "Personal", 요금제는 "Free"를 고르고 "Create organization"을 누릅니다.
    • 확인: 조직이 만들어진다.
  7. 이어지는 화면에서 "Authorize Codex"를 눌러 코덱스의 접근을 허용하고, 창을 닫아도 된다는 안내가 나오면 닫습니다.
    • 확인: 코덱스 설정의 Supabase 항목이 인증된 상태로 바뀐다.

따라 하기 2. 근거 자료 폴더 만들기

  1. 챗봇 폴더(코덱스가 코드를 쓰는 폴더)를 엽니다.
    • 확인: 코덱스가 만든 코드 파일들이 보인다.
  2. 그 안에 새 폴더를 만들고 이름을 데이터셋으로 정합니다.
  3. 근거로 쓸 PDF를 데이터셋 폴더에 복사해 넣습니다.
    • 확인: 데이터셋 폴더 안에 PDF가 있다.
    • 주의: 회사 내부 자료라면 외부 AI 서비스와 클라우드에 올려도 되는지 사내 보안 정책을 먼저 확인합니다.

따라 하기 3. 구글 로그인용 OAuth 클라이언트 만들기

OAuth는 "구글 계정으로 로그인"처럼 다른 서비스의 계정으로 로그인하게 해 주는 표준 방식입니다. 3~5번 묶음은 구글 클라우드와 Supabase를 오가는 구간입니다. 순서가 한 번 꺾이니 구글 클라우드 탭을 닫지 않습니다.

  1. 브라우저에서 console.cloud.google.com(구글 클라우드 콘솔)에 구글 계정으로 들어갑니다. 처음이면 서비스 약관 동의 화면이 나옵니다.
    • 확인: 콘솔 첫 화면이 보인다. 무료 체험 가입 안내가 나오면 위 비용 항목을 보고 정한다.
  2. 위쪽 프로젝트 선택 메뉴에서 "새 프로젝트"를 만들거나 기존 프로젝트를 고릅니다.
  3. 위쪽 검색창에 Google Auth Platform을 입력하고 결과를 누릅니다.
    • 확인: Google 인증 플랫폼 화면이 열린다.
  4. "시작하기"를 누르고 앱 이름에 내 서비스 이름(예: 모두의 AI)을 넣은 뒤, 사용자 지원 이메일에서 내 구글 계정을 고르고 "다음"을 누릅니다.
  5. 대상(Audience)에서 "외부"(External)를 고르고 "다음"을 누릅니다. "내부"는 회사 구글 워크스페이스 구성원만 쓸 수 있는 설정입니다.
  6. 연락처 이메일을 넣고 "다음", 사용자 데이터 정책 동의에 체크하고 "계속", "만들기"를 차례로 누릅니다.
    • 확인: 인증 플랫폼 설정이 만들어진다.
  7. "OAuth 클라이언트 만들기"(또는 Clients > 클라이언트 만들기)를 누릅니다.
  8. 애플리케이션 유형에서 "웹 애플리케이션"을 고르고 이름에 모두의 AI처럼 넣습니다.
    • 확인: 모바일 앱, 크롬 확장 프로그램 같은 다른 유형이 아니라 웹 애플리케이션이 선택돼 있다.
  9. "승인된 자바스크립트 원본"의 "URI 추가"를 누르고, 내 버셀 주소를 붙여 넣습니다. 남의 주소가 아니라 ...vercel.app으로 끝나는 내 챗봇 주소입니다.
  10. 주소 끝의 슬래시(/)를 지웁니다. 원본 주소는 슬래시나 경로로 끝날 수 없어서 그대로 두면 오류 안내가 뜹니다.
    • 확인: 주소가 .vercel.app으로 끝난다.
  11. 아래 "승인된 리디렉션 URI"의 "URI 추가"를 눌러 빈칸만 만들어 둡니다. 여기에 넣을 값은 Supabase에서 가져와야 하니, 이 탭을 열어 둔 채 다음 묶음으로 갑니다.

따라 하기 4. Supabase 프로젝트 만들기

  1. 새 탭에서 supabase.com에 들어가 "Dashboard"를 누르고, 앞에서 만든 무료 조직을 고릅니다.
  2. "New project"를 누릅니다. 프로젝트 이름은 기본값으로 둬도 됩니다.
  3. 데이터베이스 비밀번호 칸에 나만 아는 비밀번호를 넣고, 복사해 메모장에 적어 둡니다. 다시 볼 수 없는 값이라 잊으면 재설정해야 합니다.
  4. "Create new project"를 누릅니다.
    • 확인: 프로젝트가 만들어지고 대시보드가 열린다.

따라 하기 5. 구글 로그인 켜고 세 서비스 잇기

  1. 왼쪽 메뉴에서 Authentication > Sign In / Providers를 엽니다.
    • 확인: 애플, 디스코드, 깃허브, 카카오, 구글 같은 로그인 제공자 목록이 보인다.
  2. Google 항목을 펼치고 "Enable Sign in with Google"을 켭니다.
  3. "Callback URL (for OAuth)"의 복사 버튼을 누릅니다.
    • 확인: https://(프로젝트 ID).supabase.co/auth/v1/callback 꼴의 주소가 복사된다.
  4. 구글 클라우드 탭으로 돌아가 24단계에서 만든 "승인된 리디렉션 URI" 칸에 붙여 넣고, 맨 아래 "만들기"를 누릅니다.
    • 확인: 클라이언트 ID와 클라이언트 보안 비밀번호가 나온다. 보안 비밀번호는 GOCSPX-로 시작하는 경우가 많다.
  5. 클라이언트 ID를 복사해 Supabase의 "Client IDs" 칸에 붙여 넣습니다.
  6. 클라이언트 보안 비밀번호를 복사해 Supabase의 "Client Secret" 칸에 붙여 넣고 "Save"를 누릅니다.
    • 확인: Google 항목이 켜진 상태로 저장된다. 이제 구글과 Supabase가 연결됐다.
  7. Authentication > URL Configuration을 엽니다.
  8. "Site URL" 칸의 http://localhost:3000을 지우고 내 버셀 주소를 넣은 뒤(끝의 슬래시 없이) "Save changes"를 누릅니다.
    • 확인: Site URL이 .vercel.app으로 끝난다. 버셀과 Supabase를 잇는 설정이다.
  9. "Redirect URLs"의 "Add URL"을 누르고, 내 버셀 주소 뒤에 /auth/callback을 직접 붙여 넣은 뒤 "Save URLs"를 누릅니다.
    • 확인: 목록에 https://(내 주소).vercel.app/auth/callback이 있다. 이 경로는 코덱스가 만들 코드의 로그인 처리 경로와 같아야 하니, 다음 묶음의 지시문에도 그대로 적는다.

따라 하기 6. 코덱스에 RAG 기능 만들게 하기

  1. Supabase 대시보드 위쪽의 "Connect" 버튼을 누르고 App Frameworks(Next.js) 쪽을 엽니다.
    • 확인: NEXT_PUBLIC_SUPABASE_URL과 퍼블리셔블 키(NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY) 값이 보인다.
  2. 두 값을 복사합니다. 퍼블리셔블 키는 원래 브라우저에 공개되도록 만든 키입니다. 같은 화면 근처의 비밀 키(secret, service_role)는 절대 지시문이나 NEXT_PUBLIC 변수에 넣지 않습니다.
  3. 코덱스에서 앞서 업스테이지 챗봇을 만들고 배포했던 그 대화를 엽니다. 이전 작업 맥락을 그대로 이어 쓰기 위해서입니다.
  4. 아래 지시문을 붙여 넣고, 맨 아래 두 줄의 괄호 자리를 38단계에서 복사한 내 값으로 바꿉니다.
프롬프트
지금 챗봇을 RAG 기반으로 고도화해 줘.
- 데이터셋 폴더의 PDF를 근거로 답하게 해 줘. 임베딩은 업스테이지 임베딩 API(Solar Embedding 2)를 쓰고, 임베딩 값은 Supabase에 저장해 줘.
- 처음 접속하면 서비스 소개 랜딩 페이지를 보여 주고, "구글로 시작하기" 버튼으로 Supabase 구글 로그인을 연결해 줘. 로그인 처리 경로는 /auth/callback으로 해 줘.
- 로그인한 사용자만 챗봇을 쓸 수 있게 하고, 로그아웃 버튼을 만들어 줘.
- 화면에 구글 프로필 사진과 이름을 보여 줘.
- 대화 내역은 Supabase DB에 채팅방별로 질문, 답변, 시간을 저장하고 다시 들어오면 불러와 줘.
- 대화가 저장되는 테이블에는 RLS를 켜서 사용자가 자기 대화만 볼 수 있게 해 줘.
- 답할 때 참고한 문서 이름과 페이지를 함께 보여 줘.
- Supabase 작업은 연결된 Supabase MCP로 해 줘.
NEXT_PUBLIC_SUPABASE_URL=(내 Supabase URL)
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=(내 퍼블리셔블 키)
  1. 모델은 GPT-6 아스트라처럼 쓸 수 있는 가장 좋은 모델, 추론 수준은 "엑스트라 하이"로 고르고 보냅니다.
    • 확인: 에이전트가 작업을 시작한다.
  2. 코드 작성이 끝날 때까지 기다립니다. 한 사례에서는 23분 넘게 작업하다 사용 한도에 걸려 멈췄고, 한도가 초기화된 뒤 "이어서 작업해"라고 보내자 9분 50초가량 더 작업해 마쳤습니다.
    • 확인: RAG 답변, 구글 로그인, 대화 저장 코드를 다 썼다는 안내가 나온다.

RLS(Row Level Security)는 데이터베이스 표의 줄마다 누가 읽고 쓸 수 있는지 거는 자물쇠입니다. 브라우저에 공개되는 퍼블리셔블 키로 데이터베이스에 바로 붙는 구조에서는 RLS가 꺼져 있으면 남의 대화까지 열릴 수 있습니다. 왜 그런지는 "바이브코딩 프론트엔드 개념" 글에서 자세히 다룹니다.

따라 하기 7. 깃허브에 올리고 버셀에 다시 배포하기

  1. 같은 대화에 아래 문장을 보냅니다.
    • 확인: 입력칸에 두 가지 요청이 함께 들어 있다.
프롬프트
깃에 코드 다시 올리고 Vercel 환경 변수 어떻게 작성해야 되는지 정리해 줘
  1. 모델은 그대로 두고 추론 수준은 "라이트"로 낮춥니다. 올리기와 정리에는 높은 추론이 필요 없습니다.
    • 확인: 깃허브에 올렸다는 답과 함께 넣어야 할 환경 변수 목록이 나온다.
  2. 깃허브의 챗봇 저장소를 엽니다.
    • 확인: 방금 올린 업데이트가 새로 찍혀 있다.
  3. 버셀에서 프로젝트를 열고 "Deployments"를 봅니다.
    • 확인: 새 배포가 진행 중이거나 실패(또는 막힘) 표시가 있다. 내 컴퓨터의 .env.local 값은 깃허브에 올라가지 않으니, 새 변수를 넣기 전에는 배포가 실패하는 게 정상이다.
  4. 버셀 프로젝트의 Settings > Environment Variables를 엽니다.
  5. 코덱스가 알려 준 목록과 비교해 아직 없는 변수를 찾습니다. 앞 단계에서 넣어 둔 업스테이지 키 같은 변수는 이미 있을 수 있습니다.
  6. NEXT_PUBLIC_SUPABASE_URL과 그 값을 추가합니다.
  7. NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY(또는 코덱스가 알려 준 이름)와 그 값을 추가하고 "Save"를 누릅니다.
    • 확인: 두 변수가 목록에 보인다. 노란 경고가 뜨면 내용을 읽고 화면 안내에 따라 확인한 뒤 저장한다.
  8. "Deployments"에서 가장 최근 배포의 더보기 버튼 > "Redeploy"를 누릅니다. 환경 변수는 새로 배포한 뒤부터 적용됩니다.
    • 확인: 재배포가 끝나고 배포 상태가 Ready로 바뀐다.
  9. 배포 항목을 눌러 주소를 엽니다.
    • 확인: 내 챗봇 사이트가 열린다.

따라 하기 8. 제대로 되는지 확인하기

  1. 첫 화면을 봅니다.
    • 확인: 서비스 이름과 설명이 있는 랜딩 페이지가 보인다.
  2. "구글로 시작하기"를 눌러 내 구글 계정으로 로그인합니다.
    • 확인: 챗봇 화면이 열리고 내 프로필 사진, 이름, 로그아웃 버튼이 보인다.
  3. 로그아웃했다가 다시 로그인합니다.
    • 확인: 랜딩 페이지로 갔다가 다시 챗봇 화면으로 들어온다.
  4. 안녕을 보냅니다.
    • 확인: "안녕하세요. 무엇을 도와드릴까요?" 같은 짧은 답이 나온다.
  5. 넣어 둔 PDF에 있는 내용을 물어봅니다. 보험 약관을 넣었다면 이런 식입니다.
프롬프트
펫보험 약관에서 슬관절 탈구의 면책 기간은 몇 년으로 되어 있나요?
  1. 답을 확인합니다.
    • 확인: 약관에 적힌 기간, 근거가 된 문서 이름과 페이지, 질문 시간이 함께 나온다. 근거 페이지를 PDF에서 직접 열어 답이 맞는지 한 번은 대조한다.
  2. 로그아웃 뒤 다시 로그인합니다.
    • 확인: 방금 한 대화가 목록에 그대로 남아 있다.
  3. Supabase로 돌아가 왼쪽 "Table Editor"를 엽니다. 테이블 이름은 코덱스가 정하므로 사람마다 다를 수 있습니다.
  4. chat으로 시작하는 테이블을 엽니다.
    • 확인: 방금 한 질문과 답변이 줄마다 저장돼 있다.
  5. documents 계열 테이블을 엽니다.
    • 확인: PDF 이름, 페이지 수, 사용한 임베딩 모델 정보가 보인다.
  6. document_chunks 계열 테이블을 엽니다.
    • 확인: PDF 내용이 조각(청크)으로 나뉘어 있고, 조각마다 0.06… 같은 숫자 묶음(임베딩)이 붙어 있다.
  7. Table Editor에서 대화 테이블 이름 옆에 RLS가 켜져 있는지 봅니다.
    • 확인: RLS enabled(또는 자물쇠) 표시가 있다. 꺼져 있으면 코덱스에게 "대화 테이블에 RLS를 켜고 본인 대화만 읽고 쓰게 정책을 만들어 줘"라고 보낸다.

RAG 챗봇이 막힐 때

버셀 배포가 실패하거나 막혔다

새로 필요한 환경 변수를 넣지 않은 경우가 대부분입니다. Supabase URL과 퍼블리셔블 키를 Environment Variables에 넣고 Redeploy합니다. 그래도 실패하면 빌드 기록의 빨간 오류 줄을 코덱스에 붙여 넣습니다.

구글 클라우드에 주소를 넣을 때 오류가 난다

"승인된 자바스크립트 원본"은 슬래시나 경로 없이 https://(내 주소).vercel.app까지만 넣습니다. 리디렉션 URI 칸에는 Supabase의 Callback URL을 그대로 넣습니다. 두 칸을 바꿔 넣지 않았는지도 봅니다.

로그인 뒤 localhost로 돌아간다

Supabase URL Configuration의 Site URL이 아직 localhost:3000이거나, Redirect URLs에 /auth/callback 주소가 빠진 경우입니다. 36~37단계를 다시 봅니다.

코덱스 작업이 중간에 멈췄다

상위 모델로 오래 작업하다 사용 한도에 걸린 경우가 많습니다. 한도가 초기화된 뒤 같은 대화에 "이어서 작업해"라고 보내면 하던 일을 이어 갑니다.

코덱스에서 Supabase MCP가 안 보인다

설치 뒤 앱을 다시 시작하지 않았을 가능성이 큽니다. 앱을 완전히 종료하고 다시 연 뒤 설정의 MCP 항목을 봅니다.

한동안 안 썼더니 챗봇이 대화를 못 불러온다

무료 플랜 Supabase 프로젝트는 일주일 동안 쓰지 않으면 일시 중지됩니다. Supabase 대시보드에서 프로젝트를 다시 켭니다(Restore).

끝까지 따라 하면 남는 것

  • 코덱스에 Supabase MCP가 설치되고 인증이 끝났다.
  • 챗봇 폴더에 데이터셋 폴더와 PDF가 있다.
  • 구글 클라우드에 웹 애플리케이션 OAuth 클라이언트가 있다.
  • Supabase에서 Google 로그인이 켜져 있고 Client ID·Secret이 들어 있다.
  • Supabase Site URL과 Redirect URLs에 내 버셀 주소가 들어 있다.
  • 버셀 환경 변수에 Supabase URL·퍼블리셔블 키가 있고 재배포가 끝났다.
  • 랜딩 페이지와 "구글로 시작하기"가 동작하고, 다시 로그인해도 대화가 남는다.
  • PDF 내용을 물으면 근거 문서와 페이지가 함께 나온다.
  • Supabase 테이블에 대화와 문서 조각이 저장돼 있고, 대화 테이블에 RLS가 켜져 있다.

자주 묻는 질문

RAG 챗봇과 일반 챗봇은 무엇이 다른가요?

일반 챗봇은 모델이 학습한 지식만으로 답합니다. RAG 챗봇은 질문과 가장 비슷한 회사 자료 조각을 먼저 찾아 모델에게 함께 넘기므로, 인터넷에 없는 내부 자료로도 답하고 근거 페이지를 보여 줄 수 있습니다.

구글 로그인을 붙이려면 구글 클라우드에 결제 정보를 넣어야 하나요?

Supabase 공식 안내의 구글 로그인 설정 절차에는 결제 단계가 없습니다. 구글 클라우드 무료 체험(300달러, 90일)에 가입할 때만 결제 수단을 등록하며, 구글 안내 기준으로 체험이 끝나도 직접 유료로 올리지 않으면 청구되지 않습니다.

Supabase 퍼블리셔블 키는 공개돼도 괜찮나요?

퍼블리셔블 키는 원래 브라우저 코드에 들어가도록 만든 공개용 키라 노출 자체는 정상입니다. 대신 테이블에 RLS를 켜고 정책을 걸어야 남의 데이터가 열리지 않습니다. 비밀 키(secret, service_role)는 절대 브라우저 코드나 NEXT_PUBLIC 변수에 넣지 않습니다.

Supabase 무료 플랜으로 충분한가요?

연습과 소규모 사내 챗봇에는 충분합니다. 2026년 10월 기준 무료 플랜은 활성 프로젝트 2개, 프로젝트당 DB 500MB, 월 활성 사용자 5만 명까지이고 일주일 미사용 시 일시 중지됩니다. 실제 서비스로 쓰려면 유료 플랜 조건을 공식 요금 안내에서 확인합니다.

이 글의 본문은 아래 원본 유튜브 영상의 내용을 바탕으로 쓸모연구소가 다시 정리해 쓴 것입니다. 세부 내용과 최신 정보는 원본 영상과 공식 안내에서 확인해 주세요.

원본 영상 보러가기 ↗