POP-SPOT v2.39 — 팝업별 고유 Pexels 이미지와 출처 메타데이터
v2.39 릴리즈에 포함된 Git 기록을 빠짐없이 펼친 기술 기록이다. 전문 용어는 바로 풀어 쓰고, 바뀐 모든 코드 줄을 Before → After로 비교했다.
먼저 쉽게 설명하면
팝업별 고유 Pexels 이미지와 출처 메타데이터 작업이 중심이다. 이 릴리즈는 눈에 보이는 결과뿐 아니라 그 결과를 만든 파일과 코드까지 모두 추적했다.
읽는 법
Git 기준 범위
커밋 a685b9f — fix(게스트): 7일 만료 시 홈 하드월 제거 — 참여형 액션만 가입 유도변경 파일 1개
쉬운 설명: 7일 만료 시 홈 하드월 제거 — 참여형 액션만 가입 유도 작업이다.
바꾼 이유: 만료된 게스트가 홈(/) 진입 시 /signup 으로 강제 리다이렉트돼, 검색·SEO 재방문자까지 회원가입 벽에 막혀 이탈했다. mount 게이트의 강제 리다이렉트를 제거해, 만료돼도 지도· 검색·둘러보기는 계속 열람 가능하게 한다. 상단 배너는 하드월 대신 소프트 가입 유도로 전환(유예 중 D-N, 만료 후 "가입하면 계속" 안내). 실제 가입 강제는 찜·코스·메이트 같은 참여형 탭(canAccessTab)에서만 유지.
파일 수: 1개이다.
파일 1. popspot-frontend/app/HomeClient.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
커밋 a0787ae — fix(여권): 스탬프 응답이 배열 아닐 때 앱 크래시 → 빈 여권 폴백변경 파일 1개
쉬운 설명: 스탬프 응답이 배열 아닐 때 앱 크래시 → 빈 여권 폴백 작업이다.
바꾼 이유: 로그인 사용자가 여권(PASSPORT) 탭 진입 시 앱 전체가 client-side exception 으로 죽던 P0. fetch 는 403 같은 HTTP 에러에 reject 하지 않아, res.ok 를 확인하지 않으면 에러 body ({"error":..,"status":403})가 그대로 stamps 로 들어가 배열이 아니게 되고, 렌더의 stamps.map 이 "map is not a function" 으로 전체를 죽였다(.catch 도 못 잡음). 토큰 만료(JWT TTL 1h)로 /api/stamps 가 403 을 뱉고 lastTab=PASSPORT 인 사용자가 사이트 진입 즉시 재현. res.ok 검사 + Array.isArray 가드로 비정상 응답 시 빈 여권(0/12)으로 폴백한다.
파일 수: 1개이다.
파일 1. popspot-frontend/src/components/Passport/PassportView.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
커밋 672b100 — fix(빌드): 커밋 누락된 PhotoDisclosure 컴포넌트 추가 — 프론트 빌드 복구변경 파일 1개
쉬운 설명: 커밋 누락된 PhotoDisclosure 컴포넌트 추가 — 프론트 빌드 복구 작업이다.
바꾼 이유: @/components/popup/PhotoDisclosure 파일이 로컬 디스크에만 있고 git 에 add 되지 않아, 이를 import 하는 PassportView 때문에 87cffac 이후 모든 Vercel 프론트 빌드가 "Module not found: Can't resolve '@/components/popup/PhotoDisclosure'" 로 실패해왔다. 로컬 next build 는 디스크 파일을 보므로 통과 → CI(git 커밋만 빌드)만 실패하는 전형적 누락.
파일 수: 1개이다.
파일 1. popspot-frontend/src/components/popup/PhotoDisclosure.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
커밋 f2ab842 — fix(빌드): 프론트 부분커밋 완결 — 남은 working-tree 변경 일괄 커밋변경 파일 8개
쉬운 설명: 프론트 부분커밋 완결 — 남은 working-tree 변경 일괄 커밋 작업이다.
바꾼 이유: 87cffac 이후 프론트 개선(스톡 이미지 제거·PhotoDisclosure·isPexelsPhoto 등)이 working-tree 에선 서로 맞물려 빌드되지만 git 엔 조각만 올라가, 커밋 상태가 불일치했다 — 커밋된 popupCover 가 isPexelsPhoto 를 export 하지 않아 커밋된 PhotoDisclosure 가 "Module not found" 로 Vercel 빌드를 계속 실패시켰다(로컬은 디스크 파일을 봐서 통과). 남은 프론트 변경 8개를 일괄 커밋해 커밋 상태 = 빌드되는 working-tree 로 맞춘다. 이 빌드부터 게스트·여권·스톡 수정이 라이브 반영.
파일 수: 8개이다.
파일 1. popspot-frontend/app/HomeClient.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 2. popspot-frontend/app/popup/[id]/page.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 3. popspot-frontend/src/components/layout/Footer.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 4. popspot-frontend/src/components/main/HomeBento1a.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 5. popspot-frontend/src/components/main/PopupCard.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 6. popspot-frontend/src/components/music/GlobalMusicPlayer.tsx
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 7. popspot-frontend/src/lib/popupCover.ts
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 8. popspot-frontend/src/types/popup.ts
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
커밋 173ca3a — feat(사진): 팝업별 고유 Pexels 이미지와 출처 메타데이터변경 파일 14개
쉬운 설명: 팝업별 고유 Pexels 이미지와 출처 메타데이터 작업이다.
바꾼 이유: 커밋 제목에 적힌 문제를 해결하기 위해 코드를 바꿨다.
파일 수: 14개이다.
파일 1. popspot-backend/.env.example
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 2. popspot-backend/src/main/java/com/example/popspotbackend/config/AiConfig.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 3. popspot-backend/src/main/java/com/example/popspotbackend/entity/PopupImage.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 4. popspot-backend/src/main/java/com/example/popspotbackend/entity/PopupStore.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 5. popspot-backend/src/main/java/com/example/popspotbackend/repository/PopupImageRepository.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 6. popspot-backend/src/main/java/com/example/popspotbackend/service/PexelsPhotoService.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 7. popspot-backend/src/main/java/com/example/popspotbackend/service/PopupPhotoService.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 8. popspot-backend/src/main/java/com/example/popspotbackend/service/crawler/PopupCrawlOrchestrator.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 9. popspot-backend/src/main/java/com/example/popspotbackend/service/crawler/PopupCrawlScheduler.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 10. popspot-backend/src/main/resources/application.properties
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 11. popspot-backend/src/main/resources/db/migration/V22__pexels_photo_attribution_and_uniqueness.sql
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 12. popspot-backend/src/test/java/com/example/popspotbackend/entity/PopupStoreSerializationTest.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 13. popspot-backend/src/test/java/com/example/popspotbackend/service/PexelsPhotoServiceTest.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.
파일 14. popspot-backend/src/test/java/com/example/popspotbackend/service/PopupPhotoServiceTest.java
파일 전체 문맥
조각만 보면 알기 어려운 코드를 파일 처음부터 끝까지 보여 준다. 초록은 추가·수정, 빨강은 삭제된 줄이다.