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

# 앱

> X API에 액세스하기 위한 App을 생성하고 구성합니다

앱은 API 자격 증명을 담는 컨테이너 역할을 합니다. 각 App마다 고유한 키, 토큰 및 설정을 가집니다.

***

<div id="app-credentials">
  ## App 자격 증명
</div>

App을 생성하면 다음 자격 증명을 발급할 수 있습니다:

| Credential                | 사용 용도                                              |
| :------------------------ | :------------------------------------------------- |
| **API Key & Secret**      | OAuth 1.0a로 인증합니다. 요청에 서명하거나 사용자 토큰을 생성하는 데 사용됩니다. |
| **Access Token & Secret** | 본인 계정을 대신하여 요청을 수행합니다(OAuth 1.0a).                 |
| **Client ID & Secret**    | OAuth 2.0으로 인증합니다. authorization code 플로우에 사용됩니다.  |
| **Bearer Token**          | 공개 데이터 엔드포인트에 대한 App 전용 인증 방식입니다.                  |

<Tip>
  새 프로젝트에는 **OAuth 2.0**을 선택하세요. 세밀한 권한 범위 제어를 제공하며, X API v2 사용자 컨텍스트 엔드포인트에 필수입니다.
</Tip>

***

<div id="creating-an-app">
  ## App 생성하기
</div>

<Steps>
  <Step title="Developer Console 열기">
    [console.x.com](https://console.x.com)으로 이동하여 로그인합니다.
  </Step>

  <Step title="Create App 클릭">
    App의 이름, 설명, 사용 사례를 입력합니다.
  </Step>

  <Step title="자격 증명 생성">
    App 생성이 완료되면 필요한 키와 토큰을 생성합니다.
  </Step>

  <Step title="안전하게 보관">
    자격 증명을 즉시 저장합니다. 한 번만 표시됩니다.
  </Step>
</Steps>

***

<div id="app-permissions-oauth-10a">
  ## App 권한 (OAuth 1.0a)
</div>

OAuth 1.0a App은 세 가지 권한 수준을 가집니다:

<Tabs>
  <Tab title="읽기 전용">
    * 게시물, 사용자 및 공개 데이터 보기
    * 게시물 작성, 좋아요 또는 어떤 항목도 수정할 수 없음
    * 다이렉트 메시지에 액세스할 수 없음
  </Tab>

  <Tab title="읽기 및 쓰기">
    * 모든 읽기 권한
    * 게시물 작성 및 삭제
    * 사용자 팔로우/언팔로우
    * 좋아요 및 리포스트
    * 다이렉트 메시지에 액세스할 수 없음
  </Tab>

  <Tab title="읽기, 쓰기 및 DM">
    * 모든 읽기 및 쓰기 권한
    * 다이렉트 메시지 보내기 및 읽기
  </Tab>
</Tabs>

<Note>
  권한을 변경하면 사용자가 업데이트된 범위를 포함하는 새 토큰을 받기 위해 App을 다시 승인해야 합니다.
</Note>

***

<div id="oauth-20-app-types">
  ## OAuth 2.0 App 유형
</div>

OAuth 2.0을 설정할 때 App 유형을 선택하세요:

| 유형                      | 클라이언트        | 사용 사례                            |
| :---------------------- | :----------- | :------------------------------- |
| **Web App**             | Confidential | 시크릿을 안전하게 저장할 수 있는 서버 측 애플리케이션   |
| **Automated App / Bot** | Confidential | 서버에서 실행되는 봇 및 자동화 서비스            |
| **Native App**          | Public       | 시크릿을 안전하게 저장할 수 없는 모바일 또는 데스크톱 앱 |
| **Single Page App**     | Public       | 브라우저 기반 JavaScript 앱             |

**Confidential 클라이언트**는 Client Secret을 발급받습니다. **Public 클라이언트**는 PKCE만 사용합니다.

***

<div id="callback-urls">
  ## 콜백 URL
</div>

콜백 URL(리디렉트 URI)은 OAuth 플로우에 필수입니다. 사용자가 App을 승인한 후, 인증 코드와 함께 콜백 URL로 리디렉션됩니다.

<div id="requirements">
  ### 필수 조건
</div>

* 개발자 콘솔에서 App의 허용 목록에 콜백 URL을 추가하세요
* URL은 끝에 오는 슬래시까지 포함해 정확히 일치해야 합니다
* App 하나당 콜백 URL은 최대 **10개**까지 허용됩니다
* 운영 환경에서는 `https://`를 사용하세요
* 로컬 개발 시에는 `http://127.0.0.1`를 사용하세요 (`localhost`는 사용하지 마세요)

<div id="disallowed-protocols">
  ### 허용되지 않는 프로토콜
</div>

다음 프로토콜은 사용할 수 없습니다: `javascript`, `data`, `file`, `ftp`, `mailto`, `telnet` 및 기타 비표준 스킴(URI 스킴).

<Accordion title="허용되지 않는 프로토콜 전체 목록">
  `vbscript`, `javascript`, `vbs`, `data`, `mocha`, `keyword`, `livescript`, `ftp`, `file`, `gopher`, `acrobat`, `callto`, `daap`, `itpc`, `itms`, `firefoxurl`, `hcp`, `ldap`, `mailto`, `mmst`, `mmsu`, `msbd`, `rtsp`, `mso-offdap`, `snews`, `news`, `nntp`, `outlook`, `stssync`, `rlogin`, `telnet`, `tn3270`, `shell`, `sip`
</Accordion>

***

<div id="best-practices">
  ## 모범 사례
</div>

<CardGroup cols={2}>
  <Card title="별도의 App 사용" icon="layer-group">
    개발, 스테이징, 프로덕션 환경마다 서로 다른 App을 만드세요.
  </Card>

  <Card title="자격 증명 교체" icon="arrows-rotate">
    키가 유출되었다고 의심되는 경우 또는 정기적으로 키를 다시 생성하세요.
  </Card>

  <Card title="최소 권한" icon="shield-check">
    App이 실제로 필요한 권한만 요청하세요.
  </Card>

  <Card title="사용량 모니터링" icon="chart-simple">
    API 사용량을 추적하기 위해 개발자 콘솔을 정기적으로 확인하세요.
  </Card>
</CardGroup>

***

<div id="automated-account-labels">
  ## 자동화된 계정 레이블
</div>

App에서 봇 계정을 운영하는 경우, 해당 계정을 자동화된 계정으로 표시할 수 있습니다.

1. 봇 계정의 **설정**으로 이동합니다.
2. **내 계정** → **자동화**를 선택합니다.
3. 관리용 계정을 연결합니다.

이렇게 하면 사용자의 신뢰를 얻는 데 도움이 되고, 봇 계정을 스팸과 구분할 수 있습니다.

***

<div id="troubleshooting">
  ## 문제 해결
</div>

<Accordion title="콜백 URL 미승인 오류">
  콜백 URL이 프로토콜과 마지막 슬래시까지 포함해 개발자 콘솔에 등록된 값과 정확히 일치하는지 확인하세요. 쿼리 매개변수로 전달할 때는 URL을 HTTP 방식으로 인코딩하세요.

  ```json theme={null}
  {
    "errors": [{
      "code": 415,
      "message": "Callback URL not approved for this client application."
    }]
  }
  ```
</Accordion>

<Accordion title="App 정지됨">
  App이 정지된 상태로 표시되면 X 플랫폼 팀에서 보낸 안내 이메일이 있는지 확인하세요. 이의 제기를 위해 [Platform Help Form](https://help.x.com/forms/platform)을 사용하세요.
</Accordion>
