# Event Hub 정책 설정 가이드

## 📌 개요
Azure Event Hub 사용을 위한 공유 액세스 정책(SAS Policy) 설정 방법

## 🔧 설정 단계

### 1. Azure Portal 접속
- Event Hub Namespace: `hgzero-eventhub-ns`
- 리소스 그룹: `rg-digitalgarage-02`

### 2. 정책 생성

#### (1) STT 서비스용 Send 정책
```
정책 이름: stt-send-policy
권한: ✓ Send
용도: STT 서비스가 음성 인식 결과를 Event Hub에 발행
```

**생성 방법**:
1. `hgzero-eventhub-ns` → 공유 액세스 정책
2. `+ 추가` 클릭
3. 정책 이름: `stt-send-policy`
4. **Send** 체크
5. **만들기** 클릭
6. 생성된 정책 클릭 → **연결 문자열-기본 키** 복사

#### (2) AI 서비스용 Listen 정책
```
정책 이름: ai-listen-policy
권한: ✓ Listen
용도: AI 서비스가 Event Hub에서 이벤트를 구독
```

**생성 방법**:
1. 공유 액세스 정책 → `+ 추가`
2. 정책 이름: `ai-listen-policy`
3. **Listen** 체크
4. **만들기** → 연결 문자열 복사

#### (3) 관리용 Manage 정책
```
정책 이름: hgzero-manage-policy
권한: ✓ Manage (Send + Listen 포함)
용도: 개발, 테스트, 관리 작업
```

**생성 방법**:
1. 공유 액세스 정책 → `+ 추가`
2. 정책 이름: `hgzero-manage-policy`
3. **Manage** 체크 (자동으로 Send/Listen 포함)
4. **만들기** → 연결 문자열 복사

### 3. 연결 문자열 형식
```
Endpoint=sb://hgzero-eventhub-ns.servicebus.windows.net/;
SharedAccessKeyName=stt-send-policy;
SharedAccessKey=<YOUR_KEY>;
EntityPath=hgzero-eventhub-name
```

### 4. IntelliJ 실행 프로파일 설정

#### STT 서비스 (`.run/SttServiceApplication.run.xml`)
```xml
<option name="env">
  <map>
    <entry key="EVENTHUB_CONNECTION_STRING" value="Endpoint=sb://...;SharedAccessKeyName=stt-send-policy;SharedAccessKey=..."/>
    <entry key="EVENTHUB_NAME" value="hgzero-eventhub-name"/>
  </map>
</option>
```

#### AI 서비스 (`.run/AiServiceApplication.run.xml`)
```xml
<option name="env">
  <map>
    <entry key="EVENTHUB_CONNECTION_STRING" value="Endpoint=sb://...;SharedAccessKeyName=ai-listen-policy;SharedAccessKey=..."/>
    <entry key="EVENTHUB_NAME" value="hgzero-eventhub-name"/>
  </map>
</option>
```

## ✅ 검증 방법

### 연결 테스트
```bash
# STT 서비스 시작 후 로그 확인
# 성공 메시지 예시:
[INFO] EventHubProducerClient - Connected to Event Hub: hgzero-eventhub-name
```

### 권한 검증
- **Send 정책**: 이벤트 발행만 가능
- **Listen 정책**: 이벤트 구독만 가능
- **Manage 정책**: 모든 작업 가능

## 🔐 보안 권장사항

1. **최소 권한 원칙**: 각 서비스는 필요한 권한만 부여
2. **키 회전**: 정기적으로 액세스 키 재생성
3. **환경 분리**: Dev/Prod 환경별 별도 정책 사용
4. **연결 문자열 보호**: Git에 커밋하지 않음 (환경 변수 사용)

## 📚 참고 문서
- [Azure Event Hub SAS 인증](https://learn.microsoft.com/azure/event-hubs/authenticate-shared-access-signature)
