적용 상황
- 서버 간 접근 — 사용자 조작 없이 앱이 Sheets에 접근
- 자동화 시스템 — 백그라운드 잡, cron 작업, 자동 리포트
- 고정 스프레드시트 — 특정 스프레드시트를 제어
- 프로덕션 환경 — 사용자 동의 플로우 없이 안정적으로 동작
사전 요구 사항
- Google Cloud Console 프로젝트
- Google Sheets API와 Google Drive API 활성화
- 프로젝트 관리자 권한
설정
Google Cloud 프로젝트 생성
- Google Cloud Console에 접속합니다.
- 새 프로젝트를 생성하거나 기존 프로젝트를 선택합니다.
- 프로젝트 ID를 메모해 둡니다.
필요한 API 활성화
- APIs & Services > Library로 이동합니다.
- 다음 API를 검색 및 활성화합니다:
- Google Sheets API
- Google Drive API
Service account 생성
- APIs & Services > Credentials로 이동합니다.
- Create Credentials > Service Account를 클릭합니다.
- Service account 세부 정보를 입력합니다:
- Service account name: 설명적인 이름 (예: “Laravel Sheets App”)
- Service account ID: 자동 생성
- Description: 선택 사항
- Create and Continue를 클릭합니다.
- 선택 항목 두 섹션은 모두 건너뛰고 Done을 클릭합니다.
Service account 키 생성
- Credentials 페이지에서 생성한 Service account를 클릭합니다.
- Keys 탭으로 이동합니다.
- Add Key > Create new key를 클릭합니다.
- 키 형식으로 JSON을 선택합니다.
- Create를 클릭합니다.
- JSON 파일이 자동으로 다운로드됩니다.
JSON 파일 저장
- 다운로드한 JSON 파일을
storage/app/으로 옮깁니다. google-service-account.json으로 이름을 변경합니다.- 중요:
.gitignore에 추가해 버전 관리에서 제외합니다.
스프레드시트 공유
각 Google Sheets 스프레드시트에 대해:
- Google Sheets에서 엽니다.
- 공유 버튼을 클릭합니다.
- JSON 파일의
client_email필드를 복사합니다. - 이 이메일 주소에 공유합니다 (예:
[email protected]). - 권한을 선택합니다:
- 뷰어 — 읽기 전용
- 편집자 — 읽기/쓰기
- 소유자 — 전체 액세스 (권장하지 않음)
사용 방법
설정이 완료되면 Service account가 자동으로 사용됩니다. 액세스 토큰 설정은 필요 없습니다.보안 모범 사례
1. Service account 권한 제한
- 필요한 스프레드시트만 공유합니다.
- 소유자가 아닌 편집자를 사용합니다.
- 정기적으로 접근 권한을 감사합니다.
2. 키의 안전한 보관
- Service account 키는 버전 관리에 포함하지 않습니다.
.gitignore로 확실히 제외합니다.- 프로덕션 환경에서는 web root 외부의 안전한 위치에 저장합니다.
- 정기적으로 키를 로테이션합니다.
3. 프로덕션 환경 배포
추가 보안 대책:- JSON 키를 web root 외부의 안전한 위치에 저장합니다.
- 환경별로 다른 Service account를 사용합니다 (개발·스테이징·프로덕션).
- Google Cloud Console에서 이러한 계정의 사용 현황을 모니터링합니다.
- 의심스러운 활동을 로그 기록·알림합니다.
환경 변수 레퍼런스
| 변수 | 설명 | 예시 |
|---|---|---|
GOOGLE_SERVICE_ENABLED | Service account 인증 활성화 | true |
GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION | JSON 파일 경로 | storage/app/google-service-account.json |
고급 설정
JSON 문자열을 환경 변수에 저장
JSON 파일을 별도의 파일로 저장하는 대신, JSON 문자열을 환경 변수로 저장할 수 있습니다. GitHub Actions 같은 CI/CD 환경에 적합합니다. Step 1:.env에 JSON 문자열 추가
config/google.php에서 JSON 문자열 디코드
트러블슈팅
자주 발생하는 에러
「caller does not have permission」에러- 스프레드시트가 Service account 이메일 주소로 공유되어 있는지 확인하세요.
- 쓰기 작업의 경우 권한이 편집자 이상인지 확인하세요.
- JSON 파일 경로가 올바른지 확인하세요.
- 파일이 존재하고 웹 서버가 읽을 수 있는지 확인하세요.
- Google Cloud Console에서 Google Sheets API와 Google Drive API가 활성화되어 있는지 확인하세요.
- API 활성화 후 몇 분 정도 기다리세요.
- JSON 키 파일이 유효하며 손상되지 않았는지 확인하세요.
- Service account가 삭제되거나 비활성화되지 않았는지 확인하세요.
- 프로젝트 ID가 Google Cloud 프로젝트와 일치하는지 확인하세요.