📊 Google Sheets 연동 가이드

인 다이렉트 카보험 직원 전산 → Google Sheets 실시간 연동 설정 (약 10분 소요)

① Sheets 생성
② Apps Script
③ 웹 앱 배포
④ URL 등록
⑤ 테스트
📋 STEP 1 — Google Sheets 새 시트 만들기
1

새 스프레드시트 생성

아래 버튼을 클릭하면 새 Google Sheets가 열립니다.

🔗 sheets.new 열기
💡 Google 계정으로 로그인이 필요합니다. Gmail 계정을 사용하세요.
2

스프레드시트 이름 변경 (권장)

좌측 상단의 "제목 없는 스프레드시트" 클릭 → 인다이렉트카보험_DB 로 변경

⚠️ 시트 탭 이름은 변경하지 마세요. 연동 코드에서 고객관리 / 계약관리 / 접속로그 탭을 자동 생성합니다.
3

스프레드시트 URL에서 ID 복사 (나중에 필요)

주소창 URL에서 /d/ 뒤에 있는 문자열이 Sheets ID입니다.

https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit
                                                   ↑ 이 부분이 Sheets ID
ℹ️ 이 ID는 staff-settings.html의 "Google Sheets ID" 입력란에 사용됩니다 (선택사항).
⚙️ STEP 2 — Apps Script 코드 설치
1

Apps Script 열기

스프레드시트 상단 메뉴에서:

  1. 확장 프로그램 클릭
  2. Apps Script 클릭

→ 새 탭에 Apps Script 편집기가 열립니다.

2

기존 코드 삭제 후 아래 코드 붙여넣기

Code.gs 탭의 내용을 전체 선택(Ctrl+A)하고 삭제한 뒤, 아래 버튼으로 복사한 코드를 붙여넣으세요.

