docs(release): release 서명 요구사항을 기록한다

This commit is contained in:
2026-06-29 16:40:18 +09:00
parent b9d474075f
commit f1e3b5a49e
2 changed files with 136 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
# 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.gradle``local.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: 문서 준비
- [x] **Task 1.1: PRD 문서 작성**
- 파일: `docs/20260627_release_서명_정보_입력_구성/prd.md`
- 검증 기준: release signing 입력 위치, 비밀값 미커밋, 키스토어 ignore 요구사항이 명시되어야 한다.
- 검증 기록: 2026-06-27 문서 생성 시 요구사항을 PRD에 반영했다.
- [x] **Task 1.2: 구현 계획 작성**
- 파일: `docs/20260627_release_서명_정보_입력_구성/plan-task.md`
- 검증 기준: 변경 파일, phase, task, 검증 명령이 명시되어야 한다.
- 검증 기록: 2026-06-27 구현 전 변경 파일과 검증 기준을 계획 문서에 기록했다.
### Phase 2: release signing 입력 연결
- [x] **Task 2.1: local.properties 기반 signing config 추가**
- 파일: `app/build.gradle`
- 구현 내용:
- `local.properties``Properties`로 읽는다.
- `RELEASE_STORE_FILE`, `RELEASE_STORE_PASSWORD`, `RELEASE_KEY_ALIAS`, `RELEASE_KEY_PASSWORD`를 release signing config에 연결한다.
- `buildTypes.release``signingConfig signingConfigs.release`를 지정한다.
- 검증 기준:
- `app/build.gradle`에 실제 비밀번호나 alias 값이 하드코딩되지 않아야 한다.
- `./gradlew tasks --all`이 성공해야 한다.
- 검증 기록: 2026-06-27 `app/build.gradle``local.properties` 기반 release signing config를 추가하고 실제 비밀번호/alias 값은 하드코딩하지 않았다. `./gradlew tasks --all` 실행 결과 BUILD SUCCESSFUL을 확인했다.
- [x] **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 비밀값 보호
- [x] **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: 검증
- [x] **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.gradle``signingConfigs`가 없고 `.gitignore``local.properties`가 ignore되어 있음을 확인했다.
- 2026-06-27: 최초 `./gradlew tasks --all` 검증에서 Gradle `plugins {}` 블록 앞 실행문 배치 오류를 확인했다. `local.properties` 로딩 코드를 `plugins {}` 뒤로 이동한 뒤 동일 명령이 BUILD SUCCESSFUL로 완료됐다.