Files
sodalive-android/docs/20260627_release_서명_정보_입력_구성/plan-task.md

5.3 KiB

release 서명 정보 입력 구성 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: release build variant가 git에 비밀값을 남기지 않고 서명 정보를 입력받아 실행될 수 있게 한다.

Architecture: app/build.gradlelocal.properties의 release signing 값을 읽고 signingConfigs.release에 연결한다. release 관련 task 실행 시 필수 값이 누락되면 Gradle 구성은 유지하되 실행 직전에 명확한 오류를 낸다.

Tech Stack: Android Gradle Plugin 8.13.0, Groovy Gradle DSL, local.properties, .gitignore


File Structure

  • Modify: app/build.gradle - local.properties 로더, release signing config, release task 검증을 추가한다.
  • Modify: .gitignore - 키스토어 확장자 ignore 규칙을 활성화한다.
  • Create: docs/20260627_release_서명_정보_입력_구성/prd.md - 요구사항을 기록한다.
  • Create/Modify: docs/20260627_release_서명_정보_입력_구성/plan-task.md - 구현 계획과 검증 기록을 누적한다.

Phase 1: 문서 준비

  • Task 1.1: PRD 문서 작성

    • 파일: docs/20260627_release_서명_정보_입력_구성/prd.md
    • 검증 기준: release signing 입력 위치, 비밀값 미커밋, 키스토어 ignore 요구사항이 명시되어야 한다.
    • 검증 기록: 2026-06-27 문서 생성 시 요구사항을 PRD에 반영했다.
  • Task 1.2: 구현 계획 작성

    • 파일: docs/20260627_release_서명_정보_입력_구성/plan-task.md
    • 검증 기준: 변경 파일, phase, task, 검증 명령이 명시되어야 한다.
    • 검증 기록: 2026-06-27 구현 전 변경 파일과 검증 기준을 계획 문서에 기록했다.

Phase 2: release signing 입력 연결

  • Task 2.1: local.properties 기반 signing config 추가

    • 파일: app/build.gradle
    • 구현 내용:
      • local.propertiesProperties로 읽는다.
      • RELEASE_STORE_FILE, RELEASE_STORE_PASSWORD, RELEASE_KEY_ALIAS, RELEASE_KEY_PASSWORD를 release signing config에 연결한다.
      • buildTypes.releasesigningConfig signingConfigs.release를 지정한다.
    • 검증 기준:
      • app/build.gradle에 실제 비밀번호나 alias 값이 하드코딩되지 않아야 한다.
      • ./gradlew tasks --all이 성공해야 한다.
    • 검증 기록: 2026-06-27 app/build.gradlelocal.properties 기반 release signing config를 추가하고 실제 비밀번호/alias 값은 하드코딩하지 않았다. ./gradlew tasks --all 실행 결과 BUILD SUCCESSFUL을 확인했다.
  • Task 2.2: release task 누락 값 검증 추가

    • 파일: app/build.gradle
    • 구현 내용:
      • release 관련 task 실행 시 필수 property 누락 목록을 포함한 GradleException을 발생시킨다.
      • debug 관련 task는 release signing 값이 없어도 실행 가능해야 한다.
    • 검증 기준:
      • ./gradlew :app:assembleRelease 실행 시 실제 서명 값이 없으면 누락 property명을 안내해야 한다.
      • ./gradlew tasks --all은 release signing 값 없이도 성공해야 한다.
    • 검증 기록: 2026-06-27 ./gradlew :app:assembleRelease 실행 시 RELEASE_STORE_FILE, RELEASE_STORE_PASSWORD, RELEASE_KEY_ALIAS, RELEASE_KEY_PASSWORD 누락 안내와 함께 의도된 실패를 확인했다. ./gradlew :app:compileDebugKotlin은 BUILD SUCCESSFUL로 완료되어 debug 경로가 release signing 값 없이 동작함을 확인했다.

Phase 3: git 비밀값 보호

  • Task 3.1: 키스토어 ignore 규칙 활성화
    • 파일: .gitignore
    • 구현 내용:
      • *.jks, *.keystore, *.p12, *.pem, *.key를 ignore한다.
      • 기존 local.properties ignore 규칙은 유지한다.
    • 검증 기준:
      • .gitignore에 키스토어 확장자가 주석이 아닌 ignore 규칙으로 존재해야 한다.
    • 검증 기록: 2026-06-27 .gitignore에서 *.jks, *.keystore, *.p12, *.pem, *.key가 주석이 아닌 ignore 규칙으로 존재함을 확인했다. 기존 local.properties ignore 규칙도 유지했다.

Phase 4: 검증

  • Task 4.1: Gradle 설정 검증
    • 파일: docs/20260627_release_서명_정보_입력_구성/plan-task.md
    • 실행 명령:
      • ./gradlew tasks --all
      • ./gradlew :app:assembleRelease
      • ./gradlew :app:compileDebugKotlin
    • 기대 결과:
      • tasks --all은 성공한다.
      • 실제 release signing 값이 없는 환경에서는 assembleRelease가 누락 property명을 포함한 오류로 실패한다.
      • debug Kotlin 컴파일은 release signing 값 없이 성공한다.
    • 검증 기록: 2026-06-27 ./gradlew tasks --all은 BUILD SUCCESSFUL, ./gradlew :app:assembleRelease는 release signing property 4개 누락 안내로 의도된 실패, ./gradlew :app:compileDebugKotlin은 BUILD SUCCESSFUL을 확인했다.

Verification Log

  • 2026-06-27: 구현 전 app/build.gradlesigningConfigs가 없고 .gitignorelocal.properties가 ignore되어 있음을 확인했다.
  • 2026-06-27: 최초 ./gradlew tasks --all 검증에서 Gradle plugins {} 블록 앞 실행문 배치 오류를 확인했다. local.properties 로딩 코드를 plugins {} 뒤로 이동한 뒤 동일 명령이 BUILD SUCCESSFUL로 완료됐다.