---
slug: auth
title: "연결 인증: OAuth와 API 키"
description: "OAuth는 시스템이 대신 인증해 주고, API 키는 인증을 키에 묶어 둔 것. 클라이언트별 방식과 키 보안 최소선."
lang: ko
---


# 14. 연결 인증: OAuth와 API 키

AI를 내 메모리에 붙이려면 먼저 **“이 사람이 맞다”는 확인**이 있어야 한다. 아무나
남의 기억을 읽고 쓸 수는 없으니까. 이 확인을 하는 방법이 두 가지다. **OAuth**와
**API 키**. 둘의 차이는 하나로 요약된다.

> **OAuth는 시스템이 대신 인증해 준다. API 키는 인증을 키 하나에 묶어 둔 것이다.**

## OAuth: 계정으로 한 번 승인하면 끝

AI 앱에서 AiAkiv를 추가하면 **로그인 창**이 뜬다. 내 AiAkiv 계정으로 한 번 승인하면
그다음부터는 **시스템이 알아서** 신원을 확인한다.

- 신원은 **내 계정에 묶인다.** 앱이 아니라 "나"로 인증된다.
- **내 손에 남는 비밀값이 없다.** 복사해 둘 것도, 관리할 것도 없다.
- 갱신·회수를 **시스템이 맡는다.** 계정 쪽에서 정리하면 접근도 함께 정리된다.

## API 키: 인증을 키에 묶어 둔 것

콘솔에서 키를 발급받아 앱 설정에 붙여 넣는 방식이다. 로그인 창은 없다. 대신
**그 키 자체가 신분증**이 된다.

- **키를 가진 쪽이 곧 나다.** 앱이든 사람이든, 키만 있으면 내 권한으로 접근한다.
- 그래서 키는 **비밀번호와 같은 무게**로 다뤄야 한다(아래 [키 보안](#키-보안)).
- 발급·회수는 **내가 직접** 한다. 콘솔의 *API 키 관리*([콘솔 안내](console)).

콘솔에서 키는 두 가지로 낼 수 있다.

| 키 | 저장 위치 | 쓰임 |
|----|-----------|------|
| **동적 키** | 지금의 **저장 대상(Main)** 을 따라간다 | 콘솔에서 Main을 바꾸면 이 키의 저장 위치도 함께 바뀐다 |
| **프로젝트 키** | 특정 **프로젝트에 고정** | 그 프로젝트로만 읽고 쓴다: 폴더·앱마다 대상을 못 박고 싶을 때 |

## 무엇을 쓰나: 기본은 OAuth

**클라이언트가 OAuth를 지원한다면 고민 없이 OAuth를 쓴다.** 관리할 비밀값이 없고,
계정 정책을 그대로 따르기 때문이다.

| 방식 | 클라이언트 |
|------|-----------|
| **OAuth (권장)** | Claude Web · Claude Desktop · Claude Code · **ChatGPT classic** · Cursor · Grok |
| **API 키 (유일한 설정)** | Gemini CLI · **ChatGPT** · Antigravity |

> **⚠ ChatGPT와 ChatGPT classic 은 다른 앱이다.** 이름이 비슷하고 둘이 함께 깔리는데
> 붙는 설정은 정반대다. **classic 은 OAuth 커넥터**, **ChatGPT 는 OAuth가 아예 붙지
> 않는다.** 어느 쪽을 열었는지부터 확인해야 한다 →
> [ChatGPT 연결](chatgpt).

아래쪽 셋은 **선택이 아니다.** 다만 API 키뿐인 이유는 앱마다 다르다.

| 클라이언트 | 왜 API 키뿐인가 |
|---|---|
| **Gemini CLI** | OAuth 로그인 세션이 유지되지 않는다 |
| **ChatGPT** | OAuth가 붙지 않는다: 커스텀 커넥터로도, 헤더로도 |
| **Antigravity** | 설정이 앱 전체에 하나뿐이라 폴더로 나눌 수 없다: 그래서 **키가** 프로젝트를 정한다 |

클라이언트별 실제 설정은 [설치 안내](https://www.aiakiv.com/setup)를 따른다.

## 키 보안

키가 곧 신원이므로, 유출은 **내 기억에 대한 접근 자체가 넘어가는 것**을 뜻한다.
아래는 지켜야 할 최소선이다.

- **발급 순간 한 번만 보인다.** 그때 안전한 곳(비밀번호 관리자 등)에 옮겨 둔다.
  다시 열어볼 수 없다.
- **같은 대상에 새로 발급하면 이전 키는 자동으로 폐기된다.** 그래서 **재발급이 곧
  회수**다: 유출이 의심되면 즉시 새로 발급하면 된다.
- **공유하지 않는다.** 채팅·이슈·문서에 붙여 넣지 않는다. AI에게도 넘기지 않는다.
- **코드 저장소에 올리지 않는다.** 설정 파일에 키가 들어간다면 그 파일을 커밋에서
  제외한다(`.gitignore`).
- **키가 내 권한을 넘지는 못한다.** 키의 접근 범위는 내 팀 역할이 천장이다. 읽기
  권한뿐인 사람의 키로 쓰기가 되지는 않는다.
- 애초에 **기억 안에 키를 저장하지 않는다**:
  [무엇을 저장하나](what-to-store).

## 자주 헷갈리는 것

- **“OAuth인데 왜 프로젝트를 바꾸면 다시 로그인하라고 하나요?”** 일부 OAuth
  클라이언트(Claude Code·Cursor 등)는 저장 대상을 바꿀 때 재인증이 필요하다.
  정상 동작이다.
- **“키를 넣었는데 저장이 엉뚱한 데로 가요.”** 동적 키는 **Main을 따라간다.**
  대상을 고정하고 싶으면 프로젝트 키를 쓰거나 폴더 바인딩을 건다
  ([폴더 바인딩](folder-binding) · [팀과 프로젝트](teams-and-projects)).
- **“키를 잃어버렸어요.”** 복구는 없다. **새로 발급**하면 이전 키는 폐기되고 새 키로
  이어서 쓰면 된다.

## 다음

- 설치·클라이언트별 설정 → [퀵스타트](quickstart)
- 저장 위치(팀·프로젝트) → [팀과 프로젝트](teams-and-projects)
- 무엇을 저장하면 안 되나 → [무엇을 저장하나](what-to-store)
- 콘솔의 *API 키 관리* → [콘솔 안내](console)
