# Google Workspace 서비스 계정 API 추가 방법

## 개요
Google Cloud Speech-to-Text API를 사용하기 위한 서비스 계정 설정 방법입니다.
기존 서비스 계정이 있다면 새로 만들 필요 없이 권한만 추가하면 됩니다.

---

## 1. 서비스 계정 확인/생성

### 1-1. 기존 서비스 계정이 있는 경우
- Google Cloud Console 접속
- **IAM 및 관리자** > **서비스 계정** 메뉴로 이동
- 기존 서비스 계정 확인 (예: `vertex-ai-client`)
- **→ 기존 계정 사용 시 2단계로 이동**

### 1-2. 새 서비스 계정 생성이 필요한 경우
1. Google Cloud Console 접속
2. **IAM 및 관리자** > **서비스 계정** 메뉴로 이동
3. **서비스 계정 만들기** 클릭
4. 서비스 계정 정보 입력:
   - **이름**: 원하는 이름 입력 (예: `vertex-ai-client`)
   - **설명**: 용도 설명 (예: `vertex-ai`)
5. **만들고 계속하기** 클릭

---

## 2. 서비스 계정에 API 권한 부여

1. **IAM 및 관리자** > **서비스 계정** 메뉴로 이동
2. 사용할 서비스 계정 선택 (예: `vertex-ai-client`)
3. **권한** 탭 클릭
4. **역할 부여** 버튼 클릭
5. 역할 선택:
   - 검색창에 `Cloud Speech-to-Text API User` 입력
   - 해당 역할 선택
6. **저장** 클릭

**참고**: 다른 Google API를 사용하려면 해당 API의 사용자 역할도 추가해야 합니다.
- 예: `Cloud Translation API User`, `Cloud Text-to-Speech API User` 등

---

## 3. API 활성화 확인

1. Google Cloud Console 접속
2. **API 및 서비스** > **사용 설정된 API** 메뉴로 이동
3. 검색창에 `Cloud Speech-to-Text API` 입력
4. API가 활성화되어 있는지 확인
5. **활성화되지 않은 경우**:
   - **API 사용 설정** 버튼 클릭
   - 활성화 완료까지 대기

**참고**: 프로젝트에서 사용할 모든 Google API를 미리 활성화해야 합니다.

---

## 4. 서비스 계정 키 파일 다운로드

1. **IAM 및 관리자** > **서비스 계정** 메뉴로 이동
2. 사용할 서비스 계정 선택 (예: `vertex-ai-client`)
3. **키** 탭 클릭
4. **키 추가** > **새 키 만들기** 클릭
5. **JSON** 형식 선택
6. **만들기** 클릭
7. JSON 파일이 자동으로 다운로드됨

**중요**: 
- 이 키 파일은 한 번만 다운로드 가능합니다.
- 안전한 곳에 보관하고, 공개 저장소에 업로드하지 마세요.

---

## 5. 서버에 키 파일 저장

1. 다운로드한 JSON 파일을 서버의 `/apikey/` 디렉토리에 저장
2. 파일명: `google_service_account.json`
3. 전체 경로: `/apikey/google_service_account.json`

**예시**:
```
/apikey/
  ├── google_service_account.json  (서비스 계정 JSON 파일)
  └── google_api.txt               (API 키 - 선택사항, 폴백용)
```

---

## 6. 코드에서 사용 방법

### 6-1. PHP 코드 구조
현재 `voice_ai/process_meeting.php` 파일은 다음과 같이 동작합니다:

1. **서비스 계정 JSON 파일 우선 사용**
   - `/apikey/google_service_account.json` 파일 확인
   - 있으면 OAuth 2.0 토큰 생성하여 사용

2. **API 키 폴백**
   - 서비스 계정 파일이 없으면 `/apikey/google_api.txt` 사용
   - API 키 방식으로 인증

### 6-2. 인증 흐름
```
서비스 계정 JSON 파일 존재?
  ├─ YES → JWT 생성 → OAuth 2.0 토큰 요청 → Bearer 토큰으로 API 호출
  └─ NO  → API 키 파일 확인 → API 키로 API 호출
```

---

## 7. 테스트 방법

1. 브라우저에서 `voice_ai/index.php` 페이지 접속
2. **샘플 테스트** 버튼 클릭 (실제 녹음 없이 테스트)
3. **회의 종료 및 AI 분석 시작** 버튼 클릭
4. 결과 확인:
   - 성공: 회의록이 생성되고 목록에 표시됨
   - 실패: 오류 메시지 확인

---

## 8. 문제 해결

### 8-1. "OAuth 토큰 요청 실패" 오류
- **원인**: 서비스 계정 권한 부족 또는 API 미활성화
- **해결**:
  1. 서비스 계정에 "Cloud Speech-to-Text API User" 역할 확인
  2. 프로젝트에서 "Cloud Speech-to-Text API" 활성화 확인

### 8-2. "API key not valid" 오류
- **원인**: API 키가 유효하지 않거나 서비스 계정 JSON 파일이 없음
- **해결**:
  1. 서비스 계정 JSON 파일이 올바른 위치에 있는지 확인
  2. JSON 파일 형식이 올바른지 확인

### 8-3. "서비스 계정 개인 키를 읽을 수 없습니다" 오류
- **원인**: JSON 파일의 `private_key` 필드가 손상되었거나 형식 오류
- **해결**:
  1. JSON 파일을 다시 다운로드
  2. 파일이 UTF-8 인코딩인지 확인

---

## 9. 보안 주의사항

1. **키 파일 보안**
   - 서비스 계정 JSON 파일은 절대 공개 저장소에 업로드하지 마세요
   - `.gitignore`에 `/apikey/` 디렉토리 추가 권장
   - 파일 권한을 제한하세요 (예: `chmod 600`)

2. **권한 최소화 원칙**
   - 필요한 API 권한만 부여하세요
   - 불필요한 권한은 제거하세요

3. **키 파일 교체**
   - 키가 유출된 경우 즉시 키를 삭제하고 새로 생성하세요
   - Google Cloud Console에서 키 삭제 가능

---

## 10. 추가 API 사용 시

다른 Google API를 사용하려면:

1. **API 활성화**: API 및 서비스 > 사용 설정된 API에서 활성화
2. **권한 부여**: 서비스 계정에 해당 API 사용자 역할 추가
   - 예: `Cloud Translation API User`
   - 예: `Cloud Text-to-Speech API User`
3. **코드 수정**: 필요한 경우 코드에서 API 엔드포인트 변경

---

## 요약 체크리스트

- [ ] 서비스 계정 생성 또는 확인
- [ ] 서비스 계정에 "Cloud Speech-to-Text API User" 역할 부여
- [ ] 프로젝트에서 "Cloud Speech-to-Text API" 활성화
- [ ] 서비스 계정 JSON 키 파일 다운로드
- [ ] 서버에 `/apikey/google_service_account.json` 저장
- [ ] 파일 권한 설정 (보안)
- [ ] 테스트 실행 및 결과 확인

---

## 참고 자료

- [Google Cloud Speech-to-Text API 문서](https://cloud.google.com/speech-to-text/docs)
- [서비스 계정 인증 가이드](https://cloud.google.com/docs/authentication/production)
- [IAM 역할 및 권한](https://cloud.google.com/iam/docs/roles-overview)

---

**작성일**: 2024년
**프로젝트**: 5130 (voice_ai 시스템)

