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

# 외부 액세스 토큰

> CI 파이프라인, 웹훅 및 기타 자동화된 서비스가 로그인 없이 비공개 Replit 앱에 접근할 수 있도록 합니다.

외부 액세스 토큰은 특정 Replit App을 위해 발급하는 베어러 토큰입니다.
CI 파이프라인, 웹훅, 상태 확인 핑거, Slack 봇, 내부 스크립트와 같은 자동화된
서비스가 [비공개 개발 URL](/ko/features/publishing/private-deployments) 또는
[비공개 배포](/ko/features/publishing/private-deployments)로 잠긴 앱이라도
접근할 수 있게 해줍니다.

각 토큰을 비밀번호처럼 다루세요. 토큰을 가진 사람은 토큰이 만료되거나
회수될 때까지 앱에 접근할 수 있습니다.

<Note>
  외부 액세스 토큰은 Replit Core 및 Pro 플랜에서 사용할 수 있습니다.
  Enterprise 고객은 이 기능이 워크스페이스에서 활성화되기 전에 Replit에
  옵트인을 요청해야 합니다. 토큰은 배포가 비공개로 설정된 후에만 게시 설정에
  표시됩니다.
</Note>

## 토큰을 사용해야 하는 경우

브라우저 *외부*의 무언가가 비공개 Replit App을 호출해야 할 때 외부 액세스
토큰을 사용하세요. 일반적인 사례는 다음과 같습니다.

* 매 커밋마다 개발 URL에 대해 스모크 테스트를 실행하는 GitHub Actions 워크플로.
* 게시된 앱의 상태 확인 엔드포인트를 호출하는 업타임 모니터(Better Stack,
  Pingdom, UptimeRobot).
* 비공개 배포로 POST 요청을 보내는 웹훅 수신기 - Stripe, Slack, GitHub.
* 디버깅 중 팀원의 컴퓨터에서 실행하는 `curl` 또는 `fetch` 호출.

외부 액세스 토큰은 브라우저에서 UI 페이지를 여는 것이 아니라 **API 트래픽**을
위해 설계되었습니다. 단일 페이지 앱(Vite, Next.js 등)은 후속 요청으로
JavaScript 번들을 로드하는데, 이 요청에는 토큰이 포함되지 않아 실패합니다.
인터랙티브하게 탐색하려면 대신 정상적으로 로그인하세요.

## 토큰 환경

각 토큰은 하나의 환경에 바인딩됩니다.

| 환경            | 작동 위치                                  | 사용 목적                  |
| :------------ | :------------------------------------- | :--------------------- |
| `Development` | 앱의 워크스페이스 개발 URL(`*.replit.dev`)       | 개발 중 실행 중인 Repl에 접근할 때 |
| `Production`  | 앱의 게시된 배포(`*.replit.app` 및 사용자 지정 도메인) | 외부 서비스에서 비공개 배포에 접근할 때 |

`Production` 토큰은 *현재 게시된* 배포에 연결됩니다. 새로운 배포로 다시
게시하면 기존 프로덕션 토큰은 작동을 멈추므로 새 토큰을 발급해야 합니다.

## 외부 액세스 토큰 생성하기

<Steps>
  <Step>
    노출하려는 앱을 열고, **게시** 도구를 엽니다.
  </Step>

  <Step>
    **설정 조정**을 선택해 재배포 옵션을 확장합니다.
  </Step>

  <Step>
    **보안** 섹션에서 **외부 액세스 토큰**을 찾습니다.
  </Step>

  <Step>
    **액세스 토큰 생성**을 선택하고 다음을 입력합니다.

    * **레이블**(선택 사항): 나중에 토큰을 알아볼 수 있도록 `CI` 또는
      `Stripe webhook`과 같은 짧은 이름입니다. 최대 120자까지 입력할 수
      있습니다.
    * **환경**: 호출하는 서비스가 앱에 접근해야 하는 위치에 따라 `Development`
      또는 `Production`을 선택합니다.
    * **만료 시점**: `1시간`, `24시간`, `7일`, `30일`, `3개월`, `1년`,
      `5년` 중 유효 기간을 선택합니다. 작업에 맞는 가장 짧은 기간을
      선택하세요. "만료 없음" 옵션은 제공되지 않습니다.
  </Step>

  <Step>
    **생성**을 선택합니다.
  </Step>
