> ## 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.

# 개발 및 프로덕션 데이터베이스

> 빌드할 때 사용하는 개발 데이터베이스와 게시된 앱을 구동하는 프로덕션 데이터베이스, 앱의 두 데이터베이스를 이해하세요.

모든 Replit App은 두 개의 데이터베이스와 함께 작동합니다. **개발 데이터베이스**는 여러분과 Agent가 빌드하는 동안 실험하는 공간입니다. **프로덕션 데이터베이스**는 게시된 앱을 구동하는 실제 데이터를 저장하며, 계속 빌드하는 동안에도 실제 데이터를 안전하게 보호합니다.

<Frame>
  <img src="https://mintcdn.com/replit/tlGd6oyGOaUUeRxr/images/databases/production-databases.jpg?fit=max&auto=format&n=tlGd6oyGOaUUeRxr&q=85&s=b60de03dc3f59d971894d1795033cc6b" alt="프로덕션 데이터베이스 관리 인터페이스" width="1080" height="471" data-path="images/databases/production-databases.jpg" />
</Frame>

## 두 데이터베이스 비교

| 측면        | 개발 데이터베이스                 | 프로덕션 데이터베이스              |
| --------- | ------------------------- | ------------------------ |
| **목적**    | 실험 및 기능 개발                | 실제 사용자를 처리하고 비즈니스 데이터 저장 |
| **데이터**   | 테스트 데이터, 더미 레코드, 소규모 데이터셋 | 실제 사용자 데이터, 비즈니스에 중요한 정보 |
| **생성 시점** | 모든 Replit App에서 자동으로 생성   | 앱을 게시할 때                 |
| **Agent** | Agent가 테이블을 생성하고 수정할 수 있음 | Agent가 접근할 수 없음          |
| **변경**    | 빈번한 스키마 변경, 빠른 반복         | 게시할 때 적용되는 신중하고 계획된 변경   |
| **결제**    | 모든 Replit App에 무료로 포함     | 사용량 기반                   |

<Note>
  Agent는 프로덕션 데이터베이스를 수정할 수 없습니다. 이는 프로덕션 데이터베이스를 안전하게 유지하기 위한 제한입니다.

  Agent는 개발 데이터베이스를 수정할 수 있습니다. 게시 시점에, Agent가 개발 데이터베이스의 구조(열/테이블 추가 및 삭제)에 적용한 모든 변경 사항은 프로덕션 데이터베이스에도 적용됩니다.

  언제든지 **Database** 도구를 열고, 프로덕션 데이터베이스를 선택한 다음 **My Data**를 열고 **Edit**을 토글하면 프로덕션 데이터를 수동으로 편집할 수 있습니다.
</Note>

## 게시할 때 프로덕션 데이터베이스 만들기

게시된 앱은 빌드할 때 사용하는 개발 데이터베이스와는 별도로, 자체 프로덕션 데이터베이스를 갖게 됩니다.

* **현재 인프라(Helium)**: 게시하는 동안 필요한 경우 Replit이 프로덕션 데이터베이스를 자동으로 만들어줍니다. 별도로 설정할 필요가 없습니다.
* **레거시 Neon 개발 데이터베이스**: 게시 설정에서 프로덕션 데이터베이스를 직접 만듭니다. 게시하는 동안 **Production database settings**를 열고 **Create production database**를 켜세요. 개발 데이터를 함께 복사하려면 **Set up your production database with your current development data**를 추가로 켜세요.

<Frame caption="Publishing의 프로덕션 데이터베이스 설정">
  <img src="https://mintcdn.com/replit/LrPHebhkEtjoxAa5/images/databases/shared-database-migration/production-database-settings.png?fit=max&auto=format&n=LrPHebhkEtjoxAa5&q=85&s=a5ca44635f062423aaa9c8d8b73753e3" alt="Create production database 옵션을 보여주는 게시 설정" width="1406" height="1207" data-path="images/databases/shared-database-migration/production-database-settings.png" />
</Frame>

<Warning>
  라이브 앱에서 안전하게 사용할 수 있는 데이터인 경우에만 개발 데이터를 프로덕션에 복사하세요. 개발 데이터에는 테스트 계정, 샘플 레코드, 또는 미완성 콘텐츠가 포함될 수 있습니다.
</Warning>

게시가 끝나면 게시된 앱은 프로덕션 데이터베이스를 사용하고, Project Editor는 계속 개발 데이터베이스를 사용하므로 이후의 개발 변경 사항이 실제 데이터를 직접 수정하지 않습니다.

## 프로덕션 데이터베이스를 안전하게 변경하기

데이터베이스 변경 사항이 포함된 업데이트를 게시할 때, 다운타임이나 데이터 손실을 피하려면 일부 변경 사항에 신중한 계획이 필요합니다.

<Info>
  게시 중에 게시된 앱에서 짧은 다운타임이 발생할 수 있습니다. 데이터베이스 변경 사항을 적용하는 동안 충돌을 방지하고 데이터를 보호하기 위해 앱을 일시적으로 중지해야 할 때가 있습니다.
