개발(dev), 스테이징(staging), 프로덕션(prod)을 위한 시크릿 및 설정 관리
개발, 스테이징, 프로덕션 환경에서 API 키, SMTP 자격증명, 웹훅 비밀 등을 유출 없이 안전하게 관리하는 간단한 패턴과 실무 지침을 배웁니다.

우리가 해결하려는 문제
시크릿과 설정 관리는 민감한 값을 실수로 복사되거나 캐시되거나 공유되는 곳에서 제외하는 것입니다.
시크릿은 API 키, 데이터베이스 비밀번호, SMTP 로그인, 웹훅 서명 비밀처럼 접근을 허용하거나 신원을 증명하는 모든 값입니다. 일반 설정(config) 은 기능 플래그 이름, 타임아웃, 공개 사이트의 기본 URL처럼 공개되어도 해가 없는 값입니다.
개발(dev), 스테이징(staging), 프로덕션(prod)은 서로 다른 목적을 가지므로 값도 달라야 합니다. Dev는 빠른 반복과 안전한 테스트를 위한 환경이고, Staging은 프로덕션과 비슷하게 보이되 격리되어야 하며, Prod는 잠금, 감사, 안정성이 중요합니다. 같은 시크릿을 모두에 재사용하면, 개발에서의 유출이 프로덕션 침해로 이어질 수 있습니다.
“빌드로 유출된다”는 것은 시크릿이 컴파일된 백엔드 바이너리, 모바일 앱 번들, 프런트엔드 번들 같은 패키지된 산출물의 일부가 되는 것을 의미합니다. 시크릿이 빌드 아티팩트에 들어가면 제어할 수 없는 곳으로 퍼질 수 있습니다.
우발적 유출은 보통 몇 가지 예측 가능한 경로에서 발생합니다:
- 소스 코드, 샘플, 주석에 시크릿을 하드코딩
- 로컬
.env파일이나 설정을 리포지토리에 커밋 - 프런트엔드나 모바일 빌드에 시크릿을 베이킹
- 로그, 크래시 리포트, 빌드 출력에 시크릿을 출력
- “빠른 테스트를 위해” 프로덕션 값을 스테이징으로 복사
간단한 예: 개발자가 이메일을 “되게 하려고” SMTP 비밀번호를 설정 파일에 넣고 그 파일이 커밋되거나 릴리스 빌드에 포함됩니다. 나중에 비밀번호를 교체해도, 이전 빌드는 CI 캐시나 앱 스토어 업로드, 누군가의 다운로드 폴더에 남아 있을 수 있습니다.
목표는 간단합니다: 시크릿을 코드와 빌드 밖에 두고, 환경별로 적절한 값을 런타임에 주입하거나 안전한 배포 단계에서 처리하는 것입니다.
대부분의 유출을 막는 기본 원칙
안전성은 매번 지키는 몇 가지 습관에서 옵니다.
시크릿을 코드와 빌드 출력에서 제외하세요. 코드는 복사되고, 리뷰되고, 로깅되고, 캐시되고, 업로드됩니다. 빌드도 퍼집니다: 아티팩트는 CI 로그, 앱 번들, 컨테이너 레지스트리, 공유 폴더로 갈 수 있습니다. 커밋되거나 컴파일되는 모든 것을 공개된 것으로 취급하세요.
환경별로 자격증명을 분리하세요 (최소 권한 원칙). 개발 키는 오직 개발 환경에서만 작동하게 하고 권한을 좁히세요. 랩탑이나 테스트 서버에서 키가 유출되더라도 피해가 제한되도록 합니다. 이 원칙은 SMTP 사용자, DB 비밀번호, 웹훅 서명 비밀에도 적용됩니다.
회전을 일상화하세요. 언젠가 키를 교체할 것이라고 가정하고 설계하세요. 코드 수정이나 모든 앱 재빌드 없이 값을 교체할 수 있어야 합니다. 많은 시스템에서 이는 런타임에 시크릿을 읽는다는 뜻이며, 전환 동안 두 개의 활성 시크릿을 허용하는 것을 의미합니다.
접근을 제한하고 기록하세요. 시크릿은 필요한 서비스만 읽을 수 있어야 하며, 해당 환경에서만 읽을 수 있어야 합니다. 사람의 접근은 드물고 시간 제한적이며 감사 가능해야 합니다.
간단한 규칙 세트:
- 시크릿을 커밋하거나 티켓, 채팅, 스크린샷에 붙여넣지 마세요.
- dev, staging, prod에 대해 별도 자격증명을 사용하세요.
- 값을 이미지나 모바일 빌드에 베이킹하지 말고 런타임 설정을 우선하세요.
- 의심스러운 노출이 있거나 정기적으로 회전하세요.
- 누가 무엇을 읽을 수 있는지 제한하고 접근 로그를 보관하세요.
이 원칙은 전통적인 코드 스택이든 AppMaster 같은 노코드 플랫폼이든 동일하게 적용됩니다. 안전한 경로는 동일합니다: 시크릿을 빌드 밖에 두고 사용되는 곳으로만 엄격히 범위를 좁히세요.
시크릿이 가장 자주 유출되는 곳
대부분의 유출은 “해킹”이 아니라 평상시 작업 중 일어납니다: 빠른 테스트, 친절한 스크린샷, 과도한 빌드 출력. 먼저 어디에서 실수가 일어나는지 아는 것이 출발점입니다.
소스 컨트롤은 고전적인 원인입니다. 누군가가 API 키를 설정 파일에 붙여넣고 커밋하면 브랜치, 풀 리퀘스트, 코드 리뷰 코멘트를 통해 퍼집니다. 나중에 제거해도 히스토리나 복사된 패치에 남아 있을 수 있습니다.
사용자에게 배포되는 모든 것은 또 다른 큰 유출 경로입니다. 프런트엔드 번들과 모바일 바이너리는 쉽게 분석됩니다. 자바스크립트나 iOS/Android 앱, 또는 베이킹된 설정에 시크릿이 들어가 있다면 공개된 것으로 간주하세요. 클라이언트 앱은 공개 식별자만 가질 수 있고, 개인키는 가질 수 없습니다.
시크릿은 자동화와 지원 과정의 “도움되는 잡음”을 통해서도 유출됩니다. 흔한 예로는 CI 로그가 환경 변수를 에코하거나, 디버그 출력에 SMTP 자격증명을 포함하거나, 크래시 리포트가 설정과 아웃바운드 요청을 캡처하는 경우, 컨테이너 이미지와 빌드 캐시가 .env 파일을 저장하는 경우, 지원 티켓에 로그나 설정 스크린샷이 붙는 경우입니다.
흔한 패턴은 시크릿이 빌드 파이프라인에 한 번 들어가면 컨테이너 레이어, 캐시된 아티팩트, 로그, 티켓 등으로 복사되는 것입니다. 해결책은 대개 단일 도구의 문제가 아니라 습관입니다: 시크릿을 코드, 빌드, 사람이 붙여넣는 곳에서 멀리 두세요.
흔한 시크릿 유형과 위험도
어떤 시크릿인지, 유출되면 무엇을 할 수 있는지, 어디에 절대 있어서는 안 되는지를 아는 것이 도움이 됩니다.
API 키(Stripe, 지도, 분석 등)는 종종 프로젝트 수준 자격증명입니다. 앱을 식별하고 카드 결제, 사용량 읽기 같은 특정 작업을 허용합니다. 사용자 토큰과는 다릅니다. 토큰은 특정 사용자 세션을 나타내며 만료되어야 합니다. 많은 API 키는 자동 만료되지 않아 유출 시 더 큰 피해를 줍니다.
SMTP 자격증명은 보통 이메일 서버의 사용자 이름과 비밀번호입니다. 유출되면 공격자가 귀하의 도메인에서 스팸을 보내고 배달성에 큰 피해를 줄 수 있습니다. API 기반 이메일 제공자는 원시 SMTP 비밀번호 대신 API 키와 범위 권한을 제공해 더 안전할 수 있지만, 발송 권한이 있는 키가 유출되면 위험은 여전합니다.
웹훅 시크릿(서명 비밀 또는 검증 키)은 수신 요청을 보호합니다. 서명 비밀이 유출되면 누군가가 "결제 완료"나 "구독 취소" 같은 이벤트를 위조해 시스템을 속일 수 있습니다. 위험은 단순한 데이터 노출에 그치지 않고, 비즈니스 로직이 위조된 이벤트로 실행될 수 있다는 점입니다.
그 밖에 영향력이 큰 시크릿으로는 데이터베이스 URL(종종 암호 포함), 서비스 계정 자격증명, 암호화 키가 있습니다. 데이터베이스 URL이 유출되면 데이터 전체가 탈취될 수 있고, 암호화 키가 유출되면 과거·미래 데이터의 개인정보보호가 영구적으로 깨질 수 있으며 회전이 어렵습니다.
영향도를 생각하는 간단한 분류:
- 돈을 쓰거나 동작을 트리거할 수 있는 것: 결제 키, 관리자 API 키, 웹훅 서명 비밀
- 당신을 사칭할 수 있는 것: SMTP 비밀번호, 이메일 발송 키, 메시징 봇 토큰
- 모든 데이터를 노출할 수 있는 것: 데이터베이스 자격증명, 클라우드 서비스 계정
- 영구적으로 프라이버시를 깨뜨릴 수 있는 것: 암호화 키, 서명 키
- 보통은 공개해도 되는 것: 브라우저용 공개 키(도메인/앱으로 제한해야 함)
이들 중 비밀 API 키, SMTP 자격증명, 데이터베이스 비밀번호, 서비스 계정, 개인 암호화 키, 웹훅 서명 비밀은 클라이언트 앱(웹, iOS, Android)에 절대 넣지 마세요. 클라이언트가 서드파티 API를 호출해야 하면 백엔드를 통해 라우팅하여 비밀은 서버에만 남게 하세요.
빌드에 시크릿을 넣지 않는 저장 패턴
안전한 기본은 간단합니다: 컴파일되거나 내보내지는 것에 시크릿을 베이킹하지 마세요. 빌드는 공개된 아티팩트로 취급하세요.
환경마다 적절한 저장소 선택
로컬 개발에서는 설정 파일이 괜찮을 수 있지만(버전 관리에서 제외되고 교체하기 쉬운 로컬 전용 .env 스타일 파일 등) 스테이징과 프로덕션에서는 실제 시크릿 스토어를 사용하세요: 클라우드 제공자의 시크릿 매니저, 전용 Vault, 플랫폼의 보호된 환경 설정 등.
환경 변수는 런타임에 주입하기 쉽고 코드베이스와 분리되므로 기본으로 좋습니다. 중요한 점은 타이밍입니다: 빌드 타임 주입보다 런타임 주입이 안전합니다. 런타임 주입은 시크릿이 빌드 출력의 일부가 되지 않기 때문입니다.
많은 팀에 실용적인 분리 예시:
- 로컬 개발: 각 개발자 기계별 고유 로컬 환경 변수나 로컬 시크릿 파일
- 스테이징: 스테이징 전용으로 범위가 좁혀진 시크릿 매니저나 보호된 환경 설정
- 프로덕션: 더 엄격한 접근 제어, 감사 로그, 회전 정책을 갖춘 시크릿 매니저
명명과 경계 일관성 유지
모든 환경에서 같은 키 이름을 사용해 앱 동작을 일관되게 유지하세요: SMTP_HOST, SMTP_USER, SMTP_PASS, STRIPE_SECRET_KEY, WEBHOOK_SIGNING_SECRET. 값만 바뀌어야 합니다.
환경이 중요한 서비스(결제, 이메일, 웹훅)가 되면 가능한 경우 환경별로 프로젝트나 클라우드 계정을 분리하세요. 예를 들어 스테이징 전용 Stripe 키와 웹훅 시크릿을 보관하면 스테이징 실수가 프로덕션에 영향을 주지 않습니다.
AppMaster 같은 플랫폼으로 배포한다면 백엔드 서비스의 런타임 환경 설정을 사용해 시크릿이 서버 사이드에만 남도록 하세요. 그래야 생성된 코드나 클라이언트 앱에 시크릿이 포함되지 않습니다.
dev, staging, prod 간 단계별 설정
기본적으로 시크릿을 잘못 사용하기 어렵게 만드세요.
-
무엇이 어디에 쓰이는지 목록화하세요. API 키, SMTP 계정, 웹훅 서명 비밀, 데이터베이스 비밀번호, JWT 서명 키, 서드파티 토큰 등을 포함하세요. 각 항목에 대해 소유자(팀 또는 벤더), 읽는 구성요소(백엔드, 워커, 모바일, 웹), 현실적으로 회전 가능한 주기를 기록하세요.
-
dev, staging, prod용으로 별도 값을 만들고 권한도 분리하세요. 개발용 시크릿은 노트북과 로컬 컨테이너에서 안전하게 써야 합니다. 스테이징은 프로덕션처럼 보이되 절대 프로덕션 자격증명을 공유하지 마세요. 프로덕션은 기본적으로 프로덕션 런타임 아이덴티티만 읽을 수 있고 인간의 접근은 기본 비허용으로 두세요.
-
시크릿을 빌드 타임이 아닌 런타임 구성으로 이동하세요. 빌드 중에 시크릿이 들어가면 빌드 로그, Docker 레이어, 클라이언트 번들, 크래시 리포트에 남을 수 있습니다. 간단한 규칙: 빌드는 안전하게 복사될 수 있어야 하고, 시크릿은 앱이 시작될 때만 주입하세요.
-
일관된 배포 흐름을 사용하세요. 문제가 덜 발생하는 한 방법:
- 환경별로 하나의 시크릿 스토어를 만들거나 환경별 네임스페이스를 엄격히 구분
- 애플리케이션 런타임 아이덴티티에 자기 환경의 시크릿만 읽을 권한 부여
- 시작 시 환경 변수나 마운트된 파일로 시크릿을 주입하고 이미지나 클라이언트 번들에는 넣지 않기
- 모든 시크릿에 회전 규칙(만료일, 소유자, 알림 주기) 추가
- 스테이징 배포가 프로덕션 시크릿을 읽으려 하면 실패하도록 하드 테스트 추가
락다운은 누가 무엇을 읽을 수 있는지를 줄이는 것입니다. 공유 계정 회피, 장기 토큰 최소화, 읽기 권한을 쓰기 권한보다 좁게 유지하세요.
노코드 플랫폼인 AppMaster을 사용하더라도 같은 접근법이 유효합니다: 서드파티 자격증명은 환경별 런타임 설정에 두고 생성된 빌드는 팀 내부에서라도 공개 아티팩트로 취급하세요. 이 한 가지 결정으로 많은 우발적 유출을 막을 수 있습니다.
API 키와 SMTP 자격증명에 대한 실용 패턴
많은 유출은 앱이 “무언가를 보내야” 할 때 빠른 해결책으로 자격증명을 클라이언트나 설정 파일에 붙여넣는 상황에서 발생합니다. 기본 규칙: 웹·모바일 클라이언트는 SMTP 사용자 이름, SMTP 비밀번호, 발송 가능한 공급자 키를 절대 보유하지 마세요.
이메일은 가능하면 원시 SMTP 대신 이메일 제공자의 API 키를 사용하세요. API 기반 발송은 권한 범위를 좁히고(메일 전송만 허용), 회전과 모니터링이 쉬워집니다. SMTP를 써야 한다면 서버 사이드에만 두고 백엔드가 메일 서버와 통신하는 유일한 지점이 되게 하세요.
안전한 실무 설정 예시:
- 이메일 발송을 백엔드 엔드포인트 뒤에 두세요(예: "비밀번호 재설정 이메일 발송", "영수증 발송").
- API 키나 SMTP 비밀번호는 소스 코드나 UI 설정이 아니라 백엔드의 환경 시크릿으로 저장하세요.
- dev, staging, prod 별도 자격증명을 사용하세요(가능하면 별 계정과 발신 도메인).
- 스테이징 수신자 허용목록을 두어 승인된 주소로만 발송되게 하세요.
- 전달 결과(message ID, 제공자 응답, 수신자 도메인)는 로깅하되 자격증명이나 전체 메시지 본문은 기록하지 마세요.
스테이징과 프로덕션 분리는 생각보다 중요합니다. 스테이징 시스템이 동일한 발신자·수신자 규칙을 공유하면 실수로 실제 고객에게 스팸을 보낼 수 있습니다. 간단한 가드레일로 스테이징에서는 허용목록에 없는 수신자에게는 발송을 차단하세요.
예: AppMaster로 고객 포털을 만들고 모바일 앱에서 "로그인 코드를 이메일로 전송"을 트리거한다고 합시다. 앱이 백엔드에 호출을 보내면 백엔드는 스테이징 또는 프로덕션 메일 시크릿을 환경에서 읽어 이메일을 보냅니다. 테스터가 스테이징을 쓰면 허용목록이 실제 고객으로 가는 메시지를 차단하고, 로그는 키를 노출하지 않고 발송 성공 여부만 보여줍니다.
웹훅 시크릿: 서명, 검증, 회전
웹훅 보안의 핵심 규칙: 모든 요청을 서버에서 검증하고 시크릿은 절대 백엔드를 벗어나지 않게 하세요. 시크릿이 웹이나 모바일 앱으로 배송되면 더 이상 시크릿이 아닙니다.
서명과 검증
웹훅은 들어오는 카드 결제처럼 다루세요: 검증되기 전에는 아무 것도 받아들이지 마세요. 공급자가 페이로드와 공유 시크릿으로 계산한 서명 헤더를 전송합니다. 서버는 기대 서명을 재계산하여 비교합니다.
간단한 검증 흐름:
- 전달받은 원본 요청 바디를 그대로 읽기(재포맷 금지)
- 웹훅 시크릿으로 기대 서명을 계산
- 상수 시간 비교(constant-time comparison)로 비교
- 누락되거나 유효하지 않은 서명은 401 또는 403으로 거부
- 그 다음에 JSON을 파싱하고 이벤트 처리
환경별로 별도 웹훅 엔드포인트와 시크릿을 사용하세요. 이렇게 하면 개발 도구나 테스트 시스템이 프로덕션 동작을 트리거하지 못하게 하고, 사고 시 격리가 쉬워집니다. AppMaster에서는 보통 배포별 환경 설정에 서버 사이드 변수로 웹훅 시크릿을 저장합니다.
재전송 방지와 회전
서명은 변조를 막지만 재전송(replay)을 자동으로 막지는 않습니다. 각 요청을 한 번만 유효하게 만들거나 짧은 시간 창 안에서만 유효하게 검증하세요. 일반적 방법은 타임스탬프 헤더와 엄격한 시간 허용치, 논스(nonce), 혹은 중복 처리 방지를 위해 저장하고 두 번 처리하지 않는 idempotency 키 등이 있습니다.
회전은 필요해지기 전에 계획하세요. 안전한 패턴은 짧은 중복 기간 동안 두 개의 활성 시크릿을 허용하는 것입니다: 공급자 업데이트 동안 새 시크릿과 옛 시크릿 둘 다 허용하고, 전환 후 옛 시크릿을 폐기하세요. 종료 시점을 명확히 정하고 옛 서명 트래픽을 모니터링하세요.
로그에는 주의하세요. 웹훅 페이로드는 이메일, 주소, 결제 메타데이터를 포함할 수 있습니다. 이벤트 ID, 타입, 검증 결과 등은 기록하되 전체 페이로드나 헤더처럼 민감한 정보를 출력하지 마세요.
피해야 할 흔한 실수
대부분의 유출은 개발 시 편리해서 생긴 습관이 스테이징과 프로덕션에 복사되면서 발생합니다.
로컬 .env 파일을 영원히 안전한 장소로 취급하는 것은 흔한 실수입니다. 노트북에서는 괜찮지만 리포지토리로 복사되거나 공유 ZIP, 도커 이미지에 포함되는 순간 위험합니다. .env를 사용한다면 버전 관리에서 제외하고 실제 배포에서는 환경 설정으로 대체하세요.
같은 자격증명을 모든 환경에서 사용하는 것도 빈번한 문제입니다. 하나의 API 키를 dev, staging, prod에서 재사용하면 dev의 실수 하나가 프로덕션 사고로 이어집니다. 환경별 키를 사용하면 회전, 폐기, 감사가 쉬워집니다.
웹 프런트엔드와 모바일 앱에 빌드 타임에 시크릿을 주입하는 것은 특히 위험합니다. 시크릿이 컴파일 번들이나 앱 패키지에 들어가면 추출될 수밖에 없습니다. 프런트엔드는 공개 설정(예: API 기본 URL)만 받고, 민감한 것은 서버에 두세요.
로그는 조용한 유출원입니다. "임시" 디버그 출력이 몇 달 동안 남아 배송될 수 있습니다. 값을 확인해야 한다면 마스킹된 형태(예: 마지막 4자리)만 로그로 남기고 바로 제거하세요.
보통 문제가 있다는 신호(레드 플래그)
- 시크릿이 Git 히스토리에 나타남(나중에 삭제하더라도)
- 한 키가 모든 환경에서 작동함
- 모바일 앱에 공급자 키나 SMTP 비밀번호 포함
- 지원 티켓에 헤더가 포함된 전체 요청 덤프
- 값이 base64로 인코딩되거나 폼 필드로 숨겨져 있음
인코딩은 보호 수단이 아니며, 숨긴 필드는 여전히 사용자에게 보입니다.
AppMaster로 빌드하는 경우 민감한 값은 각 배포 대상의 환경 수준 구성에 두고 클라이언트 앱에는 비민감 설정만 전달하세요. 현실 점검으로는 컴파일된 아티팩트와 로그에서 sk_live, Bearer , SMTP 호스트명 같은 패턴을 검색해 보세요.
각 통합에 대한 “킬 스위치”를 문서화하세요: 키를 비활성화할 위치와 5분 이내에 누가 할 수 있는지.
자주 묻는 질문
비밀(시크릿)은 API 키, 데이터베이스 비밀번호, SMTP 로그인, 웹훅 서명 비밀처럼 신원 확인이나 접근 권한을 부여하는 모든 값입니다. 설정(config)은 타임아웃, 기능 플래그 이름, 공개 사이트의 기본 URL처럼 공개되어도 문제가 없는 값입니다.
스크린샷이나 저장소에서 복사되었을 때 피해를 줄 수 있는 값이라면 그것을 비밀로 다루세요.
노출 범위를 작게 유지하려면 환경별로 별도 시크릿을 사용하세요. 개발용 노트북, 테스트 서버, 스테이징에서 키가 유출돼도 그 키로 프로덕션을 여는 일이 없어야 합니다.
환경을 분리하면 개발과 스테이징에서는 더 관대하게, 프로덕션에서는 더 엄격하고 감사 가능한 권한을 적용할 수 있습니다.
컴파일되거나 번들된 산출물은 쉽게 복사·검사될 수 있다고 가정하세요. 시크릿을 소스 코드나 빌드 타임 변수에 넣지 말고, 런타임에 환경 변수나 시크릿 매니저로 주입하세요.
비밀번호를 재배포 없이 교체할 수 있다면 안전한 경로에 서 있는 경우가 많습니다.
개인 개발용 .env 파일은 버전 관리에 올라가지 않고 이미지나 아티팩트에 포함되지 않는다면 개인 개발에서는 괜찮습니다. 하지만 리포지토리에 들어가거나 도커 이미지에 베이킹되는 순간 위험해집니다.
스테이징과 프로덕션에서는 보호된 환경 설정이나 시크릿 매니저를 사용하는 편이 안전합니다.
클라이언트 앱(웹, iOS, Android)에는 개인 키, SMTP 비밀번호, 데이터베이스 자격증명, 웹훅 서명 비밀 등을 넣지 마세요. 사용자 기기나 브라우저에서 실행되는 코드는 결국 추출될 수 있다고 가정해야 합니다.
클라이언트가 제3자 API를 호출해야 하면 백엔드를 경유하게 하여 비밀은 서버에만 남기세요.
회전(rotation)을 설정 변경으로 처리하세요. 시크릿을 코드베이스 밖에 두고, 서비스를 갱신하여 새 값을 적용하도록 하며, 각 키의 소유자와 알림 주기를 정하세요.
가능하면 짧은 중복 기간을 허용해(새 키와 옛 키 모두 허용) 전환을 매끄럽게 하고, 확인 후 옛 키를 폐기하세요.
모든 웹훅 요청은 서버에서 시크릿으로 검증하세요. 원본 요청 바디를 그대로 읽어 서명을 계산하고 비교한 뒤에야 이벤트를 처리해야 합니다.
환경별로 다른 엔드포인트와 시크릿을 사용하면 테스트 이벤트가 프로덕션 동작을 유발하는 일을 막을 수 있습니다.
로그에 시크릿, 전체 헤더, 전체 페이로드를 출력하지 마세요. 문제 해결에 필요한 경우 이벤트 ID, 상태 코드, 마스킹된 값 등 메타데이터만 남기고 자격증명은 기록하지 마세요.
티켓이나 채팅에 붙여넣는 로그는 잠재적으로 공개된 것으로 간주하고 공유 전에 반드시 가려주세요.
스테이징은 프로덕션과 동작은 비슷하게 하되 완전히 분리되어야 합니다. 가능하면 공급업체 계정도 분리하고, SMTP 자격증명·결제 키·웹훅 시크릿을 각각 따로 두세요.
스테이징이 프로덕션 시크릿 저장소나 데이터베이스를 읽을 수 없도록 가드레일을 두는 것이 좋습니다.
AppMaster에서 빌드할 때는 각 배포 대상 환경의 런타임 설정에 민감한 값을 두고 UI 화면이나 클라이언트 설정에 넣지 마세요. 이렇게 하면 웹·모바일 빌드에는 공개 설정만 들어가고 시크릿은 서버에 남습니다.
환경별로 같은 변수 이름을 유지하고 값만 바꾸는 방식이 좋습니다.


