Skip to content

allclear web frontend - #158

Closed
yabsed wants to merge 6 commits into
developfrom
feat/web-open-in-app-banner
Closed

yabsed wants to merge 6 commits into
developfrom
feat/web-open-in-app-banner

Conversation

@yabsed

@yabsed yabsed commented Aug 16, 2026 •

Copy link
Copy Markdown
Collaborator

작업 내용

  • 올클 웹 앱의 위에 모바일로 이동 버튼을 추가했습니다.
  • 올클 웹 앱을 모바일의 새로운 디자인으로 교체했습니다.

변경 이유

  • 지금 각 동아리 페이지에서 공유 버튼을 누르면 링크 텍스트를 전달할 수 있게 되어 있습니다.

  • 그래서 지금 이 경로로 들어갈 수 있게 되어 있습니다.

  • 문제는 해당 web app의 상단에 올클리어 앱으로 보기 기능이 없어서 웹에 갇히게 될 수도 있다는 점이었습니다.

  • 중요한 작업은 아니라서 일단은 develop -> main 브랜치 전환 release: v3.0.1 (develop → main) #159 작업이 마무리 되면 그 다음에 진행하면 될것 같습니다

테스트한 내용

  • 개발자 모드 모바일 웹 앱에서 정상작동
  • 모바일 앱 쪽의 변경사항은 없음

스크린샷 (선택)

image

체크

  • 정상 동작 확인
  • UI 깨짐 없음
  • 콘솔 에러 없음

@yabsed
yabsed force-pushed the feat/web-open-in-app-banner branch from 198c73c to 6ad4994 Compare August 16, 2026 18:31
@yabsed
yabsed marked this pull request as draft August 16, 2026 18:32
@yabsed yabsed changed the title web feature: 올클리어 앱으로 보기 allclear web frontend Aug 16, 2026
@dennis0405

Copy link
Copy Markdown
Collaborator

수고하셨습니다! PR 확인해볼게요~

@dennis0405 dennis0405 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공유 링크로 모바일 웹에 들어온 사용자를 앱으로 연결하는 방향과 경로 변환 로직을 순수 함수로 분리한 점은 좋았습니다. 다만 현재는 아래 두 항목을 머지 전에 정리해야 한다고 판단했습니다.

  1. 기존 하단 CTA가 남아 있어 동아리 상세에서는 상단 배너와 앱 유도 UI가 중복됩니다. 이 때문에 배너의 7일 닫기, 데스크톱 미노출, React Native WebView 미노출 정책도 하단 CTA에는 적용되지 않습니다.
  2. 배너 닫기 시 사용하는 localStorage 쓰기 경로가 예외를 안전하게 처리하지 않아, 스토리지 접근이 차단되거나 quota 오류가 발생하면 이벤트 핸들러에서 예외가 날 수 있습니다.

추가로 AppBannerProvider 수준의 테스트를 보완해 모바일/데스크톱/WebView 노출 조건, 7일 닫기와 만료, 스토리지 사용 불가 상황을 검증해 주세요. 현재 배너는 모든 /club 경로에 표시되지만 동아리 상세 외 경로는 앱 홈으로 이동하므로, 이 동작이 제품 의도인지도 확인 부탁드립니다.

검증 결과 웹 typecheck와 전체 웹 테스트 71개가 통과했고, PR CI 4개도 모두 성공 상태임을 확인했습니다.

</main>

{/* 하단 고정 앱 유도 CTA */}
{/* 하단 고정 앱 유도 CTA (웹 전용) */}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 하단 CTA가 그대로 남아 있어 동아리 상세에서는 새 상단 배너와 앱 유도 UI가 중복됩니다. 상단 배너를 닫아도 이 CTA는 계속 보이고, 데스크톱이나 React Native WebView에서도 이 CTA에는 배너의 노출 제한이 적용되지 않습니다. 이번 변경이 기존 CTA를 상단으로 옮기는 것이라면 이 하단 CTA를 제거해 주세요. 두 위치를 의도적으로 병행한다면 닫기 및 플랫폼별 노출 정책을 명확히 맞춰야 합니다.

GA.setEvent({ category: 'AppBanner', action: 'dismiss', label: platform ?? '' })
// 스토리지 쓰기가 막힌 환경(사파리 시크릿 모드 등)에서도 배너는 닫히도록 상태부터 바꾼다
setIsDismissed(true)
LocalStorage.setWithExpiry(APP_BANNER_DISMISSED_STORAGE_KEY, 'true', DISMISS_DURATION_MS)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

