# gRPC Transport

`PushwooshGRPC` 모듈은 Pushwoosh 서버와의 통신을 위한 네트워크 성능을 향상시킬 수 있는 선택적 gRPC 전송 계층을 제공합니다. 사용 가능한 경우, SDK는 지원되는 API 메서드에 대해 자동으로 gRPC를 사용하고 gRPC를 사용할 수 없는 경우 REST로 대체됩니다.

<Aside type="note">
**SDK 버전 7.0.18**부터 사용 가능합니다.
</Aside>

## 작동 방식

기본적으로 Pushwoosh SDK는 HTTPS를 통해 REST API를 사용하여 서버와 통신합니다. `PushwooshGRPC` 모듈은 다음과 같은 여러 장점을 제공하는 대체 gRPC 전송을 추가합니다:

- **더 낮은 지연 시간** — gRPC는 영구 연결이 있는 HTTP/2를 사용합니다
- **더 작은 페이로드 크기** — Protocol Buffers는 JSON보다 더 압축적입니다
- **멀티플렉싱** — 단일 연결을 통해 여러 요청을 보낼 수 있습니다

### 자동 대체

이 모듈에는 내장된 복원 기능이 포함되어 있습니다:

| 시나리오 | 동작 |
|----------|----------|
| gRPC 사용 가능 | gRPC 전송 사용 |
| gRPC 사용 불가 | REST로 대체 |
| 네트워크 오류 | REST로 재시도 |

<Aside type="tip">
코드에서 전송 선택을 처리할 필요가 없습니다. SDK가 자동으로 가장 좋은 전송 방법을 선택합니다.
</Aside>

## 요구 사항

| 요구 사항 | 버전 |
|-------------|---------|
| iOS | 13.0+ |
| Xcode | 14.0+ |
| Swift | 5.0+ |

## 설치

### Swift Package Manager

Pushwoosh SDK를 통합할 때 타겟에 `PushwooshGRPC`를 추가하세요:

1. Xcode에서 **File → Add Package Dependencies**로 이동합니다
2. 패키지 URL을 입력합니다: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`
3. 필수 프레임워크 외에 `PushwooshGRPC`를 선택합니다

<Tabs>
<TabItem label="필수 프레임워크">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="선택적 프레임워크">
* `PushwooshGRPC` — gRPC 전송
* `PushwooshKeychain` — 영구적인 기기 ID
* `PushwooshLiveActivities` — Live Activities 지원
* `PushwooshVoIP` — VoIP 푸시 알림
* `PushwooshForegroundPush` — 사용자 정의 포그라운드 알림
</TabItem>
</Tabs>

### CocoaPods

`Podfile`에 gRPC 하위 스펙을 추가합니다:

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshGRPC'
end
```

그런 다음 실행합니다:

```bash
pod install
```

## 사용법

**코드 변경이 필요 없습니다.** 프로젝트에 `PushwooshGRPC` 모듈을 추가하면 자동으로 작동합니다:

1. 앱 실행 시 SDK는 gRPC 전송이 사용 가능한지 감지합니다
2. 가능한 경우 API 호출은 gRPC를 통해 라우팅됩니다
3. gRPC가 실패하면 SDK는 자동으로 REST로 대체됩니다

## 지원되는 메서드

다음 API 메서드는 gRPC 전송을 지원합니다:

| 메서드 | gRPC 지원 |
|--------|--------------|
| 기기 등록 | 예 |
| 태그 (설정/가져오기) | 예 |
| 앱 열기 추적 | 예 |
| 푸시 통계 | 예 |

<Aside type="note">
위에 나열되지 않은 메서드는 계속해서 REST 전송을 사용합니다. SDK는 이를 투명하게 처리합니다.
</Aside>

## 사용 사례

`PushwooshGRPC` 모듈은 특히 다음과 같은 경우에 유용합니다:

- **고빈도 이벤트 추적** — 많은 이벤트를 보내는 앱의 오버헤드 감소
- **실시간 애플리케이션** — 시간에 민감한 작업의 지연 시간 감소
- **대역폭이 제한된 환경** — 더 작은 페이로드 크기로 데이터 절약

## 문제 해결

### 모듈 활성화 확인

앱이 실행될 때 Xcode 콘솔 로그를 확인하세요. 다음과 같은 로그 메시지가 표시되어야 합니다:

```
[Pushwoosh] gRPC transport: ENABLED
```

### REST 전송 강제

디버깅을 위해 일시적으로 gRPC를 비활성화해야 하는 경우, 타겟에서 `PushwooshGRPC` 모듈을 제거할 수 있습니다. gRPC를 사용할 수 없을 때 SDK는 자동으로 REST 전송을 사용합니다.

<Aside type="caution">
앱에 gRPC와 REST 전송 코드를 모두 포함하지 마세요 — SDK는 모듈 가용성에 따라 자동으로 전송을 선택합니다.
</Aside>