Skip to content

[WEB-USER]: 명함 QR용 앱 다운로드 진입점(/app) 추가 - #165

Merged
IceMilk1996 merged 2 commits into
mainfrom
staging
Aug 31, 2026
Merged

[WEB-USER]: 명함 QR용 앱 다운로드 진입점(/app) 추가#165
IceMilk1996 merged 2 commits into
mainfrom
staging

Conversation

@IceMilk1996

Copy link
Copy Markdown
Contributor

배경

명함에 넣을 앱 다운로드 QR이 필요한데, 현재 App Store만 입점하고 Play Store는 미입점 상태입니다.
QR에 App Store URL을 직접 넣으면 Play Store 입점 후 대응할 수 없습니다 — 명함은 회수가 불가능합니다.

변경

QR에는 항상 https://picakes.com/app만 넣고, 목적지는 서버가 User-Agent로 판단합니다.

UA 이동
iOS App Store
Android Play Store (미입점 시 /app/android 안내 페이지)
그 외

Play Store 입점 시 app-download.constants.ts의 링크 한 줄만 채우면 되고, QR과 명함은 그대로 사용합니다.

구현 메모

  • 302 + Cache-Control: no-store — 301은 브라우저가 목적지를 영구 캐시해서, 입점 후에도 예전에 QR을 찍은 사람은 계속 App Store로 갑니다. 인쇄물 QR에서는 치명적이라 임시 리다이렉트로 고정했습니다.
  • Android 안내 페이지는 자동 이동 없이 버튼 방식 — QR을 찍는 사람은 "앱을 받으려고" 찍은 것이라, 안드로이드 앱이 아직 없다는 사실 자체가 전달돼야 합니다. 자동 이동은 그 메시지를 못 읽게 만들고 뒤로가기 루프도 생깁니다.
  • Play Store 링크는 서버 전용 env PLAY_STORE_URL로도 덮어쓸 수 있습니다.

검증

staging(web-user/staging-v0.0.228) 배포 후 실제 응답 확인:

  • iOS → 302 https://apps.apple.com/kr/app/picake/id6787681984
  • Android → 302 https://staging.picakes.com/app/android
  • PC → 302 https://staging.picakes.com/
  • /app/android200

Play Store 입점 후 시나리오(링크 주입 시 Android만 스토어로 전환, iOS·PC 불변)도 로컬 프로덕션 빌드로 확인했습니다.

알려진 제약

iPadOS 13+ Safari는 자신을 Mac으로 보고해 PC로 분류됩니다(홈으로 이동). 명함 QR을 아이패드로 찍는 경우는 드물어 그대로 뒀습니다.

🤖 Generated with Claude Code

https://claude.ai/code/session_016ScM4roFnvWcR1hmDuw7Zi

IceMilk1996 and others added 2 commits August 31, 2026 09:16
명함 등 인쇄물에 스토어 URL을 직접 넣으면 스토어 구성이 바뀔 때 대응할 수 없어
(현재 App Store만 입점, Play Store는 예정) 항상 /app을 QR로 넣고 서버가 UA로 분기합니다.

- iOS → App Store, Android → Play Store(미입점 시 /app/android 안내), 그 외 → 홈
- Play Store 입점 시 app-download.constants.ts의 링크만 채우면 QR·명함은 그대로 사용
- 목적지를 영구 캐시하지 않도록 302 + no-store (301이면 입점 후에도 옛 대상으로 감)
- Android 안내 페이지는 자동 이동 없이 버튼 방식 — 앱이 아직 없다는 사실 자체가 전달돼야 함

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016ScM4roFnvWcR1hmDuw7Zi
`test-backend`는 브랜치 보호의 필수 체크인데 트리거에 `paths:` 필터가 걸려 있어,
백엔드를 건드리지 않은 PR에서는 워크플로우가 아예 뜨지 않았습니다. 필수 체크는 해당 체크가
성공을 보고할 때까지 기다리므로, 보고 자체가 없으면 PR이
`Expected — Waiting for status to be reported` 상태로 영구히 머지 불가가 됩니다.
규칙 설정 이후 첫 웹 전용 PR(#165)에서 실제로 발생했습니다.

트리거는 항상 걸고 백엔드 변경 여부는 job 안에서 판단해 각 단계를 건너뜁니다.

- 웹 전용 PR: 체크아웃 + 판단만 하고 종료, 체크는 성공 → 머지 가능
- 백엔드 PR: 기존과 동일하게 테스트 전체 실행, 실패 시 머지 차단

CI 시간을 아끼려는 원래 의도와 머지 게이트가 모두 유지됩니다.
`paths:`를 다시 넣으면 같은 문제가 재발하므로 워크플로우 주석에 경고를 남겼습니다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016ScM4roFnvWcR1hmDuw7Zi
@IceMilk1996
IceMilk1996 merged commit d01aa32 into main Aug 31, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant