API 키와 그 밖의 민감한 값을 앱의 내장 백엔드(Cloud)에 안전하게 저장하고, 시크릿과 VITE_ 환경 변수의 차이를 이해합니다.
Secrets
API 키와 그 밖의 민감한 값을 앱의 내장 백엔드(Cloud)에 안전하게 저장하고, 시크릿과 VITE_ 환경 변수의 차이를 이해합니다.
시크릿은 API 키, 토큰, 자격 증명 같은 민감한 값을 코드에 노출하지 않고 저장합니다. 이 값은 암호화되어 Edge Function에 자동으로 주입되며 브라우저에는 절대 도달하지 않습니다. 각 시크릿은 프로젝트 하나에 속하며 앱이 실행되는 동안 읽어 사용합니다. 프라이빗 패키지용 npm 토큰처럼 프로젝트가 빌드되는 동안 필요한 워크스페이스 전체 값은 빌드 시크릿이며, Enterprise 플랜에서 사용할 수 있습니다.
시크릿은 대개 직접 추가하지 않습니다. 기능에 시크릿이 필요할 때 Lovable이 채팅의 안전한 입력창을 통해 값을 입력하도록 프롬프트합니다. 예를 들어 다음과 같은 프롬프트는 Lovable이 필요한 키를 요청하게 만듭니다.
클라이언트가 온라인으로 인보이스를 결제할 수 있도록 Stripe를 연결해줘. 필요한 API 키가 있으면 나한테 물어봐줘.API 키를 채팅에 직접 붙여넣었을 때 Lovable이 어떤 도구의 키인지 인식하면, 대신 그 도구의 커넥터를 설정하겠다고 제안합니다. Connect를 선택하면 키가 이미 채워진 연결 폼이 열립니다. 워크스페이스에 그 도구의 연결이 이미 있다면 Lovable은 이 프로젝트에서 그 연결을 사용하겠다고 제안합니다. 연결은 워크스페이스에 속하므로 여러 프로젝트에서 재사용하고 다른 사용자의 사용 여부도 정할 수 있습니다.
연결을 설정했는지와 관계없이, 메시지를 보내면 Lovable이 키를 프로젝트 시크릿으로 저장합니다. 워크스페이스에서 커넥터를 추가할 권한이 없다면 Lovable은 대신 워크스페이스 admin에게 확인해 보라고 안내합니다.
secret 요청 이해하기
Lovable이 secret을 요청하면 채팅 메시지에 필요한 secret과 이유가 표시됩니다. 값을 입력하기 전에 다음을 확인하세요:
- Secret 이름:
STRIPE_SECRET_KEY,OPENAI_API_KEY처럼 Edge Function이 읽는 정확한 환경 변수 이름입니다. - 요청 직전의 채팅 메시지: 특정 API 호출, 공급자 인증, webhook 서명 등 현재 변경에 secret이 필요한 이유와 값을 얻는 위치를 설명합니다.
- 공급자 dashboard: 어떤 값을 넣을지 확실하지 않다면 Stripe, OpenAI, Resend 같은 공급자 사이트에서 같은 이름의 API key나 자격 증명을 찾으세요. 입력란은 올바른 값의 예시를 보여 주고 예상 형식과 다르면 경고합니다. 형식 검사가 틀릴 수 있으므로 경고가 제출을 막지는 않습니다.
아직 secret을 추가하지 않으려면 Skip을 선택하고 용도를 설명하거나 나머지 기능부터 빌드하도록 Lovable에 요청하세요. secret에 의존하는 기능은 값을 추가할 때까지 작동하지 않습니다. 준비되면 채팅에서 요청하여 보안 폼을 다시 여세요.
시크릿을 직접 관리하려면 프로젝트 툴바에서 More → Cloud → Secrets로 이동합니다.
시크릿 관리
Secrets 뷰는 각 시크릿의 이름과 생성 날짜를 나열합니다. 값은 절대 표시되지 않습니다.
- Add secret은 이름과 값 쌍을 하나 이상 입력할 수 있는 대화상자를 엽니다.
- Delete는 시크릿의 ... 메뉴에 있으며 시크릿을 삭제합니다. 되돌릴 수 없으며, 어떤 기능이 여전히 그 값을 필요로 한다면 다시 추가하기 전까지 앱이 작동하지 않습니다.
- 시크릿은 쓰기 전용입니다. 한번 저장한 시크릿의 값은 Lovable에서 다시 볼 수 없으며 교체하거나 삭제만 할 수 있습니다. 키를 잃어버렸다면 그 키를 발급한 서비스에서 새로 생성하세요. 프로젝트를 remix할 때 시크릿은 복사되지 않습니다.
값을 저장하면 Lovable이 값의 앞뒤 공백과 줄 바꿈을 제거하므로, 복사 중에 딸려 온 불필요한 문자가 저장된 시크릿에 남지 않습니다. 값 안쪽의 줄 바꿈은 유지되므로 private key 같은 여러 줄 값은 그대로 보존됩니다. 공백이나 줄 바꿈만으로 이루어진 값은 거부됩니다. 이전에 저장한 시크릿이 불필요한 문자 때문에 작동하지 않는다면 값을 다시 저장해 깨끗하게 보관하세요.
일부 시크릿에는 배지가 붙습니다.
- Lovable: Lovable이 관리하며 플랫폼 작동에 필요합니다. 삭제할 수 없습니다.
- Not in use: 같은 이름의 다른 시크릿이 런타임에서 우선합니다.
커넥터가 추가한 시크릿에는 배지가 없습니다. 값은 연결이 관리하므로 시크릿이 아니라 연결을 제거합니다. 시크릿의 ... 메뉴에서 Manage connection을 선택하세요.
내장 AI가 사용하는 LOVABLE_API_KEY 시크릿에는 Rotate 동작이 있습니다. 키가 노출되었다고 의심되면 교체하세요. Lovable이 새 키를 발급하고 Edge Function 환경을 자동으로 업데이트합니다. 교체하려면 editor 이상의 접근 권한이 필요합니다.
워크스페이스 빌드 시크릿
Enterprise 플랜에서는 워크스페이스 전체에 설정한 빌드 시크릿도 이 목록에 나타나며, 프로젝트 시크릿과 함께 알파벳순으로 정렬됩니다. 빌드 시크릿은 흐리게 표시된 행에 놓이고 이름 옆에 워크스페이스 아바타가 붙습니다.
- 워크스페이스 시크릿은 여기서 읽기 전용입니다. 이름만 보이고 값은 절대 보이지 않습니다. 오래된 워크스페이스 시크릿은 Created 열이 비어 있을 수 있습니다.
- 유일한 동작은 View workspace secrets이며, Settings → Build & deploy → Build secrets를 엽니다. 추가, 변경, 삭제는 워크스페이스 admin이나 owner로서 그곳에서 합니다.
- 이 행이 보이는지는 이 프로젝트에 대한 접근 권한이 아니라 워크스페이스 역할에 따라 결정됩니다. 워크스페이스 editor 이상의 접근 권한이 필요하므로, 외부 협업자는 워크스페이스 시크릿을 보지 못한 채 프로젝트 자체 시크릿만 관리합니다.
- 프로젝트 시크릿은 워크스페이스 시크릿과 같은 이름을 쓸 수 있습니다. 이 경우 목록에는 경고 아이콘이 붙은 프로젝트 행만 표시되고, 앱은 프로젝트 값으로 실행됩니다. 프로젝트가 빌드되는 동안에는 워크스페이스 값이 계속 적용됩니다. 프로젝트 시크릿은 빌드에 관여하지 않기 때문입니다.
Secrets vs. VITE_ environment variables
Lovable의 Secrets 관리자는 백엔드 값 전용입니다. Edge Function과 서버 사이드 통합에서 사용하는 값만 여기에 저장합니다. VITE_ 접두사가 붙은 값은 빌드 타임에 브라우저에 노출되는 값이므로 Secrets가 아닌 프로젝트의 .env 파일에 보관해야 합니다.
- 백엔드 시크릿(Secrets에 저장):
STRIPE_SECRET_KEY,RESEND_API_KEY,OPENAI_API_KEY, 서드파티 서비스 자격 증명, 브라우저에 절대 노출되어서는 안 되는 모든 값. - 프런트엔드 변수(
.env에 저장):VITE_접두사가 붙은 모든 값. 예:VITE_SUPABASE_URL,VITE_SUPABASE_PUBLISHABLE_KEY. 이 값들은 빌드 타임에 클라이언트 번들에 포함되며 공개되어도 안전합니다. Lovable 코드 에디터 또는 동기화된 Git 저장소의.env파일에서 확인하고 편집할 수 있습니다.
Lovable 프로젝트에서 .env를 .gitignore에 추가하지 마세요. Lovable은 미리보기와 배포 빌드를 생성할 때 VITE_* 값이 필요하므로 .env가 저장소에 커밋되어 있어야 합니다. gitignore하면 미리보기가 작동하지 않습니다.
Secrets에 VITE_ 접두사가 붙은 이름을 추가하려 하면 Lovable이 "VITE_ prefixed variables are build-time browser values and should be defined in .env files, not in secrets." 메시지와 함께 거부합니다.
Reserved secret name prefixes
다음 이름 접두사는 Lovable Cloud가 자동으로 관리하며 Secrets UI에서 생성하거나 덮어쓸 수 없습니다.
SUPABASE_: 예를 들어SUPABASE_URL,SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEY,SUPABASE_DB_URL. Cloud(또는 연결된 Supabase 프로젝트)가 활성화될 때 Lovable이 자동으로 채웁니다.LOVABLE_: 내장 AI가 사용하는 Lovable API 키 같은 Lovable 관리형 값을 위해 예약됩니다.
이 값들은 직접 추가할 필요가 없습니다. 이미 Edge Function 환경에 존재하므로 함수 코드에서 직접 참조할 수 있습니다(예: Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")).
프로젝트가 Lovable Cloud 대신 외부 Supabase 연결을 사용한다면 시크릿은 Supabase에서 관리됩니다. 백엔드 뷰에 표시되는 Manage secrets 버튼이 Supabase 프로젝트의 대시보드를 엽니다.