바로 위 주석과 달리 LocalStorage.setWithExpiry() 내부의 localStorage.setItem()은 try/catch로 보호되지 않습니다. 스토리지 접근 차단이나 quota 오류가 발생하면 닫기 핸들러에서 예외가 발생할 수 있고, getWithExpiry()도 catch 내부의 removeItem()이 다시 실패할 수 있습니다. 저장 실패와 무관하게 현재 세션에서는 정상적으로 닫히도록 스토리지 get/set/remove를 안전하게 감싸고, 사용 불가·손상된 값·7일 만료 케이스를 테스트해 주세요. 또한 이 키 하나로 모든 /club 경로에서 7일간 숨기는 정책이 의도된 것인지도 확인 부탁드립니다.

@yabsed

yabsed commented Aug 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

오늘 다시 한번 확인하겠습니다. 일단 지금까지의 작업은 Fable로 초안을 만들어본 거고, 디스코드에도 조만간 글을 올려볼게요.

@dennis0405 dennis0405 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR 본문 보강을 부탁드립니다. 현재 본문에는 상단 앱 이동 버튼 추가와 모바일 디자인 교체만 적혀 있지만, 실제 diff는 161개 파일(+6,228/-3,105)로 다음과 같은 전반적인 웹 앱 변경까지 포함하고 있습니다.

  • 동아리 상세·모집공고·리뷰 화면과 기능 확장
  • 검색·저장·마이페이지·운영진 관리 플로우 변경
  • 인증 및 API 모듈 재구성
  • 공통 컴포넌트·디렉터리 구조 리팩터링
  • 기존 home/index 및 career 관련 코드 삭제
  • 로고·파비콘 등 에셋 교체

리뷰어가 의도와 회귀 범위를 판단할 수 있도록 주요 기능별 변경 내용, 삭제·마이그레이션 항목, 영향받는 사용자 플로우, 실제로 수행한 테스트를 PR 본문에 구체적으로 정리해 주세요. 공유/앱 배너 변경과 웹 전면 리뉴얼을 별도 PR로 분리할 수 있다면 그 편이 가장 좋고, 하나의 PR로 유지한다면 적어도 위 범위를 본문에서 모두 설명해야 합니다.

// UA와 스토리지는 브라우저에서만 알 수 있어 첫 렌더 이후에 판단한다
useEffect(() => {
// 앱 웹뷰로 열린 페이지(약관 등)에서는 앱을 다시 권할 이유가 없다
if (window.ReactNativeWebView) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider: 데스크톱과 React Native WebView에서 상단 배너를 제외하는 조건 자체는 적절해 보이지만, 현재 이 동작을 보장하는 컴포넌트 테스트가 없습니다. 모바일 UA에서는 노출, 데스크톱 UA와 window.ReactNativeWebView 환경에서는 미노출, /club/auth에서는 미노출되는 케이스를 AppBannerProvider 수준에서 검증해 주세요. 또한 iPadOS 13+ Safari의 기본 데스크톱 UA는 현재 배너 대상에서 제외되는데, 태블릿도 모바일 유입으로 볼 것인지 제품 정책 확인이 필요합니다. 앞선 코멘트처럼 하단 CTA를 유지한다면 이 제외 정책은 상단 배너에만 적용된다는 점도 함께 정리되어야 합니다.

*/
export function toAppDeepPath(pathname: string): string {
const matched = CLUB_DETAIL_PATHNAME.exec(pathname)
return matched ? `club/${matched[1]}` : ''

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider: 배너는 모든 /club 하위 페이지에 노출되지만 현재 화면을 앱에서 이어서 여는 것은 동아리 상세뿐이고, /club/search, /club/saved, /club/mypage 등에서는 앱 홈으로 이동합니다. 사용자는 배너를 현재 화면을 앱에서 이어서 보는 기능으로 이해할 수 있으므로, 해당 화면들의 딥링크를 추가하거나 배너 노출을 실제로 대응되는 경로로 제한하는 방안을 검토해 주세요. 앱 홈 이동이 의도된 정책이라면 UI 문구와 PR 본문에 그 제한을 명시하는 편이 좋겠습니다.

@dennis0405

Copy link
Copy Markdown
Collaborator

일단 AI 통해서 간단한 리뷰들 정도 남겨봤는데,
해당 지점들 검토해서 나중에 작업 끝나면 또 멘션해주세용

@dennis0405

Copy link
Copy Markdown
Collaborator

수고하셨습니다

@yabsed

yabsed commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator Author

이 브랜치가 web 앱을 갱신하다가 리팩토링으로 방향을 틀은 셈인데
리팩토링이 우선인 것 같아서
일단 close하겠습니다

@yabsed yabsed closed this Aug 19, 2026
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.

2 participants