</Steps>

Replit은 토큰을 **한 번만** 표시합니다. 지금 복사하세요. 대화상자를 닫으면
토큰을 다시 볼 방법이 없습니다. 토큰을 잃어버렸다면 해당 토큰을 회수하고
새 토큰을 발급하세요.

토큰 표시 화면에서는 두 가지 복사 작업을 제공합니다.

* **쿼리 매개변수 복사** - URL에 붙일 수 있는
  `?project-protection-bypass=<token>`을 복사합니다. 간단한 `curl`
  확인에 유용합니다.
* **토큰만 복사** - `Authorization: Bearer` 헤더로 보내기에 적합한 원시
  토큰을 복사합니다.

<Info>
  첫 번째 토큰을 생성하면 아직 활성화되지 않았던 경우 앱의 외부 액세스가
  자동으로 켜집니다. 보호 장치가 없으면 토큰이 우회할 대상이 없습니다.
</Info>

## 토큰 사용하기

다음 두 가지 방법 중 하나로 토큰을 제시하세요.

### Authorization 헤더(권장)

```bash theme={null}
curl -H "Authorization: Bearer <token>" https://your-app.replit.app/health
```

이 방법은 웹훅, CI 스크립트, 백엔드 간 호출 등 거의 모든 경우에 적합한
선택입니다. 토큰은 URL을 캡처하는 로그에 나타나지 않으며 브라우저 기록에도
남지 않습니다.

### 쿼리 매개변수

```bash theme={null}
curl "https://your-app.replit.app/health?project-protection-bypass=<token>"
```

헤더를 설정할 수 없는 경우 - 예를 들어 URL만 받는 서비스인 경우에만
쿼리 매개변수 방식을 사용하세요. 토큰이 포함된 URL은 프록시 로그, 셸 기록,
스크린샷에 남기 쉬우므로 가능하면 항상 헤더 방식을 선호하세요.

## 기존 토큰 관리하기

**외부 액세스 토큰** 섹션에는 앱을 위해 생성한 모든 토큰이 최신순으로
나열되며, 레이블, 환경, 생성일, 만료일, 회수 상태가 함께 표시됩니다.
토큰의 전체 값은 생성 시에만 표시되므로, 토큰을 구분할 수 있도록 각 행에
토큰의 마지막 몇 글자가 표시됩니다.

*자신이* 생성한 토큰만 볼 수 있습니다. 앱을 소유하고 있더라도 다른
공동 작업자의 토큰은 그들만 볼 수 있습니다.

## 토큰 회수하기

더 이상 필요하지 않거나 유출이 의심되는 즉시 토큰을 회수하세요. 회수하려면
다음 단계를 따르세요.

<Steps>
  <Step>
    앱의 게시 설정에서 **외부 액세스 토큰** 섹션을 엽니다.
  </Step>

  <Step>
    목록에서 토큰을 찾아 휴지통 아이콘을 선택합니다.
  </Step>

  <Step>
    회수를 확인합니다.
  </Step>
</Steps>

회수는 **즉시 이루어지며 되돌릴 수 없습니다**. 해당 토큰을 사용하는
트래픽은 몇 초 안에 거부되기 시작합니다. 다시 접근이 필요하다면 새
토큰을 발급하세요.

자신이 생성한 토큰만 회수할 수 있습니다. 워크스페이스에서 공동 작업자를
제거하면 해당 앱을 위해 그들이 발급한 토큰도 자동으로 회수됩니다.

## 토큰을 안전하게 보관하기

외부 액세스 토큰은 자격 증명입니다. API 키나 비밀번호와 동일한 주의를
기울여 다루세요.

### 해야 할 것

* **토큰을 시크릿 관리자에 저장하세요** - GitHub Actions 시크릿, CI
  공급업체의 볼트, 클라우드 제공업체의 시크릿 저장소, 또는 비밀번호
  관리자 등입니다. 절대로 저장소에 커밋하지 마세요.
* 가능하면 **짧은 유효 기간을 사용하세요**. 일회성 통합을 위한 7일짜리
  토큰이 방치된 5년짜리 토큰보다 안전합니다.
