Skip to content

release: 관리자 권한 이전 및 모바일 QA 개선 (develop → main) - #179

Merged
dennis0405 merged 18 commits into
mainfrom
develop
Oct 6, 2026
Merged

dennis0405 merged 18 commits into
mainfrom
develop

Conversation

@dennis0405

@dennis0405 dennis0405 commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

작업 내용

변경 이유

테스트한 내용

최소 보안 패치 검증 — 2026-10-06

  • patch/web-image-security → develop PR fix(web): Next.js·sharp 이미지 처리 최소 보안 패치 #181 CI 4/4 통과 후 squash merge (297a6250f4dcb098dc6e4d5be60f942c644acb79). https://github.com/wafflestudio/allclear/actions/runs/37404158465
  • Next.js 15.5.24 / sharp 0.35.4. Next 내부 sharp도 같은 버전으로 고정했으며 postcss 8.5.25 유지. 앱 동작/DB/CI 로직 변경 없음.
  • Next 공식 release, sharp 보안 공지를 기준으로 이미지 처리 취약점 패치.
  • 안전한 JPEG/WebP/AVIF 변환, Next AVIF 입력 원본 반환 경로 확인. 로컬 web production build, 모바일 양 플랫폼 번들 및 테스트 통과.
  • fix(web): Next.js·sharp 이미지 처리 최소 보안 패치 #181 CI에서 웹 97 tests(실제 PostgreSQL 통합 포함), 모바일 167 tests 통과.
  • pnpm production audit critical 2 → 0, high 28 → 27. Next/sharp advisory 0건. 다른 high 27건은 이번 패치에서 제외하며 전체 audit 통과나 무해함을 의미하지 않습니다.
  • 1차 코드 경로 확인: 서버 Axios는 고정 Kakao HTTPS 두 URL/HTTP 기본 어댑터, TypeORM entities는 클래스 배열, Swagger UI는 SSR 없이 자체 API 문서 로드. RN CLI/Metro 및 Firebase JS transitive 경고는 실제 번들/실행 도달 여부 후속 검토 대상입니다.

배포 전 추가 버그 수정 — 2026-10-06

  • patch/club-history-reviews → develop PR fix: 저장 동아리 후기 표시 및 운영진 검색 기록 분리 #182 squash merge (c718bb3d0cb0c0bd697953e0512dbf272b496755).
  • 저장 목록 API가 실제 후기 수·키워드 집계를 반환합니다. 서버 배포만으로 기존 앱에도 반영됩니다.
  • 운영진 등록 검색만 record_recent_search=false를 전달합니다. 일반 탐색/구버전 앱은 기본 true로 유지하며, 새 앱과 서버가 모두 반영되어야 등록 검색 기록 분리가 적용됩니다.
  • 새 API 옵션은 enum 검증과 기존 guest/member 인증을 유지합니다. DB 변경/기존 기록 삭제/네이티브 시작 화면 변경은 없습니다.
  • fix: 저장 동아리 후기 표시 및 운영진 검색 기록 분리 #182 CI 4/4 성공: https://github.com/wafflestudio/allclear/actions/runs/37411538980 . 실제 PostgreSQL 통합 포함 웹 107 tests / 모바일 170 tests 통과. 로컬 웹 build와 iOS·Android bundle도 성공했습니다.
  • 이 추가 수정의 실기기 QA는 아직 미실시입니다. #177의 기존 QA 결과와 구분합니다.
  • 재확인한 production audit: critical 0 / high 27. 기존 최소 보안 패치의 잔여 범위를 유지합니다.

배포 전 확인

머지 이후 순서 / 롤백

  1. 운영 DB readiness 확인 후 main merge: 웹 production 빌드/OCIR/GitOps와 Android 내부 테스트 업로드가 자동 시작됩니다.
  2. 웹 rollout/실제 실행 이미지/health-check, 양 도메인 AASA·assetlinks·이전 웹 fallback 확인.
  3. Android main Action은 internal 트랙만 업로드합니다. Play production 승격은 별도입니다.
  4. iOS는 clubhouse / Release / .env.prod archive, 최신 App Store Connect 번호보다 높은 build로 TestFlight QA 및 심사가 별도 필요합니다. 기존 소스 build 15를 그대로 쓰지 않습니다.
  5. 승인된 운영 테스트 동아리/계정으로 양 플랫폼 이전·권한·알림·시작 화면 smoke QA.