</Info>

다음과 같은 유형의 변경 사항은 일반적으로 주의가 필요합니다.

* 애플리케이션 코드가 여전히 참조하는 **데이터베이스 열 제거**
* 기존 코드가 처리할 수 없는 방식으로 **열 데이터 타입 변경**
* 기존 테이블에 기본값 없이 **필수 필드 추가**
* 기존 쿼리를 깨뜨리는 **테이블 또는 열 이름 변경**
* 기존 애플리케이션 로직을 거부할 수 있는 **제약 조건 수정**

### 배포 프리뷰로 변경 사항 테스트하기

배포 프리뷰는 실제 사용자에게 영향을 주기 전에 데이터베이스 변경 사항과 애플리케이션 업데이트를 테스트할 수 있는, 프로덕션 환경의 임시적이고 격리된 복사본입니다. 다음과 같은 용도로 사용하세요.

* 데이터베이스 변경 사항이 적용된 상태에서 주요 사용자 흐름 전반에 걸쳐 앱이 계속 제대로 작동하는지 확인
* 기존 데이터가 올바르게 마이그레이션되었고 새 필드에 예상 값이 포함되어 있는지 확인
* 쿼리 응답 시간에서 성능 저하가 없는지 확인

## 청구 및 리소스 사용량

프로덕션 데이터베이스는 서버리스 데이터베이스 제공업체인 Neon을 통한 사용량 기반으로 청구됩니다. 데이터베이스는 5분간 활동이 없으면 유휴 상태로 전환되어 컴퓨팅 시간 청구가 일시 중지되며, 쿼리를 받으면 즉시 다시 활성화됩니다.

Database 도구의 랜딩 화면에는 **Billing Period**와 **Hours of Compute Used**가 표시됩니다. 데이터베이스별 저장 공간 사용량을 보려면 해당 데이터베이스의 **Settings** 탭을 여세요. 모든 Replit App에서의 사용량을 확인하려면 **Settings** → **Account** → **Account usage**를 열고 **PostgreSQL Storage**와 **PostgreSQL Compute** 행을 확장하세요.

