2.2.2 릴리스 실행 기록
문서 역할
역할: 시나리오
문서 종류: flow
충돌 시 우선 문서: policy/release-process.md, 태그 기준은 policy/release-tag-policy.md
기준 성격: as-is
목적
v2.2.2 API hotfix와 Mobile NextPush 배포의 대상 커밋, 실행 순서, 검증 근거, 태그/기록 기준을 한 문서에 고정한다.
범위
대상: docs, coupler-api, coupler-mobile-app
포함 범위: 프로필 사진 승인 알림 중복 방지 API hotfix, API 개발계 최신 커밋 반영, API 운영 배포/검증, API 서비스 태그, Mobile NextPush Android/iOS Production 배포, docs Release 기록
제외 범위: coupler-admin-web 운영 배포, Mobile Store 제출/승인, 운영 RDS 변경
상위 규범 문서
릴리스 상태
목표 버전: v2.2.2
전체 상태: released
완료 범위: coupler-api 개발계/운영 최신 커밋 반영, coupler-api 운영 배포/검증, coupler-api v2.2.2 태그, Mobile NextPush Android/iOS Production 배포/검증, docs 검증, docs 태그/GitHub Release 생성
docs 태그: v2.2.2 -> docs release workflow 실행 시점의 docs tag commit
coupler-api 기준 커밋: 0d3532141f82c8582fe6676e39ce7d4a0b03e439
coupler-api 직전 태그: v2.2.1 -> 1075ec4523908b03e9f6f04412654c2edb627983
coupler-api 태그: v2.2.2 -> 0d3532141f82c8582fe6676e39ce7d4a0b03e439
coupler-api 태그 객체: 1933d19f82e17df4cc83d9d3e87c67c7ede5daa1
coupler-admin-web 태그: N/A (이번 운영 배포 범위에서 제외)
coupler-mobile-app Store 릴리즈 태그: N/A (NextPush-only 배포, Store binary 변경 없음)
coupler-mobile-app 기준 커밋: 13d7eec420169360126e569011de893cb1ba297c
coupler-mobile-app 직전 Store 릴리즈 태그: v2.2.0 -> e4dd5b7c5d56b26065c6de31eca7b9c5f6225248
coupler-mobile-app 제출 마커 태그: N/A (Mobile Store 제출 없음)
제출 마커 증빙 이관/삭제: N/A
릴리스 결과
coupler-api는 개발계와 운영 EC2에 0d3532141f82c8582fe6676e39ce7d4a0b03e439 기준으로 반영됐다.
coupler-api 운영 배포 후 내부/외부 응답, DB-backed 공개 API, PM2 상태, 로그를 확인했다.
운영 검증 완료 후 coupler-api v2.2.2 annotated tag를 생성하고 원격에 push했다.
coupler-api는 프로필 사진 승인 알림이 이미지별로 중복 발송되지 않도록, 프로필 세트 상태가 승인으로 전이될 때만 profile_photo_ok 승인 도메인을 기록한다.
coupler-api는 설정 승인 푸시 문구에 profile_photo_ok를 추가해 프로필 사진 승인과 기본정보 승인을 구분한다.
coupler-mobile-app은 native metadata 변경 없이 JS/locale/test/package script 변경만 포함하므로 Mobile NextPush-only로 Android Production v20, iOS Production v17을 배포했다.
coupler-admin-web, Mobile Store, 운영 RDS는 이번 릴리스 범위에 포함하지 않는다.
메인 흐름
배포 범위를 coupler-api, Mobile NextPush, docs, Tag/Release Record로 고정했다.
coupler-api 로컬 품질 게이트를 확인했다.
운영 coupler-api를 origin/main의 0d3532141f82c8582fe6676e39ce7d4a0b03e439까지 fast-forward 반영했다.
운영 coupler-api에서 sudo env PATH="$PATH" pnpm install --frozen-lockfile, sudo pm2 restart coupler-api --update-env, sudo pm2 save를 수행했다.
운영 API 내부/외부 응답, DB-backed 공개 API, PM2 상태, 로그를 확인했다.
운영 검증 완료 후 coupler-api v2.2.2 annotated tag를 생성하고 원격에 push했다.
coupler-mobile-app 로컬 품질 게이트와 native 변경 없음 기준을 확인했다.
coupler-mobile-app Android/iOS NextPush Production 배포를 수행했다.
NextPush Android/iOS Production history에서 새 label, target binary version, package hash, rollout/mandatory/disabled 상태를 확인했다.
이 문서를 운영 결과로 갱신하고 docs v2.2.2 태그/GitHub Release를 생성했다.
검증 근거
coupler-api
배포 대상 커밋: 0d3532141f82c8582fe6676e39ce7d4a0b03e439
직전 운영 태그 커밋: v2.2.1 -> 1075ec4523908b03e9f6f04412654c2edb627983
v2.2.1 이후 커밋:
ee7e4e6 fix: 프로필 사진 승인 알림 중복 방지
0d35321 test: 프로필 사진 승인 알림 회귀 보강
변경 파일:
controller/admin/member.ts
controller/common.ts
lib/member-review-push-policy.ts
locales/ko.json
__tests__/admin-member-detail-pending-regression.test.ts
__tests__/common-send-fcm-push-storage.test.ts
__tests__/member-review-push-policy.test.ts
개발계 반영: 최신 커밋 배포 완료(사용자 확인, 2026-06-30 KST)
focused test: pnpm test -- __tests__/member-review-push-policy.test.ts __tests__/common-send-fcm-push-storage.test.ts __tests__/admin-member-detail-pending-regression.test.ts --runInBand 통과 (3 suites / 62 tests)
표준 품질 게이트: pnpm lint && pnpm typecheck && pnpm format && pnpm test:ci 통과 (70 suites / 446 tests)
운영 배포 시각: 2026-06-30 21:20 KST
운영 커밋: 0d3532141f82c8582fe6676e39ce7d4a0b03e439
태그 객체: 1933d19f82e17df4cc83d9d3e87c67c7ede5daa1
태그 커밋: 0d3532141f82c8582fe6676e39ce7d4a0b03e439
PM2 상태: coupler-api online, pid 3130231, user root, restart count 23
내부 응답: http://127.0.0.1:3002/ -> ritzy API Running ...
내부 DB-backed 공개 API: GET /app/manager/list -> 200, result_code=0
외부 응답: https://api.ritzy.fourhundred.co.kr/ -> 200, ritzy API Running ...
외부 DB-backed 공개 API: GET https://api.ritzy.fourhundred.co.kr/app/manager/list -> 200, result_code=0
운영 로그: 재시작 후 server started on port 3002 확인. 기존 FCM invalid token 로그와 NODE_APP_INSTANCE config warning이 있었으나, 이번 배포 커밋의 startup 실패나 crash는 확인되지 않았다.
coupler-mobile-app
NextPush 배포 대상 커밋: 13d7eec420169360126e569011de893cb1ba297c
직전 Store 릴리즈 태그 커밋: v2.2.0 -> e4dd5b7c5d56b26065c6de31eca7b9c5f6225248
v2.2.0 이후 커밋:
1792b19 feat: 매칭카드 하단 카피라이팅 변경 및 가운데정렬 처리
65580ac refactor: 매칭카드 카피 정렬 스타일 분리
f58daaa refactor: 매칭카드 스타일 키 카멜케이스 적용
f2030e7 chore: lint 스크립트 명시 분리
1b43076 fix: Meta 광고 식별자 수집 설정 추가
dc5173e fix: 매칭 알림 For You 탭 이동
13d7eec fix: 라운지 기본 탭을 모든 회원으로 변경
변경 파일: src/**, jest.setup.js, package.json
native metadata 변경: 없음(android/, ios/, native version/build 변경 없음)
현재 Store binary 기준: Android versionName 2.2.0, iOS MARKETING_VERSION 2.2.0, build 97
focused test: yarn test src/__tests__/marketingEvents.test.ts src/__tests__/pushNavigation.test.ts src/__tests__/squareTabs.test.ts --runInBand --watchman=false 통과 (3 suites / 25 tests)
표준 품질 게이트: yarn lint && yarn typecheck && yarn format && yarn test:ci 통과 (44 suites / 332 tests / 10 snapshots)
배포 전 Android Production 기준 label: v19
배포 전 Android target binary version: 2.2.0
배포 전 Android package hash: cc04c60ca205b484ec6d35f833bc806d36e67121c212799352a3cbc2b98bb2f8
배포 전 Android upload time: 2026-06-28T09:42:59.932Z
배포 전 Android rollout/mandatory/disabled: 100/false/false
배포 후 Android Production label: v20
배포 후 Android target binary version: 2.2.0
배포 후 Android package hash: e143858043956e510046015cf187ae0b83e0b202bcd9702af3cbefd3f5892588
배포 후 Android upload time: 2026-06-30T12:22:09.018Z
배포 후 Android rollout/mandatory/disabled: 100/false/false
배포 전 iOS Production 기준 label: v16
배포 전 iOS target binary version: 2.2.0
배포 전 iOS package hash: d59959a8835bc7470ab4e8abd72497891e858ec81a7d57dac8df1f9cf01e2975
배포 전 iOS upload time: 2026-06-28T09:42:04.235Z
배포 전 iOS rollout/mandatory/disabled: 100/false/false
배포 후 iOS Production label: v17
배포 후 iOS target binary version: 2.2.0
배포 후 iOS package hash: d0126aef44da4d8bf1c787cd4a3fea04ac436d0e0625e22256f99730a8bcb10b
배포 후 iOS upload time: 2026-06-30T12:22:37.733Z
배포 후 iOS rollout/mandatory/disabled: 100/false/false
coupler-admin-web
현재 main 커밋: 03bcd31a22711dc80047c138bff81720cd4f118c
직전 태그 커밋: v2.1.2 -> 3eb4a699980a0e035766ba341d12359790921c0f
이번 운영 배포 범위에서 제외한다. 태그 생성 대상 N/A.
참고: v2.1.2 이후 main에는 03bcd31 Revert "fix: 준회원 소개글 미제출 라벨 보정" 1개 커밋이 있으나, 이번 릴리스 목표가 API hotfix와 Mobile NextPush이므로 Admin 운영 반영은 별도 배포로 분리한다.
DB migration
DB schema/data migration 없음. DB migration 범위 N/A.
docs
릴리즈 기록 문서: content/releases/v2.2.2.md
content/AGENTS.md 인덱스 동기화: 완료
mkdocs.yml nav 동기화: 완료
docs 검증: PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH" yarn validate:docs 통과
docs 태그/GitHub Release: v2.2.2 생성 완료
롤백 기준
coupler-api: 운영 배포 후 문제가 확인되면 직전 운영 태그 v2.2.1 또는 운영 배포 전 PM2 상태 기준으로 rollback한다.
Mobile NextPush: Android는 배포 후 기준 Production v20, iOS는 배포 후 기준 Production v17을 기준으로 rollback한다. 직전 label로 되돌릴 때는 Android v19, iOS v16을 기준으로 확인한다.
coupler-mobile-app: NextPush-only 배포이므로 Store binary rollback은 대상이 아니다.
coupler-admin-web: 이번 릴리스에서 운영 배포하지 않으므로 rollback 대상 N/A다.
운영 RDS: 이번 릴리스에 DB 변경이 없으므로 DB rollback 대상 N/A다.
후속 작업
관련 문서