현재 GitOps 이전 이미지: yny.ocir.io/ax1dvc8vmenm/allclear-prod/allclear-web:31986855579-1.
장애 시 앱 이미지 롤백을 우선 검토합니다. DB down migration은 알림/초대 삭제 및 역방향 이전 이력 UNIQUE 복원 실패 위험이 있어 자동 실행하지 않습니다.

스크린샷 (선택)

  • 없음 — 개발 환경 사용자 실기기 QA 확인을 별도 근거로 기록했습니다.

체크

  • production 배포 완료
  • 최종 production 앱 UI/기능 확인
  • 운영 DB postflight 확인

dennis0405 and others added 16 commits August 24, 2026 18:30
* docs: define club manager transfer MVP

* feat(web): add manager transfer persistence model

* feat(web): implement atomic manager transfer service

* feat(web): expose manager transfer invitation API

* feat(mobile): add manager transfer data contract

* feat(mobile): add manager transfer invitation flow

* fix(web): harden manager transfer completion

* feat(mobile): complete manager transfer acceptance

* docs: record manager transfer architecture

* fix(web): preserve concurrent acceptance idempotency
* fix(mobile): unblock iOS splash startup

* fix(mobile): tighten manager transfer acceptance flow

* fix(android): stop intercepting insecure app links
* fix(db): allow repeated club manager assignments

* fix: distinguish manager transfer failures

* fix(auth): remove sensitive OAuth logging

* test(web): keep handler tests outside API routes

* test(ci): pass PostgreSQL URL to database tests

* fix(auth): redact Apple callback logs
* refactor(web): 미참조 레거시 화면 및 유틸 제거

* refactor(web): home 페이지 제거

* refactor(web): 레거시 페이지 제거 마무리
* refactor(web): src entities를 서버 도메인 타입으로 통합

* refactor(web): 서버 도메인 상수와 운영 데이터를 제자리로 이동

* refactor(web): HTTP 계약을 서버 경계로 이동

* refactor(web): 서버 전용 유틸을 소유 계층으로 이동

src/의 모호한 공용 폴더에 있던 서버 전용 파일 두 개를 실제 소비 계층으로
옮긴다. 둘 다 HTTP 계약과 무관하며 소비자가 서버 한 곳뿐이다.

- src/lib/Holder.ts -> server/infra/database/connection-holder.ts
  유일한 소비자는 datasource.ts이고, 실제 역할은 첫 database connection이
  준비될 때까지 service proxy를 대기시키는 것이다. 범용 서버 도구가 아니라
  database 초기화 장치이므로 이름과 위치를 그에 맞춘다.

- src/common/utils/formatYearMonth.ts
  -> server/domain/club/recruitment-year-month.ts
  문자열 포맷 도구가 아니라 모집공고 yearMonth 값의 생성 규칙이다.
  club-recruitment.service.ts와 club-recruitment.entity.ts가 같은 규칙을
  적용하므로 모집공고 domain에 둔다.

동작은 그대로 둔다. Holder의 Promise 동작과 formatYearMonth의 로컬 시간
계산은 손대지 않았고, 이름 정리나 시간대 정책 변경은 별도 작업이다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(web): App Links 배포 계약 테스트를 제자리로 이동

src/lib/app-links.test.ts -> tests/deployment/app-links.test.ts

이 테스트가 node:fs와 createRequire를 쓴다는 사실은 서버 domain에 속한다는
증거가 아니다. 실패하는 사건을 보면 위치가 드러난다. AASA 파일에서 경로가
빠질 때, iOS entitlement에서 associated domain이 사라질 때, Android manifest와
인증서 등록이 어긋날 때, Next.js가 association 파일의 JSON header를 잃을 때
실패한다. 하나의 서버 모듈이 아니라 배포되는 여러 플랫폼 사이의 약속을
검사하므로 tests/deployment가 그 실패 이유를 이름으로 드러낸다.

경로 가정은 그대로 유지된다. process.cwd() 기준 웹·모바일·workflow 파일
읽기는 영향이 없고, 새 위치도 기존과 같은 두 단계 깊이라 next.config.js의
상대 경로 ../../ 가 그대로 성립한다.

App Links 설정을 바꾸는 PR이 이 이동만 독립적으로 되돌리거나 수정할 수
있도록 별도 커밋으로 둔다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* chore(web): 계층 간 import 방향을 Biome 규칙으로 고정

앞선 세 커밋이 서버의 타입, 상수, HTTP 계약을 server로 되돌렸지만
합의만으로는 되돌아가는 길이 열려 있다. 서버 정책이 다시 src/common에
추가되어도 지금은 아무 검사도 막지 못한다.