Replit이 데이터베이스 사용량에 대해 청구하는 방법을 알아보려면 [배포 및 데이터베이스 요금](/ko/billing/about-usage-based-billing#databases)을 참고하세요.

## 프로덕션 데이터베이스 제거하기

<Warning>
  제거 작업은 7일의 보관 기간이 지나면 되돌릴 수 없습니다. 진행하기 전에 중요한 데이터를 반드시 백업하세요. 데이터베이스는 7일간의 소프트 삭제 기간을 가지며 이 기간 동안 복원할 수 있습니다. 도움이 필요하면 지원팀에 문의하세요. 7일이 지나면 데이터베이스는 완전히 삭제되어 복구할 수 없습니다.
</Warning>

<Accordion title="데이터베이스를 제거하는 방법">
  **Database** 도구에서:

  1. 데이터베이스를 선택한 다음 **Settings** 탭을 여세요
  2. **Remove database**를 선택하고 **Yes, Remove database**를 선택하여 확인하세요
</Accordion>

## 레거시 개발 데이터베이스

2025년 12월 4일 이전에는 개발 데이터베이스가 <a href="https://neon.com/" target="_blank">Neon</a>에서 호스팅되었습니다. 모든 새로운 개발 데이터베이스는 Replit 자체 인프라(Helium)에서 호스팅됩니다. 앱이 어느 쪽을 사용하는지는 **Settings** 탭에서 확인할 수 있습니다. `DATABASE_URL`에 `neon.tech`가 포함되어 있으면 레거시 Neon이고, `helium`이 포함되어 있으면 현재 인프라입니다.

| **기능**        | **Replit(현재)**                                                                               | **Neon(레거시)**                                                                                |
| ------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **호스팅**       | Replit 자체 인프라에서 호스팅                                                                          | Neon(타사 제공업체)에서 호스팅                                                                          |
| **결제**        | 모든 Replit App에 무료로 포함                                                                        | 사용량 기반 결제. 자세한 내용은 [게시 및 데이터베이스 결제](/ko/billing/about-usage-based-billing#databases)를 참고하세요. |
| **복원 기능**     | [롤백 기능](/ko/features/data-and-storage/data-recovery)을 사용해 데이터베이스를 어느 체크포인트로든 복원              | 특정 시점 복원(PITR): 백업 보존 기간 내 어느 시점으로든 복구.                                                      |
| **연결 보안**     | 앱 내부에서만 접근 가능하며, 외부에 절대 노출되지 않음.                                                             | 전체 연결 문자열을 사용. 노출되면 누구든 데이터베이스에 접근하고 수정할 수 있음.                                               |
| **리믹스 동작**    | [리믹스](/ko/features/projects-and-artifacts/remix-an-app)는 격리와 보안을 위해 데이터가 복사된 새 개발 데이터베이스를 생성 | 리믹스가 모든 복제본에서 동일한 데이터베이스를 재사용하므로, 리믹스에서의 변경 사항이 원본 앱에 영향을 줄 수 있음.                            |
| **데이터베이스 생성** | 각 Replit App마다 자동으로 생성됨.                                                                     | 명시적인 설정이 필요함.                                                                                |
| **게시 워크플로**   | 게시하면 환경 간 격리를 위해 별도의 프로덕션 데이터베이스가 생성됨.                                                       | 개발과 프로덕션이 동일한 데이터베이스를 공유하여, 의도치 않은 개발 변경 사항이 프로덕션 앱에 영향을 줄 수 있었음.                            |

## 데이터베이스 인프라 업그레이드

Replit은 개발 데이터베이스를 Neon에서 Replit 자체의 관리형 PostgreSQL 인프라인 **Helium**으로 업그레이드하고 있습니다. 이 업그레이드는 자동으로 진행되며, Project Editor에서 앱을 열 때 앱마다 한 번 실행되고, 모든 데이터를 보존합니다.

다음이 변경됩니다.

* **더 낮은 지연 시간과 더 많은 저장 공간**: 데이터베이스가 앱과 함께 Replit 인프라에서 실행되며, 저장 용량 한도가 10GB에서 20GB로 늘어납니다.
* **동일한 데이터베이스 엔진**: Helium은 Neon과 동일한 버전인 PostgreSQL 16을 사용합니다. 쿼리, 스키마, 데이터가 동일하게 작동합니다.
* **연결이 자동으로 업데이트됨**: `DATABASE_URL`이 Helium을 가리키도록 업데이트됩니다. 이전 Neon 연결 문자열은 참고용으로 Secrets에 `NEON_DATABASE_URL`로 저장됩니다.
* **개별 PG 변수 제거**: `PGHOST`, `PGPORT`, `PGUSER`, `PGPASSWORD`가 제거됩니다. 대신 `DATABASE_URL`을 사용하세요.

업그레이드 중에는 **"Upgrading your database"** 진행 화면이 표시됩니다. 대규모 데이터베이스의 경우 몇 분에서 몇 시간까지 걸릴 수 있으며, 탭을 닫고 나중에 다시 돌아와도 됩니다. 업그레이드 중 문제가 발생하면 자동으로 건너뛰고 다음에 앱을 열 때 다시 시도됩니다. 완료되면 확인 대화상자가 표시됩니다.

대부분의 빌더에게는 이후 별도의 조치가 필요하지 않습니다. 다음 중 해당하는 사항이 있다면 검토하세요.

* **하드코딩된 Neon 연결 문자열**: `neon.tech` 연결 문자열을 참조하는 코드를 대신 `DATABASE_URL` 환경 변수를 사용하도록 업데이트하세요.
* **커스텀 PostgreSQL 역할**: 역할과 권한은 자동으로 마이그레이션되지만 비밀번호는 복사할 수 없습니다. 새 데이터베이스에서 커스텀 역할의 비밀번호를 재설정하세요.

### 업그레이드 후 SSL 연결 오류

`The server does not support SSL connections` 같은 오류가 표시된다면, 연결 코드가 SSL 핸드셰이크를 강제하고 있는 것입니다. Neon은 SSL이 필요했지만, Helium은 앱과 함께 로컬에서 실행되며 SSL을 사용하지 않습니다. SSL 설정을 환경에 따라 조건부로 설정하세요.

<CodeGroup>
  ```js JavaScript theme={null}
  // Before (breaks after upgrade)
  const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
    ssl: { rejectUnauthorized: false },
  });

  // After (works in both development and production)
  const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
    ssl:
      process.env.NODE_ENV === "production"
        ? { rejectUnauthorized: false }
        : false,
  });
  ```
</CodeGroup>

<Tip>
  Drizzle, Prisma, Sequelize 같은 ORM을 사용한다면, SSL 설정을 조건부로 구성하는 방법을 해당 문서에서 확인하세요. 같은 원칙이 적용됩니다. 개발 데이터베이스에서는 SSL을 비활성화하고 프로덕션에서는 활성화하세요.
</Tip>

### 데이터베이스를 공유한 포크된 앱

레거시 Neon 시스템에서는 앱을 포크하면 원본 앱의 `DATABASE_URL`이 복사되어, 두 앱과 그 게시된 버전이 동일한 데이터베이스에 연결되었습니다. 공유된 레거시 데이터베이스는 **2026년 6월 8일**에 종료되었습니다. 게시된 앱이 작동을 멈추거나 데이터 접근 권한을 잃었다면 [공유 데이터베이스를 사용하는 게시된 앱 수정하기](/ko/features/data-and-storage/shared-database-migration) 또는 [지원팀 문의](https://replit.com/support)를 참고하세요.

## 다음 단계

* [데이터 복구](/ko/features/data-and-storage/data-recovery): 개발 또는 프로덕션 데이터를 복원합니다.
* [연결 세부 정보](/ko/features/data-and-storage/connection-details): 데이터베이스의 연결 문자열을 찾습니다.
* [데이터로 작업하기](/ko/features/data-and-storage/work-with-your-data): 데이터를 탐색, 편집, 쿼리합니다.
