Skip to content

[feat] 웹 활동 로그 수집과 관리자 CSV 저장 구현 - #14

Merged
DevDon-iOS merged 9 commits into
mainfrom
feat/#11-page-activity-logs
Sep 15, 2026
Merged

DevDon-iOS merged 9 commits into
mainfrom
feat/#11-page-activity-logs

Conversation

@DevDon-iOS

@DevDon-iOS DevDon-iOS commented Sep 15, 2026 •

Copy link
Copy Markdown
Collaborator

문제와 결과

페이지 방문 후 읽기·반응·예약·카메라 사용 흐름을 확인할 기록이 없었습니다. 공개 페이지 활동을 기존 PostgreSQL에 저장하고, 관리자 페이지에서 기간·이벤트·페이지·스토리별 조회 및 CSV 저장을 제공합니다.

주요 변경 사항

  • 페이지 조회, 스크롤 25/50/75/100%, 활성 체류 시간, 주요 링크, 반응·예약 요청의 시도/결과 수집
  • 최신 develop에 병합된 카메라의 시작·촬영·공유·다운로드 행동과 진입 스토리 연결
  • 탭별 세션 및 30분 비활동 만료, 방문별 조회/스크롤 및 이벤트 ID 중복 제거
  • 최대 20건/16KiB 전송, 대기열 100건, 이벤트당 3회 재시도, 4초 제한시간
  • 관리자 인증을 적용한 최신순 100건 조회 및 최대 5,000건 CSV 저장. 초과 시 필터 조정 안내
  • 이벤트·속성 허용 목록, 공개 스토리 검증, 요청 제한, 개인정보·쿼리·본문·사진 제외
  • 동의 UI 없이 수집하고 30일 보관하는 사용자 확정 정책 반영
  • 003_page_activity.sql, 004_camera_activity.sql 및 보관·삭제·지표 해석 문서 추가

검증

격리된 PostgreSQL 18 / Node 26.3.1 / production Next 서버에서 실행했습니다.

  • npm run typecheck — 통과
  • npm run lint — 통과
  • npm test — 13개 통과
  • npm run build — 통과
  • node --env-file=.env.test --import tsx apps/web/scripts/migrate.ts — 001~004 적용 통과
  • node --env-file=.env.test --import tsx --test apps/web/tests/*.integration.ts — 3개 통과
  • cd apps/web 후 node --env-file=../../.env.test ../../node_modules/@playwright/test/cli.js test — 5개 통과
  • git diff --check — 통과

실제 DB 저장·중복 재전송·잘못된 입력·요청 제한·관리자 권한·필터·페이지 구분·CSV 상한·보관 삭제를 검증했습니다. 브라우저에서는 전송 응답 유실 후 재시도, 재시도 상한, 새로고침·뒤로 가기·30분 세션 만료, 비활성 상태에서 체류 시간 불변, 모바일/데스크톱 조회와 CSV 다운로드, 카메라와 기존 예약 흐름을 확인했습니다.

화면

검증용 데이터로 생성한 관리자 화면입니다.

관리자 데스크톱
관리자 모바일

한계 및 운영

  • 30일 초과 로그는 조회에서 즉시 제외됩니다. 실제 삭제는 서버 시작 및 매시간 수행하므로 실행 중 최대 약 1시간, 서버 중단 시 다음 시작까지 지연될 수 있습니다. 다운로드 CSV와 백업은 관리자가 별도 삭제해야 합니다.
  • 강제 탭 종료·지속적인 네트워크 장애에서는 로그가 유실될 수 있습니다. 예약은 결제 완료, 공유 API 완료는 수신자 열람, 다운로드 클릭은 실제 파일 저장을 증명하지 않습니다.
  • 비활성 상태는 headless 문서 생명주기를 제어해 검증했고, 카메라는 가상 미디어를 사용했습니다. 실제 모바일 OS 백그라운드와 기기 공유 시트는 별도 확인 대상입니다.
  • 운영 배포 및 운영 DB 마이그레이션은 수행하지 않았습니다.
  • 사용자 요청에 따라 main을 대상으로 합니다. 최신 main의 1000바이트 제한과 활동 로그 수집을 함께 유지하도록 예약 화면 충돌을 해결했습니다.
  • 검증 자원은 최대 3개 그룹(PostgreSQL, Next 서버, headless Playwright)이었고 모두 종료했습니다. 전용 PID 및 포트 해제를 확인했습니다.

관련 이슈

Closes #11

main 통합 후 재검증

  • npm ci, npm run lint, npm run typecheck, npm test(13개), npm run build: 통과
  • npm run db:migrate: 5개 마이그레이션 적용 및 재실행 통과
  • npm run test:integration: 3개 통과
  • npm exec -w apps/web -- playwright test: 5개 통과(가상 카메라 포함)
  • git diff --check: 통과
  • 1000바이트 예약·관리자 등록/수정 및 활동 로그 수집을 함께 검증했습니다.

@DevDon-iOS
DevDon-iOS changed the base branch from develop to main September 15, 2026 11:01
@DevDon-iOS
DevDon-iOS marked this pull request as ready for review September 15, 2026 11:05
@DevDon-iOS
DevDon-iOS merged commit 9d63ab2 into main Sep 15, 2026
1 check 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.

[feat] 웹 페이지 활동 로그 수집 기능 추가

2 participants