> ## Documentation Index
> Fetch the complete documentation index at: https://doc.howen.ink/llms.txt
> Use this file to discover all available pages before exploring further.

# API 키와 개인정보

> API 키가 어떻게 사용되는지, 어떤 데이터가 제3자에게 전송되는지, Umami 통계가 무엇을 기록하는지 알아봅니다.

이 페이지에서는 앱이 API 키, 입력한 내용, 통계 데이터를 어떻게 처리하는지 설명합니다. 다른 사람이 사용하도록 배포하기 전에 먼저 읽어 보기를 권장합니다.

## API 키

앱이 사용하는 키의 출처는 두 가지입니다.

| 출처    | 저장 위치                                         | 사용 가능한 사람 |
| ----- | --------------------------------------------- | --------- |
| 서버 키  | 서버 환경 변수 `DEEPSEEK_API_KEY`, `GEMINI_API_KEY` | 모든 방문자    |
| 사용자 키 | 방문자 브라우저의 로컬 저장소                              | 해당 방문자만   |

* 서버 키는 서버에서만 사용하며 브라우저로 전달되지 않습니다.
* 사용자 키는 요청마다 `Authorization: Bearer` 요청 헤더로 앱 서버에 전송되고, 서버가 모델 제공업체로 전달합니다. 서버는 사용자 키를 저장하지 않습니다.
* 요청에 사용자 키와 서버 키가 모두 있으면 사용자 키를 우선 사용합니다.
* 오늘의 문장은 서버 키로만 생성합니다.

<Warning>
  `.env.local`이나 `.env.production`을 커밋하지 마세요. API 키를 Docker 이미지, 프런트엔드 코드, 로그에 넣지 마세요. Docker 배포에서는 `.env.production`의 권한을 `600`으로 설정하는 것을 권장합니다.
</Warning>

## 입력한 내용이 전송되는 곳

| 기능                          | 전송되는 내용           | 수신처                                   |
| --------------------------- | ----------------- | ------------------------------------- |
| 문장 분석, 번역, 단어 상세 설명, AI 도우미 | 원문, 선택한 단어, 대화 내용 | 선택한 모델 제공업체(DeepSeek 또는 Gemini)       |
| 이미지 인식                      | 압축된 이미지           | 선택한 모델 제공업체                           |
| Edge TTS 음성 읽기              | 읽을 텍스트            | 프로젝트 제작자가 제공하는 음성 API `api.howen.ink` |
| Gemini TTS 음성 읽기            | 읽을 텍스트            | Google Gemini                         |

모든 요청은 먼저 앱 서버를 거친 뒤 수신처로 전달됩니다. 앱 서버는 원문, 이미지, 번역, 대화를 영구 저장하지 않습니다.

## 브라우저에 저장되는 데이터

다음 데이터는 방문자 브라우저의 로컬 저장소에만 저장되며 서버에 업로드되지 않습니다.

* 최근 분석한 원문 50개
* 그날의 오늘의 문장
* 모델, 언어, 테마, 음성 읽기 설정
* 사용자가 입력한 API 키

브라우저의 사이트 데이터를 지우면 모두 삭제됩니다.

## Umami 통계

`NEXT_PUBLIC_UMAMI_SRC`와 `NEXT_PUBLIC_UMAMI_WEBSITE_ID`를 모두 설정한 경우에만 앱이 Umami를 불러옵니다. 활성화하면 통계는 기능 사용 여부, 사용한 제공업체와 모델, 성공 또는 실패 여부, 소요 시간만 기록합니다.

### 기록하는 이벤트

| 분류    | 이벤트                                                                                                                         |
| ----- | --------------------------------------------------------------------------------------------------------------------------- |
| 사용    | `analyze_sentence`, `image_text_extract`, `tts_speech`, `word_detail_click`                                                 |
| 분석 결과 | `analyze_success`, `analyze_error`, `analyze_cancel`. `duration_ms`와 `first_result_ms`를 포함하며, 실패하면 `error_category`만 기록합니다. |
| 대화    | `chat_send`, `chat_success`, `chat_error`                                                                                   |

각 이벤트에는 제공업체, 모델 이름, 출력 방식(스트리밍 또는 한 번에 출력) 같은 메타데이터만 첨부됩니다. `error_category`는 `timeout`, `auth`, `rate_limit`, `server`, `request`, `invalid_response`, `network`, `unknown` 중 하나의 분류 값만 가집니다.

### 기록하지 않는 내용

* 입력한 원문, 이미지, 이미지에서 추출한 결과
* 단어, 뜻풀이, 번역 결과
* 대화 내용
* 원본 오류 메시지
* API 키

## 접속 비밀번호

`CODE`를 설정하면 올바른 비밀번호를 입력한 방문자만 모델 API를 호출할 수 있습니다. 세션 Cookie는 HttpOnly이며 유효 기간은 7일입니다. 자세한 내용은 [구성](/ko/configuration#접속-비밀번호)을 참고하세요.