function doPost(e) {
  try {
    var data = JSON.parse(e.postData.contents);
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName(data.sheet);

    // 시트 없으면 자동 생성 + 헤더 추가
    if (!sheet) {
      sheet = ss.insertSheet(data.sheet);
      var headers = getHeaders(data.sheet);
      if (headers.length) {
        sheet.appendRow(headers);
        sheet.getRange(1, 1, 1, headers.length)
             .setBackground('#1B5E20')
             .setFontColor('#FFFFFF')
             .setFontWeight('bold');
        sheet.setFrozenRows(1);
      }
    }

    if (data.action === 'append') {
      // 새 행 추가
      sheet.appendRow(data.row);

    } else if (data.action === 'upsert') {
      // 기존 행 업데이트 또는 새 행 추가
      var colIdx = (data.keyCol || 'A').charCodeAt(0) - 64;
      var key = String(data.keyVal);
      var lastRow = sheet.getLastRow();
      var found = false;
      for (var i = 2; i <= lastRow; i++) {
        if (String(sheet.getRange(i, colIdx).getValue()) === key) {
          sheet.getRange(i, 1, 1, data.row.length).setValues([data.row]);
          found = true;
          break;
        }
      }
      if (!found) sheet.appendRow(data.row);

    } else if (data.action === 'ping') {
      return ContentService
        .createTextOutput(JSON.stringify({ status: 'pong', service: '인다이렉트카보험' }))
        .setMimeType(ContentService.MimeType.JSON);
    }

    return ContentService
      .createTextOutput(JSON.stringify({ status: 'ok' }))
      .setMimeType(ContentService.MimeType.JSON);

  } catch (err) {
    return ContentService
      .createTextOutput(JSON.stringify({ status: 'error', msg: err.message }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

function doGet(e) {
  return ContentService
    .createTextOutput(JSON.stringify({ status: 'pong', service: '인다이렉트카보험' }))
    .setMimeType(ContentService.MimeType.JSON);
}

// 시트별 헤더 정의
function getHeaders(sheetName) {
  var headers = {
    '고객관리': [
      'ID', '작업', '처리일시', '처리직원', '직원ID',
      '고객명', '연락처', '이메일', '성별', '출생연도',
      '주소', '차량번호', '차종', '보험사', '개시일', '만기일',
      '보험료', '계약유형', '소개자', '은행계좌', '카드번호',
      '상태', '가입일', '담당직원', '특이사항'
    ],
    '계약관리': [
      'ID', '작업', '처리일시', '처리직원', '직원ID',
      '차량번호', '차종', '보험사', '피보험자', '피보험자연락처',
      '계약자', '계약자연락처', '개시일', '만기일', '보험료',
      '갱신상태', '계약유형', '소개자', '담당직원', '메모'
    ],
    '접속로그': [
      '접속일시', '직원ID', '직원명', '역할', 'IP주소', 'UserAgent'
    ]
  };
  return headers[sheetName] || [];
}
3

저장

Ctrl + S (Mac: Cmd+S) 또는 💾 버튼 클릭으로 저장

🚀 STEP 3 — 웹 앱으로 배포
1

배포 메뉴 열기

Apps Script 편집기 우측 상단 → 배포새 배포

2

배포 설정

아래와 같이 설정하세요:

설정 항목 선택값
유형 선택 웹 앱 선택
다음 사용자로 실행 (내 Google 계정으로 실행)
액세스 권한 모든 사용자 (익명 포함)
⚠️ "액세스 권한: 모든 사용자" 를 반드시 선택해야 합니다.
그렇지 않으면 직원 전산에서 데이터를 전송할 수 없습니다.
3

권한 허용

배포 클릭 → "권한 허용" → Google 계정 선택 → "고급" 클릭 → "안전하지 않은 페이지로 이동" 클릭 → "허용"

💡 "안전하지 않은 앱" 경고가 나와도 정상입니다. 내가 직접 만든 앱이므로 허용해 주세요.
4

배포 URL 복사

배포 완료 후 표시되는 "웹 앱 URL"을 복사하세요.

https://script.google.com/macros/s/AKfycbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec
                                           ↑ 이 부분이 배포 ID
⚠️ 코드를 수정하면 반드시 새 배포를 다시 생성해야 합니다.
기존 URL은 이전 버전 코드를 실행합니다.
🔗 STEP 4 — 직원 전산에 URL 등록
1

시스템 설정 페이지 이동

직원 전산 → ⚙️ 시스템 설정 또는 아래 링크:

⚙️ 시스템 설정 열기
2

Apps Script URL 붙여넣기

📊 Google Sheets 연동 섹션에서:

  1. "Apps Script 웹 앱 URL" 입력란에 복사한 URL 붙여넣기
  2. 자동 동기화 주기: 1분 선택 (기본값)
  3. "💾 URL 저장" 버튼 클릭
STEP 5 — 연결 테스트
1

아래에서 직접 연결 테스트

배포 URL을 붙여넣고 테스트 버튼을 클릭하세요.

2

시스템 설정에서도 테스트

⚙️ 시스템 설정Google Sheets 연동"🔗 연결 테스트" 버튼 클릭

✅ 테스트 성공 시 Google Sheets에 고객관리, 계약관리, 접속로그 탭이 자동으로 생성됩니다.
🔗 직원별 전용 접속 URL

각 직원에게 아래 URL을 카카오톡 또는 문자로 공유하세요. 클릭하면 아이디가 자동 입력됩니다.

💡 URL 구조: https://carbotapp.com/staff-login.html?id=직원ID
직원이 링크를 클릭하면 아이디가 자동으로 입력되고, 비밀번호만 입력하면 됩니다.
⚠️ 직원이 추가되거나 아이디가 변경되면 ⚙️ 시스템 설정 → 직원 관리에서 확인 후 새 URL을 공유하세요.
📡 데이터 흐름 안내
작업 기록 시트 기록 시점
✅ 직원 로그인 접속로그 로그인 성공 즉시
➕ 고객 신규 등록 고객관리 등록 저장 즉시
✏️ 고객 정보 수정 고객관리 수정 저장 즉시 (기존 행 업데이트)
🗑️ 고객 삭제 고객관리 삭제 즉시 (상태 = 삭제 표시)
➕ 계약 등록 계약관리 계약 저장 즉시
✏️ 계약 수정 계약관리 수정 저장 즉시
🔄 1분마다 자동 ping - 연결 상태 확인만 (데이터 전송 없음)

연동 후 Google Sheets에 자동 생성되는 탭 구조입니다.

시트 탭컬럼
고객관리 ID, 작업, 처리일시, 처리직원, 직원ID, 고객명, 연락처, 이메일, 성별, 출생연도, 주소, 차량번호, 차종, 보험사, 개시일, 만기일, 보험료, 계약유형, 소개자, 은행계좌, 카드번호, 상태, 가입일, 담당직원, 특이사항
계약관리 ID, 작업, 처리일시, 처리직원, 직원ID, 차량번호, 차종, 보험사, 피보험자, 피보험자연락처, 계약자, 계약자연락처, 개시일, 만기일, 보험료, 갱신상태, 계약유형, 소개자, 담당직원, 메모
접속로그 접속일시, 직원ID, 직원명, 역할, IP주소, UserAgent
Q. Google Sheets에 데이터가 안 들어가요.
A. 다음을 확인하세요:
1. 시스템 설정에서 URL이 올바르게 저장됐는지 확인
2. Apps Script 배포 설정에서 "액세스 권한: 모든 사용자"가 맞는지 확인
3. Apps Script를 수정했다면 새 배포를 다시 생성하고 URL을 업데이트
4. 아래 연결 테스트 패널에서 현재 URL로 ping 테스트 실행
Q. "안전하지 않은 앱" 경고가 계속 나와요.
A. Google의 기본 보안 경고입니다. "고급" → "안전하지 않은 페이지로 이동"을 클릭하면 내가 직접 만든 앱이므로 허용됩니다.
Q. 여러 직원이 동시에 쓰면 충돌이 생기나요?
A. Apps Script는 Google 서버에서 실행되어 동시 쓰기를 처리합니다. 단, 초당 수백 건 이상의 요청은 속도가 느려질 수 있습니다. 일반적인 사용(5~10명)에서는 문제없습니다.
Q. Supabase와 Google Sheets 연동은 어떤 관계인가요?
A. Supabase는 실시간 공유 DB (모든 직원이 같은 데이터 공유)이고, Google Sheets는 데이터의 추가적인 백업/기록 용도입니다. 둘 다 함께 사용하는 것을 권장합니다.
Q. 직원이 삭제한 고객도 Sheets에 남나요?
A. 네, 삭제 시 "작업" 컬럼에 "삭제"로 기록되어 이력이 남습니다. 완전히 지우려면 Sheets에서 직접 행을 삭제하면 됩니다.