* **모든 토큰에 레이블을 붙이세요.** 그래야 나중에 무엇을 위한 토큰인지,
  여전히 사용 중인지 알 수 있습니다. 레이블이 없는 토큰이 가장 먼저
  유출되고 가장 나중에 회수됩니다.
* **소비자별로 별도의 토큰을 발급하세요.** CI 작업마다 하나, 웹훅
  소스마다 하나, 업타임 체크마다 하나씩 만드세요. 무언가 유출되거나
  더 이상 필요하지 않은 공급업체가 생기면 그 토큰 하나만 회수하면 됩니다.
* 토큰이 URL 로그, 브라우저 기록, referer 헤더를 통해 유출되지 않도록
  쿼리 매개변수보다 **`Authorization` 헤더를 선호하세요**.
* 유출된 로그, 공개 저장소 커밋, 화면 공유, 퇴사한 직원의 노트북 등
  토큰이 노출되었을 가능성이 있다면 **즉시 회수하세요**. 회수는 바로
  적용되며, 이후에 대체 토큰을 발급하세요.

### 하지 말아야 할 것

* **팀원이나 서비스 간에 토큰을 공유하지 마세요.** 두 시스템이 하나의
  토큰을 공유하면 한쪽을 손상시키지 않고는 다른 쪽을 회수할 수 없습니다.
* **토큰을 채팅, 이메일, 스크린샷, 이슈 트래커에 붙여넣지 마세요.** 이런
  채널은 예상치 못한 방식으로 보관, 색인, 공유됩니다.
* **클라이언트 측 코드에 토큰을 넣지 마세요** - 브라우저 앱, 모바일 앱,
  데스크톱 바이너리 등입니다. 사용자의 기기로 배포되는 모든 것은
  공개된다고 간주해야 합니다.
* **브라우저 세션에 토큰을 사용하지 마세요.** 토큰은 API 호출에는
  작동하지만 브라우저 탭에서 SPA를 로드하는 데는 사용할 수 없습니다.
  이 경우에는 일반적인 Replit 로그인을 사용하세요.
* **기본값으로 5년 만료를 선택하지 마세요.** 소비자가 실제로 접근이
  필요한 기간에 맞게 유효 기간을 설정하세요.

## 문제 해결

<Accordion title="프로덕션 토큰이 갑자기 작동을 멈췄습니다">
  프로덕션 토큰은 특정 게시된 배포에 바인딩됩니다. 배포 유형을 변경하거나
  배포를 삭제하고 다시 만드는 등의 방식으로 앱을 다시 게시했다면 기존
  프로덕션 토큰은 무효화됩니다. 새 배포의 설정에서 새 토큰을 발급하세요.
</Accordion>

<Accordion title="토큰이 `curl`에서는 작동하지만 브라우저에서는 여전히 로그인 페이지가 표시됩니다">
  외부 액세스 토큰은 브라우저 세션이 아닌 API 트래픽을 위한 것입니다.
  단일 페이지 앱이 브라우저에서 로드될 때 초기 HTML 요청은 쿼리 매개변수를
  통해 토큰을 전달할 수 있지만, JavaScript 번들, CSS, API 호출에 대한
  후속 요청에는 토큰이 포함되지 않아 거부됩니다. 앱을 인터랙티브하게
  탐색하려면 Replit에 정상적으로 로그인하세요.
</Accordion>

<Accordion title="토큰을 잃어버렸습니다 - 다시 볼 수 있나요?">
  아니요. Replit은 생성 시점에만 토큰을 한 번 표시합니다. 목록 보기에는
  메타데이터(레이블, 환경, 만료일, 마지막 몇 글자)가 표시되지만 전체
  토큰 값은 표시되지 않습니다. 토큰을 잃어버렸다면 해당 토큰을 회수하고
  새 토큰을 만드세요.
</Accordion>

## 다음 단계

* [비공개 배포](/ko/features/publishing/private-deployments):
  이 토큰들이 우회하는 기본 접근 제어 기능입니다.
* [Replit App 접근 관리](/ko/teams/identity-and-access-management/repl-access-management):
  어떤 Replit 사용자가 비공개 앱에 로그인할 수 있는지 관리합니다.