noRestrictedImports로 두 방향을 차단한다.

  server/**  ─X→ src/**
  src/**     ─X→ server/service, server/provider, server/infra

bare specifier와 상대 경로를 모두 막도록 각 group에 `**/` 접두 패턴을
함께 둔다. pages/api와 middleware는 서버 진입점이므로 대상이 아니다.

src가 server/domain과 server/http/schemas를 참조하는 것은 허용한다.
현재 규칙은 type-only 여부를 표현하지 못하므로, 이 두 경로에서 값을
import할 때 브라우저 bundle에 서버 의존이 섞이지 않는지는 코드 리뷰가
계속 판단한다. 자동 검사는 위험한 실행 계층만 책임진다.

biome check, typecheck, 전체 테스트와 프로덕션 빌드를 통과한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: yabsed <yabsed@snu.ac.kr>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* chore(web): remove unsued images from public directory

* chore(biome): enforce server-src dependency boundary in middleware

* feature: new logo

* chore(web): remove unused public assets

* fix(web): restore manager transfer fallback logo

---------

Co-authored-by: yabsed <yabsed@snu.ac.kr>
* fix: ios에서 textinput의 placeholder, value가 중앙정렬 되지 않던 문제 해결

* fix: ios에서 활동사진 상세보기 inset 미처리 수정

* feat: imageviewermodal에 스와이프 기능 추가

* fix: option button border로 인한 layout shift 해결

* fix: 동아리명이 길어질 때 cardTitleRow와 headerActions가 너무 가까워지는 문제 해결

* fix: user voice 바텀시트 레이아웃 수정

* fix: 활동 후기 뱃지 이모지 잘림 문제 해결

* fix: htmlview에서 heading lineheight 문제 해결

* fix: HtmlView에서 HTML 정규화 처리 추가

* fix: 키보드가 input을 가리는 문제 해결

* fix: 오타교정 아이콘 변경

* fix: 에셋 파일명 교체

* fix: js 애니메이션이 모두 끝난 후에 appinitialization screen이 표시되도록 변경

* fix: 시스템 폰트 의존성 제거

* fix: 검색 화면 새로고침 글리치 해결

* fix: textinput placeholder 중심이 간헐적으로 흔들리던 문제 해결

* fix: 기존 동아리 운영진 등록 검색 input placeholder 쏠림 해결

* fix: 동아리 후기 작성 뱃지 이모지 잘림 해결

* fix: 기존 동아리 운영진 등록 form 레이아웃 차이 해결

* fix: alertmodal이 사라질 때 뒷배경이 점멸하던 현상 해결

* fix: clubcard 디자인 변경사항 반영

* fix: 하단 탭바 높이 조정

* fix: 저장탭 제목 타이포그라피 변경

* fix: 저장한 동아리가 없을 때 탐색하러 가기 버튼 추가
* fix: ios 스플래시 스크린과 js 애니메이션 프레임 기준이 불일치하던 것을 해결

* chore: remove unused variable

* fix: js 클론 적용
* feat: add admin feature guides

* fix: add swipeable admin guide pages

* fix: model admin guide page states

* fix: align admin guide modal controls

* fix: match admin guide modal chrome

* fix: compose admin guide from shared app UI

* fix: recreate admin guide figma states

* feat: render figma admin guide window assets

* added picture frames for registration

* fix: format check

* added separate profile picture

* fix: design fixes for animations and icons

* changed design to match figma prototype
동아리 추가 설명 인풋을 공통 TextField 컴포넌트로 교체하고, 소속 드롭다운의
채워짐 상태 테두리 색을 다른 인풋과 맞췄다.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@dennis0405
dennis0405 deployed to android-dev-internal October 6, 2026 02:28 — with GitHub Actions Active
@dennis0405
dennis0405 marked this pull request as ready for review October 6, 2026 02:29
@dennis0405
dennis0405 deployed to android-dev-internal October 6, 2026 04:01 — with GitHub Actions Active
@dennis0405
dennis0405 merged commit e183fce into main Oct 6, 2026
7 checks passed

This branch was successfully deployed

1 active and 1 inactive deployments
android-dev-internal — c718bb3d Deployed Oct 6, 2026 by dennis0405 via build-and-deploy #173
ios-dev-artifact — c718bb3d Deployed Oct 6, 2026 by dennis0405 via build #17
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.

6 participants