적용 상황
- 사용자 중심 앱 — 사용자가 자신의 Google Sheets에 액세스
- 멀티 테넌트 앱 — 서로 다른 사용자가 서로 다른 스프레드시트를 관리
- 개인 데이터 액세스 — 사용자 개별 계정의 시트를 읽고 쓰기
- 데스크톱·Web 앱 — 사용자 인터랙션이 가능
전제 조건
- Google Cloud Console 프로젝트
- Google Sheets API와 Google Drive API 활성화
- Laravel Socialite(권장)
셋업
Google Cloud Console 설정
- Google Cloud Console에 접속
- 프로젝트를 선택하거나 새로 생성
- APIs & Services > Library로 이동
- 다음 API를 활성화:
- Google Sheets API
- Google Drive API
OAuth 2.0 인증 정보 생성
- APIs & Services > Credentials로 이동
- Create Credentials > OAuth client ID 클릭
- OAuth 동의 화면 설정(최초 1회):
- 사용자 타입을 External로 선택
- 필수 항목 입력(앱 이름, 지원 이메일, 개발자 연락처)
- 스코프 추가:
https://www.googleapis.com/auth/spreadsheets와https://www.googleapis.com/auth/drive
- 애플리케이션 타입을 Web application으로 선택
- 인가 리디렉트 URI 추가:
- 개발 환경:
http://localhost:8000/auth/google/callback - 프로덕션 환경:
https://yourdomain.com/auth/google/callback
- 개발 환경:
- Create 클릭
- Client ID와 Client Secret 복사
토큰 리프레시
패키지는 토큰 유효 기간 만료를 자동으로 처리합니다:미들웨어
Google 인증을 필수로 하는 미들웨어:보안
1. 토큰 보관
- 토큰은 데이터베이스에 안전하게 저장
- Laravel의 내장 암호화 사용
- 클라이언트 측에 토큰을 노출하지 않기
2. 스코프 관리
- 필요 최소한의 스코프만 요청
- 최소 권한 원칙 적용
- 사용자에게 필요한 권한을 명확히 설명
3. 에러 처리
- 만료된 토큰을 적절히 처리
- 사용자 친화적인 재인증 흐름 제공
- 에러 로그 기록·모니터링
트러블슈팅
자주 발생하는 에러
“redirect_uri_mismatch” 에러- Google Console의 리디렉트 URI와 애플리케이션이 완전히 일치하는지 확인
- http vs https 차이 확인
- 말미의 슬래시 확인
- 토큰 만료로 인해 리프레시에 실패
- 사용자에게 재인증을 요청
- 리프레시 토큰이 존재하는지 확인
- 사용자가 권한 허용을 거부
- 적절한 메시지로 대응
- 재인증을 시도하는 옵션 제공