← 문서 포털
Operations & Deployment

NestPay 운영·배포 가이드

개발(dev) → 테스트(sandbox) → 운영(live) 3단계 환경 운영과 데이터베이스 동기화(Flyway) 절차입니다. 담당자가 이 문서만 따라 하면 각 환경을 안전하게 올리고, DB 변경을 순서대로 반영할 수 있습니다.

1. 환경 3단계 구조

환경은 NESTPAY_ENV 값으로 구분합니다. dev 가 아니면(sandbox·live) 개발용 기본 시크릿으로는 서버가 기동되지 않습니다(SecretsGuard, 보안).

환경NESTPAY_ENV용도 / 특징
local (dev)dev개발자 PC. 도커 컴포즈(API+MariaDB). 개발용 기본 시크릿 허용, 스텁 외부연동. 실데이터 없음.
sandboxsandbox테스트 서버. 운영과 동일 구성이되 테스트 시크릿·테스트 인증사(테스트베드). 발주사·QA 검증용. 실데이터 아님.
livelive운영 서버. 운영 시크릿·실 인증사·실계좌. 실데이터. 접속·배포 제한(물리 분리).

코드는 환경별로 분기하지 않습니다. 같은 산출물(jar·앱·admin)에 환경변수만 달리 주입해 동작을 바꿉니다(도메인·DB·시크릿·인증사).

2. 환경변수 (환경별 주입)

변수설명 · dev 기본값
NESTPAY_ENVdev | sandbox | live. 기본 dev. live/sandbox 는 반드시 지정.
SERVICE_DOMAIN서비스 도메인. 기본 nestpay.co.kr. api.·admin.·www. 서브도메인이 자동 파생.
DB_HOST / DB_PORT / DB_NAME / DB_USER / DB_PASSWORDDB 접속. live/sandbox 는 강한 비밀번호 필수(기본 nestpay 사용 시 부팅 거부).
APP_CRYPTO_KEY민감정보(*_enc) 암호화 키. 운영 필수(기본값 사용 시 부팅 거부). 환경마다 다르게, 절대 유출 금지·분실 시 복호화 불가.
ADMIN_TOKEN_SECRET토큰(관리자·회원·매장·pinPass) 서명 키. 운영 필수(기본값 사용 시 부팅 거부).
INTERNAL_API_KEY입금 웹훅 인증 키. 운영 필수(기본값 사용 시 부팅 거부).
STORAGE_ENDPOINT파일/이미지 전용 오브젝트 스토리지(S3 호환) 주소. 운영은 https://storages.nestpay.co.kr. 로컬 기본 http://nestpay-storage:9000(MinIO 컨테이너).
STORAGE_ACCESS_KEY / STORAGE_SECRET_KEY스토리지 접근 키/비밀 키. STORAGE_SECRET_KEY 는 운영 필수(기본값 nestpay-secret 사용 시 부팅 거부) — 남으면 모든 파일 열람·교체·삭제 가능.
STORAGE_BUCKET파일을 담을 버킷 이름. 기본 nestpay-files. 없으면 최초 업로드 때 자동 생성.
SWAGGER_ENABLEDAPI 문서(/swagger-ui, /v3/api-docs) 노출 여부. 기본 true. 운영은 반드시 false(내부 API 은닉).
TRUSTED_PROXIES / ADMIN_BOOTSTRAP_ALLOW신뢰 프록시(nginx) IP, 관리자 화이트 IP 미등록 시 초기 허용 대역(첫 IP 등록 후 자동 무시).
SERVER_PORT / TZ서버 포트(기본 8080), 시간대(Asia/Seoul).

주의 APP_CRYPTO_KEY는 환경별로 고정해야 합니다. live 키가 바뀌면 기존 암호화 데이터(카드·계좌·OTP)를 복호화할 수 없습니다. 안전한 비밀 보관소(Vault/KMS/환경파일)로 관리하세요.

운영(sandbox·live)에서 부팅 가드(SecretsGuard)가 개발 기본값을 거부하는 시크릿: DB_PASSWORD · APP_CRYPTO_KEY · ADMIN_TOKEN_SECRET · INTERNAL_API_KEY · STORAGE_SECRET_KEY. 하나라도 기본값이면 서버가 켜지지 않습니다.

3. 데이터베이스 동기화 (Flyway 마이그레이션)

DB 변경은 항상 마이그레이션 파일로만 합니다. 운영 DB를 직접 손대지 않습니다. 서버가 기동될 때 Flyway 가 밀린 마이그레이션을 순서대로 자동 적용합니다.

위치·규칙

승격 절차 (dev → sandbox → live)

  1. dev 작성·검증: 로컬에서 새 V{n} 작성 → 서버 기동 → 적용·회귀검증. (스키마 정본 db/schema.dbml·db/queries.sql도 함께 갱신)
  2. 커밋·동기화: git.madeitup.kr 에 커밋(추후 페이네스트 git 으로 미러링).
  3. sandbox 반영: sandbox 서버가 새 코드로 재기동되면 Flyway 가 자동 적용. 적용 여부 확인:
    SELECT version, description, success, installed_on
    FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 5;
    QA·발주사 검증.
  4. live 반영: 배포 전 DB 백업(mysqldump) → 운영 서버 재기동 → Flyway 자동 적용 → 위 쿼리로 success=1 확인 → 헬스체크(/health).

롤백

실패한 마이그레이션이 남으면(success=0) 다음 기동이 막힙니다. 원인 수정 후 실패 행 정리(DELETE FROM flyway_schema_history WHERE success=0) → 재기동. sandbox 에서 먼저 재현·해결하세요.

4. 배포 절차

확정 대기 물리 서버 분리로 접속 PC가 제한적이며, 구체 배포 방식은 계약 후 확정합니다. 아래는 현재 로컬 구성 기준의 표준 절차(확정 시 갱신).

운영 토폴로지(제공 인프라 기준)

  1. 산출물 빌드: API ./gradlew build(jar), 앱 flutter build, admin 정적 파일.
  2. 서버 이미지/컨테이너 갱신(도커 컴포즈) — docker compose up -d --build. 환경변수는 서버측 .env/시크릿으로 주입.
  3. 기동 시 Flyway 자동 적용 → /health 200 확인 → 관리자·앱 스모크 테스트.
  4. 앱은 스토어(App Store·Play) 심사 후 배포. 강제 업데이트는 관리자 전역설정의 최소버전으로 통제.

환경·배포 세부는 발주사 인프라 확정에 따라 갱신됩니다. 관련: 구현 현황 · 마이그레이션 · 요청자료.