728x90
Autowini 프로젝트에서 Node.js로 구글 스프레드시트 다국어 데이터를 가져오던 중, PERMISSION_DENIED 오류가 발생했습니다.
{
"code": 403,
"message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
"status": "PERMISSION_DENIED"
}
🔍 원인 확인 과정
처음에는 스프레드시트 공유 설정과 IAM 서비스 계정 키를 재발급하며 문제를 해결하려 했습니다.
- 구글 스프레드시트에서 서비스 계정 이메일 편집자 권한 부여
- Google Cloud Console IAM에서 서비스 계정 키 재발급
하지만, 위 방법만으로는 오류가 계속 발생했습니다.
❗️ 문제 원인
google-spreadsheet 패키지 ^4.1.4 버전에서는 JWT 인증 시 일부 호출에서 권한 없는 호출자(403 Error)로 인식되는 문제가 있었습니다.
즉, IAM이나 스프레드시트 권한 설정을 아무리 변경해도 패키지 버전 자체에서 인증 처리 방식이 완전히 지원되지 않아 오류가 발생한 것이었습니다.
✅ 해결 방법
google-spreadsheet 패키지를 ^5.0.2로 업그레이드하여 문제를 해결했습니다.
# pnpm
pnpm add google-spreadsheet@^5.0.2
업그레이드 후, JWT 인증 방식으로 스프레드시트에 접근하니 정상적으로 데이터 로딩이 가능했습니다.
import { GoogleSpreadsheet } from 'google-spreadsheet';
import { JWT } from 'google-auth-library';
import { credentials } from './credentials.js';
const doc = new GoogleSpreadsheet(SPREADSHEET_DOC_ID);
await doc.useServiceAccountAuth(new JWT({
email: credentials.client_email,
key: credentials.private_key,
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
}));
await doc.loadInfo();
💡 느낀 점
- 같은 오류를 겪는 경우, 패키지 버전 문제를 먼저 확인하는 것이 빠른 해결 방법이 될 수 있다고 느꼈습니다.
- 실제로 GitHub에서도 동일한 문제를 겪은 사람이 있었고 (이슈 #723), 저도 해당 이슈에 댓글을 남겼습니다.
'지식 정리 📝' 카테고리의 다른 글
| 확장자는 JPG인데 Windows에서 열리지 않는 이미지 문제 해결한 방법 (0) | 2025.09.02 |
|---|---|
| iframe으로 인한 width 드래그 조절 문제 해결한 방법 (0) | 2025.08.22 |
| Prettier 적용 with Import 자동 정렬 (6) | 2025.07.29 |
| <textarea />를 활용한 채팅 입력창에서 한글 Enter 키 입력 시 메시지가 두 번 전송되는 이유 (1) | 2025.06.19 |
| React i18n 다국어 처리 빌드 크기 최적화 1 (0) | 2025.06.12 |