docs(gift): 선물 표시 검증을 기록한다

This commit is contained in:
Yu Sung
2026-10-08 14:14:23 +09:00
parent 051ce614b4
commit c6ca63e9f3
+133 -5
View File
@@ -2,12 +2,12 @@
| 문서 항목 | 내용 | | 문서 항목 | 내용 |
|---|---| |---|---|
| 상태 | 계획 작성 완료 | | 상태 | Phase 11 코드·정적 Gate 승인, runtime 검증 대기 |
| 작성일 | `2026-10-06` | | 작성일 | `2026-10-06` |
| 요구사항 기준 | `docs/20261006_선물_UI_추가/prd.md` | | 요구사항 기준 | `docs/20261006_선물_UI_추가/prd.md` |
| API 기준 | `docs/20261006_선물_UI_추가/prd.md` §11 | | API 기준 | `docs/20261006_선물_UI_추가/prd.md` §11 |
| 현재 Phase | Phase 9 공용 주소 검색과 제한적 Figma 정렬 | | 현재 Phase | Phase 11 선물 딥링크·정책 링크·크리에이터 표시 보정 |
| 현재 활성 Goal | `P9-GATE` runtime 검증 대기 | | 현재 활성 Goal | `P11-GATE` 인증 runtime 검증 대기 |
## 목표 ## 목표
@@ -26,6 +26,8 @@
| 7 | 대기 | `0/4` | `P7-T1` | Phase 5 필요 | | 7 | 대기 | `0/4` | `P7-T1` | Phase 5 필요 |
| 8 | 코드·정적 gate 승인, runtime 미완료 | `2/2` | `P8-GATE` 인증 runtime 검증 대기 | 인증 실행 환경과 Figma 접근 부재 | | 8 | 코드·정적 gate 승인, runtime 미완료 | `2/2` | `P8-GATE` 인증 runtime 검증 대기 | 인증 실행 환경과 Figma 접근 부재 |
| 9 | 구현·focused 검사 완료 | `2/2` | `P9-GATE` | 최종 build 및 Kakao/화면 runtime 미검증 | | 9 | 구현·focused 검사 완료 | `2/2` | `P9-GATE` | 최종 build 및 Kakao/화면 runtime 미검증 |
| 10 | 코드·정적 gate 승인, runtime 미완료 | `6/6` | `P10-GATE` runtime 검증 대기 | 인증 실행 환경 부재 |
| 11 | 코드·정적 gate 승인, runtime 미완료 | `3/3` | `P11-GATE` 인증 runtime 검증 대기 | 인증 실행 환경과 화면 캡처 부재 |
완료된 Task와 검증 기록은 삭제하지 않는다. 후속 수정은 새 Task 또는 정정 기록으로 누적한다. 완료된 Task와 검증 기록은 삭제하지 않는다. 후속 수정은 새 Task 또는 정정 기록으로 누적한다.
@@ -39,6 +41,8 @@
- 보낸 선물 운송장 등록, 신청 취소 확인, 취소 완료 UI. - 보낸 선물 운송장 등록, 신청 취소 확인, 취소 완료 UI.
- 받은 선물 배송지 입력, 배송지 입력 완료, 전달 완료, 전달 불가 UI. - 받은 선물 배송지 입력, 배송지 입력 완료, 전달 완료, 전달 불가 UI.
- `deepLinkValue=GIFT_DETAIL`, `deepLinkId=applicationNo` 딥링크 진입. - `deepLinkValue=GIFT_DETAIL`, `deepLinkId=applicationNo` 딥링크 진입.
- `gift-detail/{applicationNo}` 경로형 딥링크 진입.
- 선물 보내기 화면의 크리에이터 프로필 이미지, 파손 정책 링크, 채널 버튼 UI 보정.
### 제외 ### 제외
@@ -48,6 +52,7 @@
- 약관 본문 API. - 약관 본문 API.
- 선물 이미지, 첨부파일, 메시지 카드. - 선물 이미지, 첨부파일, 메시지 카드.
- 임의 외부 URL 연결. - 임의 외부 URL 연결.
- Gift 모듈 브랜드 문구 변경. 현재 source가 이미 `소다라이브`이므로 추가 수정하지 않는다.
## 기술적 제약 ## 기술적 제약
@@ -927,6 +932,115 @@ git diff --check
- [ ] 실제 한글 조합·12/13자·숫자 11/12자 입력을 실행 화면에서 확인한다. - [ ] 실제 한글 조합·12/13자·숫자 11/12자 입력을 실행 화면에서 확인한다.
- [ ] 휴대폰 `010` 11자리와 운송장 숫자 10~14자리 경계, 15번째 문자 거부를 실행 화면에서 확인한다. - [ ] 휴대폰 `010` 11자리와 운송장 숫자 10~14자리 경계, 15번째 문자 거부를 실행 화면에서 확인한다.
## Phase 11 선물 딥링크·정책 링크·크리에이터 표시 보정
**Phase 결과:** 경로형 선물 상세 딥링크가 기존 상세 화면으로 이동하고, 선물 보내기 화면에 대상 크리에이터 이미지와 올바른 파손 정책 링크가 표시되며, 채널의 선물 버튼이 승인된 UI를 사용한다.
**선행조건:** 승인된 PRD `COMMON-006`, `COMMON-007`, `SEND-008`, `GIFT-004`와 `DEC-010`~`DEC-013`.
**Phase 완료 조건:** `P11-T1`~`P11-T3`, `P11-GATE` 완료와 검증 기록 누적.
### Task 11.1 경로형 선물 상세 딥링크
**Goal 실행 `P11-T1`:** `voiceon://gift-detail/{applicationNo}`와 `voiceon-test://gift-detail/{applicationNo}`를 기존 `.giftDetail` route로 연결한다.
- **시작 조건:** `COMMON-006`, `DEC-011` 확정.
- **완료 증거:** production parser harness가 양 scheme의 경로형 URL, splash pending, 기존 query형 회귀를 검증한다.
- **범위 밖:** scheme 설정 변경, 신청번호 형식 추정, 상세 API/UI 변경.
**Files:**
- Modify: `SodaLive/Sources/App/AppDeepLinkHandler.swift`
- Modify: `work/tests/AppDeepLinkGiftDetailCheck.swift`
- Verify: `work/tests/check-app-deep-link-gift-detail.sh`
- [x] **RED:** 양 scheme의 `gift-detail/A-1002609300001`, 누락 신청번호 거부, splash pending, 기존 query형 유지 case를 harness에 추가한다.
- [x] **RED 확인:** `bash work/tests/check-app-deep-link-gift-detail.sh`를 실행해 `gift-detail` route 미지원 assertion 실패를 확인한다.
- [x] **GREEN:** `makeAction`에 `gift-detail` 분기만 추가하고 공백을 제거한 비어 있지 않은 identifier를 `.giftDetail(applicationNo:)`로 반환한다.
- [x] **GREEN 확인:** 같은 focused harness가 기존 case와 신규 case를 모두 통과한다.
- [x] **REFACTOR:** parser 구조와 scheme/query 분기는 유지하고 focused 결과를 Progress에 기록한다.
### Task 11.2 크리에이터 프로필 이미지와 파손 정책 링크
**Goal 실행 `P11-T2`:** 크리에이터 채널의 프로필 URL을 선물 보내기 화면까지 전달하고 파손 면책 `(필수)`에만 별도 정책 URL을 사용한다.
- **시작 조건:** `SEND-008`, `COMMON-007`, `DEC-012` 확정.
- **완료 증거:** profile/policy source contract, 직접 영향 회귀, 양 스킴 build가 성공한다.
- **범위 밖:** 크리에이터 재조회 API, request DTO/ViewModel 변경, 기존 sender/recipient 약관 URL 변경.
**Files:**
- Modify: `SodaLive/Sources/V2/CreatorChannel/Components/CreatorChannelHeaderSection.swift`
- Modify: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelTalkActionSection.swift`
- Modify: `SodaLive/Sources/App/AppStep.swift`
- Modify: `SodaLive/Sources/ContentView.swift`
- Modify: `SodaLive/Sources/V2/Gift/Send/GiftSendView.swift`
- Modify: `SodaLive/Sources/V2/Gift/Components/GiftAgreementRow.swift`
- Modify: `SodaLive/Sources/V2/Gift/Constants/GiftConstants.swift`
- Create: `work/tests/check-gift-phase11.sh`
- [x] **RED:** `creator.profileImageUrl`이 header → action → `.giftSend` → `ContentView` → `GiftSendView`로 전달되고, 파손 행만 새 URL을 지정하며 기존 약관/상세 정책 URL은 유지되는 source contract를 작성한다.
- [x] **RED 확인:** `bash work/tests/check-gift-phase11.sh profile`과 `bash work/tests/check-gift-phase11.sh policy`가 각각 누락된 전달값과 정책 URL 때문에 실패하는지 확인한다.
- [x] **GREEN:** `.giftSend`에 `recipientCreatorProfileImageUrl: String`을 추가하고 모든 생성·분해 지점을 갱신한다. `GiftSendView`는 `DownsampledKFImage`로 38pt 원형 이미지를 표시하며 ViewModel/API payload는 변경하지 않는다.
- [x] **GREEN:** `GiftConstants.damagePolicyURL`과 `GiftAgreementRow`의 기본값이 기존 `termsURL`인 선택적 URL 입력을 추가하고, 파손 면책 행에만 새 URL을 전달한다.
- [x] **GREEN 확인:** profile/policy mode와 전체 `bash work/tests/check-gift-phase11.sh`가 성공한다.
- [x] **REFACTOR:** 신청 성공의 guarded replace는 memberId/nickname 비교를 유지하고 아래 직접 영향 회귀를 실행한다.
```bash
bash work/tests/check-gift-address-search.sh
bash work/tests/check-gift-contact-input.sh
bash work/tests/check-gift-recipient-address.sh
bash work/tests/check-received-gift-detail.sh recipient-form
bash work/tests/check-received-gift-detail.sh received-states
```
### Task 11.3 크리에이터 채널 선물 버튼 UI
**Goal 실행 `P11-T3`:** 기존 선물 버튼의 노출 조건과 action을 유지하면서 `ic_send_gift`, 흰색 배경, 검은색 문구를 적용한다.
- **시작 조건:** `GIFT-004`, `DEC-010`, 사용자가 추가한 `ic_send_gift.imageset` 존재.
- **완료 증거:** button source contract, asset catalog lint, 양 스킴 build와 가능한 runtime 화면 확인.
- **범위 밖:** Talk/DM 버튼, gift 노출 predicate, icon asset byte 수정.
**Files:**
- Modify: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelTalkActionSection.swift`
- Modify: `work/tests/check-gift-phase11.sh`
- Verify unchanged: `SodaLive/Resources/Assets.xcassets/v2/ic_send_gift.imageset/Contents.json`
- Verify unchanged: `SodaLive/Resources/Assets.xcassets/v2/ic_send_gift.imageset/ic_send_gift.png`
- [x] **RED:** 아이콘이 문구 왼쪽에 있고 20pt, 흰색 capsule 배경, 검은색 문구이며 기존 gift predicate/action이 보존되는 button source contract를 추가한다.
- [x] **RED 확인:** `bash work/tests/check-gift-phase11.sh button`에서 기존 text-only outline UI 때문에 실패함을 확인한다.
- [x] **GREEN:** gift label만 `HStack(spacing: SodaSpacing.s6)`로 바꾸고 `ic_send_gift`와 기존 localized 문구를 넣은 뒤 흰색 capsule 배경과 검은색 문구를 적용한다.
- [x] **GREEN 확인:** button mode와 전체 Phase 11 source contract가 성공한다.
- [x] **REFACTOR:** Talk/DM UI와 `shouldShowGiftButton`이 변경되지 않았는지 확인하고 결과를 Progress에 기록한다.
### Phase 11 Gate
**Goal 실행 `P11-GATE`:** Phase 11의 네 요구사항과 기존 선물 흐름 회귀를 자동 검증과 runtime 결과로 구분해 판정한다.
- [x] 아래 focused/회귀 검사와 shell parse가 모두 exit 0이다.
- [x] `SodaLive-dev`, `SodaLive` generic iOS Debug build가 `BUILD SUCCEEDED`다.
- [x] 코드 리뷰 결과를 `docs/20261006_선물_UI_추가/reviews/phase11-gift-links-creator-display.md`에 기록한다.
- [ ] runtime 가능 시 양 scheme 딥링크, 이미지, 정책 URL, 버튼 UI를 확인하고 불가능하면 미검증 항목과 사유를 기록한다.
```bash
bash work/tests/check-app-deep-link-gift-detail.sh
bash work/tests/check-gift-phase11.sh
bash work/tests/check-gift-address-search.sh
bash work/tests/check-gift-contact-input.sh
bash work/tests/check-gift-recipient-address.sh
bash work/tests/check-received-gift-detail.sh recipient-form
bash work/tests/check-received-gift-detail.sh received-states
bash work/tests/check-gift-decoding-contract.sh
bash -n work/tests/check-gift-phase11.sh
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug -destination "generic/platform=iOS" CODE_SIGNING_ALLOWED=NO build
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug -destination "generic/platform=iOS" CODE_SIGNING_ALLOWED=NO build
git diff --check
```
**Expected:** 모든 자동 검증 exit 0, 양 스킴 `BUILD SUCCEEDED`. 인증 실행 환경이 없으면 runtime Gate만 미완료로 남긴다.
## 실행 순서와 의존성 ## 실행 순서와 의존성
| 순서 | Goal | 선행조건 | 병행 가능 | 차단 시 다음 행동 | | 순서 | Goal | 선행조건 | 병행 가능 | 차단 시 다음 행동 |
@@ -942,9 +1056,15 @@ git diff --check
| 9 | `P6-*` | `P5-GATE` | `P7-*`와 가능 | 운송장 독립 진행 | | 9 | `P6-*` | `P5-GATE` | `P7-*`와 가능 | 운송장 독립 진행 |
| 10 | `P7-*` | `P5-GATE` | `P6-*`와 가능 | 받은 상세 독립 진행 | | 10 | `P7-*` | `P5-GATE` | `P6-*`와 가능 | 받은 상세 독립 진행 |
| 11 | `P8-*` | `P5-GATE`, `P7-GATE` | 아니요 | 딥링크만 분리 검증 | | 11 | `P8-*` | `P5-GATE`, `P7-GATE` | 아니요 | 딥링크만 분리 검증 |
| 12 | `P9-*` | `P3-GATE`, `P7-GATE` | 아니요 | 주소 검색만 분리 검증 |
| 13 | `P10-*` | `P3-GATE`, `P6-GATE`, `P7-GATE` | 일부 가능 | 입력 경계별 분리 검증 |
| 14 | `P11-T1` | PRD Phase 11 승인 | `P11-T2`와 가능 | 딥링크만 독립 검증 |
| 15 | `P11-T2` | PRD Phase 11 승인 | `P11-T1`과 가능 | profile/policy mode 분리 검증 |
| 16 | `P11-T3` | `P11-T2` | 아니요 | 공유 action file 순차 수정 |
| 17 | `P11-GATE` | `P11-T1`~`P11-T3` | 아니요 | 실패 소유 Task에 회귀 Task 추가 |
```text ```text
P2 -> P3/P4/P5 -> P6/P7 -> P8 P2 -> P3/P4/P5 -> P6/P7 -> P8/P9/P10 -> P11
``` ```
## 변경 금지 항목 ## 변경 금지 항목
@@ -954,7 +1074,7 @@ P2 -> P3/P4/P5 -> P6/P7 -> P8
- API에 없는 필드, 오류 status/key, 취소일, 남은 일수를 추정하지 않는다. - API에 없는 필드, 오류 status/key, 취소일, 남은 일수를 추정하지 않는다.
- 개인정보 표시 금지 필드를 UI 편의상 노출하지 않는다. - 개인정보 표시 금지 필드를 UI 편의상 노출하지 않는다.
- test를 삭제·skip·완화하거나 타입 오류를 우회하지 않는다. - test를 삭제·skip·완화하거나 타입 오류를 우회하지 않는다.
- 임의 외부 URL을 연결하지 않는다. 확정 URL은 약관 Notion URL뿐이다. - 임의 외부 URL을 연결하지 않는다. 확정 URL은 기존 약관 Notion URL과 Phase 11 파손 정책 Notion URL뿐이다.
## 의사결정 및 중단 규칙 ## 의사결정 및 중단 규칙
@@ -1026,6 +1146,10 @@ P2 -> P3/P4/P5 -> P6/P7 -> P8
| 2026-10-08 | `P10-T5` | tracking harness에서 9자리 `123456789`가 제출되는 기존 동작을 RED로 확인했다. 편집은 ASCII 숫자 최대 14자, 제출은 10~14자리인 순수 predicate를 guarded `Binding`과 `canSubmit`에서 재사용했다. 142 assertions로 경계, 잘못된 값의 POST 차단, leading zero, 등록·실패·취소·navigation 회귀가 GREEN이다. | | 2026-10-08 | `P10-T5` | tracking harness에서 9자리 `123456789`가 제출되는 기존 동작을 RED로 확인했다. 편집은 ASCII 숫자 최대 14자, 제출은 10~14자리인 순수 predicate를 guarded `Binding`과 `canSubmit`에서 재사용했다. 142 assertions로 경계, 잘못된 값의 POST 차단, leading zero, 등록·실패·취소·navigation 회귀가 GREEN이다. |
| 2026-10-08 | `P10-R1` | 정적 리뷰 `REV-P10-001`에서 연락처 UIKit 필드의 Pretendard 고정이 언어별 폰트 정책을 우회함을 확정했다. source contract RED 후 기존 `FontModifier` resolver를 재사용하는 `.body3.localizedFontName()` bridge로 수정했다. contact 80 assertions와 localized typography contract, recipient 280 assertions, tracking 142 assertions, Swift/shell parse, project lint, `git diff --check`, 양 스킴 generic iOS Debug build가 성공했고 재리뷰는 `APPROVE_STATIC`이다. | | 2026-10-08 | `P10-R1` | 정적 리뷰 `REV-P10-001`에서 연락처 UIKit 필드의 Pretendard 고정이 언어별 폰트 정책을 우회함을 확정했다. source contract RED 후 기존 `FontModifier` resolver를 재사용하는 `.body3.localizedFontName()` bridge로 수정했다. contact 80 assertions와 localized typography contract, recipient 280 assertions, tracking 142 assertions, Swift/shell parse, project lint, `git diff --check`, 양 스킴 generic iOS Debug build가 성공했고 재리뷰는 `APPROVE_STATIC`이다. |
| 2026-10-08 | `P10-GATE` | 기능 독립 리뷰 `APPROVE`, 폰트 회귀 수정 후 정적 UI 재리뷰 `APPROVE_STATIC`. 실제 한글 조합, 12/13자, 휴대폰 11/12자, 운송장 9/10/14/15자 입력·붙여넣기, keyboard·Dynamic Type·VoiceOver·screenshot QA는 부팅된 인증 실행 환경 부재로 미수행이며 runtime 체크박스를 미완료로 유지한다. | | 2026-10-08 | `P10-GATE` | 기능 독립 리뷰 `APPROVE`, 폰트 회귀 수정 후 정적 UI 재리뷰 `APPROVE_STATIC`. 실제 한글 조합, 12/13자, 휴대폰 11/12자, 운송장 9/10/14/15자 입력·붙여넣기, keyboard·Dynamic Type·VoiceOver·screenshot QA는 부팅된 인증 실행 환경 부재로 미수행이며 runtime 체크박스를 미완료로 유지한다. |
| 2026-10-08 | `P11-T1` | 경로형 딥링크 RED가 `path gift detail accepted`에서 실패함을 확인하고 `makeAction`에 `gift-detail` 최소 분기를 추가했다. 기존 query/splash/content 우선순위를 포함한 production parser harness가 `PASS AppDeepLinkGiftDetailCheck assertions=18`로 GREEN이다. |
| 2026-10-08 | `P11-T2` | profile/policy source contract가 각각 route 값과 파손 정책 URL 부재로 RED임을 확인했다. 프로필 URL을 표시 전용 route 값으로 전달해 38pt 원형 `DownsampledKFImage`를 표시하고, 파손 행만 새 정책 URL을 사용하도록 보정했다. Phase 11 profile/policy, address, contact 80 assertions, recipient 280 assertions, recipient-form, received-states 회귀와 shell parse가 GREEN이다. |
| 2026-10-08 | `P11-T3` | button source contract가 기존 text-only outline UI에서 RED임을 확인했다. 기존 predicate와 세 recipient route 값을 유지하면서 20pt `ic_send_gift`, 검은 문구, 흰색 capsule을 적용했고 button mode와 전체 Phase 11 source contract, shell parse가 GREEN이다. Talk/DM UI는 변경하지 않았다. |
| 2026-10-08 | `P11-GATE` | 계획된 경로형 누락 identifier 거부와 path splash pending coverage를 보강해 deep-link harness 22 assertions가 GREEN이다. Phase 11 profile/policy/button, address, contact 80, recipient 280, recipient-form, received-states, decoding 22 assertions와 shell parse, `git diff --check`가 성공했다. `SodaLive-dev`, `SodaLive` generic iOS Debug build는 각각 `BUILD SUCCEEDED`다. 독립 기능 리뷰는 `APPROVE`, Critical/Important/Minor 없음이며 정적 시각 구현도 제품 결함 없이 승인됐다. 인증 화면 screenshot·링크 탭·VoiceOver·좁은 화면/Dynamic Type은 실행 환경 부재로 미완료다. |
## Decision Log ## Decision Log
@@ -1040,6 +1164,10 @@ P2 -> P3/P4/P5 -> P6/P7 -> P8
| 2026-10-07 | `DEC-007` | 확정 | 상세의 nested `giftInfo.applicationNo`는 nullable로 decode하고, 화면 신청번호는 top-level `data.applicationNo`를 사용한다. | 인증 runtime `valueNotFound`와 null/string toggle | `P2-R2`, `P5-T1` | | 2026-10-07 | `DEC-007` | 확정 | 상세의 nested `giftInfo.applicationNo`는 nullable로 decode하고, 화면 신청번호는 top-level `data.applicationNo`를 사용한다. | 인증 runtime `valueNotFound`와 null/string toggle | `P2-R2`, `P5-T1` |
| 2026-10-07 | `DEC-008` | 확정 | 전달 불가 상세의 정책 버튼은 약관 `(필수)` 링크와 동일하게 `GiftConstants.termsURL`을 시스템 브라우저로 연다. | 사용자 확인 | `P2-R3`, `P5-T4`, `P7-T4` | | 2026-10-07 | `DEC-008` | 확정 | 전달 불가 상세의 정책 버튼은 약관 `(필수)` 링크와 동일하게 `GiftConstants.termsURL`을 시스템 브라우저로 연다. | 사용자 확인 | `P2-R3`, `P5-T4`, `P7-T4` |
| 2026-10-08 | `DEC-009` | 확정 | 휴대폰 제출은 `010`으로 시작하는 ASCII 숫자 11자리만, 운송장 제출은 ASCII 숫자 10~14자리만 허용한다. | 사용자 선택과 국내 번호체계 조사 | `P10-T4`, `P10-T5`, PRD `SEND-007`, `TRACK-007`, `RECV-007` | | 2026-10-08 | `DEC-009` | 확정 | 휴대폰 제출은 `010`으로 시작하는 ASCII 숫자 11자리만, 운송장 제출은 ASCII 숫자 10~14자리만 허용한다. | 사용자 선택과 국내 번호체계 조사 | `P10-T4`, `P10-T5`, PRD `SEND-007`, `TRACK-007`, `RECV-007` |
| 2026-10-08 | `DEC-010` | 정정 | `ic_send_gift`, 흰색 배경, 검은색 문구로 기존 아이콘 없는 선물 버튼 결정을 정정한다. | 사용자 요청 및 설계 승인 | `P11-T3`, PRD `GIFT-004` |
| 2026-10-08 | `DEC-011` | 확정 | `gift-detail/{applicationNo}` 경로형 딥링크는 기존 scheme/parser/navigation을 최소 확장한다. | 사용자 제공 예시 및 설계 승인 | `P11-T1`, PRD `COMMON-006` |
| 2026-10-08 | `DEC-012` | 확정 | 파손 면책 행만 새 정책 URL을 사용하고 기존 약관 URL은 유지한다. | 사용자 제공 URL 및 설계 승인 | `P11-T2`, PRD `COMMON-007` |
| 2026-10-08 | `DEC-013` | 확정 | Gift source의 브랜드 문구는 이미 `소다라이브`이므로 변경하지 않는다. | source 검색과 사용자 선택 A | Phase 11, PRD `DEC-013` |
## 발견된 문제 ## 발견된 문제