📚 Buzzy Pages

같은 페이지에서 시작되는 대화 — 함께 읽은 순간이 대화로 이어지는 AI 독서 토론 플랫폼

같은 책을 읽는 사람들을 연결하고, 독서 과정의 기록을 바탕으로 자연스럽게 사람들과 책 이야기를 나눌 수 있도록 돕는 커뮤니티 buzzy pages입니다.

'독서 모임 참여자모임 참여, 독서 준비, 토론 진행, 이후 정리의 각 과정에서 서로 다른 어려움을 겪어, 독서 토론에 적극적으로 참여하고 의미 있는 대화를 나누기 어렵다.'라는 문제의식에서 출발해, 시공간의 제약 없이 책 이야기를 나누고 기록이 오래 남는 공간을 만들어가고 있습니다.

우리가 풀고자 한 4가지 페인 포인트

#Pain Point해결 축
Pain ①기록과 독서의 분리함께 머무르기
Pain ②진도 격차 · 스포일러함께 머무르기
Pain ③대화의 시작점 부족대화를 잇기 (AI)
Pain ④생각과 대화의 휘발기록을 남기기 (AI 인사이트)

buzzy pages는 함께 머무르기 → 대화를 잇기 → 기록을 남기기라는 세 흐름으로 끊어진 독서 경험을 다시 이어 붙입니다.

🔗 GitHub 저장소 바로가기  ·  🌐 배포 URL (http://52.3.83.52/)

⚡ 주요 기능

카테고리기능설명
📚 독서 모임모임 생성/참여카카오·네이버 책 검색 API 기반 모임 생성, 공개/비공개(비밀번호) 설정
초대 링크방장이 30분 만료 초대 코드를 발급해 멤버를 초대
모임 관리방장 대시보드에서 멤버 강퇴, 모임 수정/삭제, 공지 관리, 진행률 모니터링
📝 진도 기반 메모페이지 구간 메모페이지 범위(p.10~15) 단위 메모, 진행률에 자동 연동 (Pain ① 해결)
3단계 공개 설정비공개 / 공개 / 스포일러(해당 페이지 도달자만 열람)로 같은 흐름의 사람끼리 연결 (Pain ② 해결)
정렬·필터최신순·오래된순·페이지순 정렬 및 공개 상태별 필터링
💬 스레드 토론주제별 독립 스레드직접 작성하거나 메모와 연결해 스레드 개설, 채팅처럼 흐르지 않고 책처럼 쌓이는 구조
의견·대댓글의견 + 답글, 종료일·연장, 핀 고정 지원
발언권 토큰사용자별 의견 작성 토큰으로 한 주제에 오래 몰입할 수 있는 흐름 설계
🤖 AI 인사이트토론 주제 자동 추천공개 메모와 책 정보를 Gemini로 분석해 토론 주제 3개를 자동 제안 (Pain ③ 해결, 토론 시작 전)
유사 스레드 감지새 주제가 기존 토론과 겹치지 않는지 사전 감지
토론 요약 · 인사이트 카드스레드의 요약 / 키워드 / 핵심 / 한 줄 인사이트를 카드로 정리 (Pain ④ 해결, 토론 종료 후)
외부 공유카카오톡 / 디스코드로 인사이트 공유
📅 일정캘린더 뷰독서 기간, 토론일, 커스텀 일정을 한 화면에 시각화
자동 알림일정 기반 스케줄러로 사전·당일 알림 발송
👤 마이페이지프로필 관리닉네임 중복 확인, 프로필 이미지, 비밀번호 변경, 회원 탈퇴
활동 내역참여 모임·작성 메모·참여 토론 한눈에 조회
추천 모임참여 모임의 책 정보 기반 유사 모임 추천
🔔 알림알림 센터댓글, 공지, 일정 등 주요 이벤트 알림 통합 관리
🚨 신고신고 + AI 보조 검토부적절한 콘텐츠 신고 처리에 AI 검토를 보조 사용

🎬 소개 영상

영상은 추후 추가될 예정입니다.

배포 URL: http://52.3.83.52/

👥 팀 소개

조연지
PM / Project Lead
전석환
Infra
전윤주
API 데이터 페칭 / 풀스택

🏗️ 시스템 구조

사용자 브라우저
      │
      ▼
   Nginx  ── React 정적 파일(client/dist) 서빙 + /api 프록시
      │
      ▼
EC2 (서비스 실행 서버)
  ├─ client : React / Vite 기반 프론트엔드
  ├─ server : Express / TypeScript 기반 백엔드 API (PM2 관리)
  ├─ Prisma : 백엔드와 MySQL을 연결하는 ORM
  └─ MySQL  : 서비스 데이터 저장소
       │
       ├── S3                  → 이미지 파일 저장 (프로필·스레드·댓글·DB 백업)
       ├── Gemini API / Bedrock → AI 기능 처리 (주제 추천 / 요약 / 인사이트)
       └── Kakao / Naver API   → 책 검색

서비스 규모와 비용을 고려해 CloudFront·ALB·RDS는 도입하지 않고, EC2 한 대에서 웹·API·DB를 운영하며 휘발되면 안 되는 업로드 이미지만 S3로 분리했습니다. FILE_STORAGE_DRIVER=local|s3 환경변수로 로컬과 운영을 동일 코드로 전환할 수 있습니다.

🛠️ 기술 스택

구분기술
FrontendReact 18, TypeScript, Vite, Zustand, React Router v6, marked
BackendNode.js, Express, TypeScript, Zod
ORMPrisma
DatabaseMySQL 8.0
AIGoogle Gemini API (주제 추천 / 요약 / 인사이트), AWS Bedrock 점검 스크립트
외부 API카카오 책 검색 API, 네이버 책 검색 API
인증JWT (Access + Refresh Token), bcrypt, 카카오 OAuth
파일 저장로컬 디스크 / AWS S3 (드라이버 분리)
테스트Vitest, Supertest, fast-check (속성 기반 테스트)
배포AWS EC2, Nginx, PM2, S3
DevOps & 협업도구GitHub, Notion, Slack

기술 뱃지

React 18 TypeScript Vite Zustand Node.js Express Prisma Zod MySQL 8.0 Gemini API AWS Bedrock AWS EC2 S3 Nginx PM2

🚀 실행 방법

사전 요구사항

1. 저장소 클론

git clone https://github.com/kookmin-sw/2026-capstone-84.git
cd 2026-capstone-84

2. 서버(Backend) 설정

cd server
npm install
cp .env.example .env

.env 파일을 열어 아래 항목을 본인 환경에 맞게 수정합니다:

변수명설명
DATABASE_URLMySQL 접속 URL
JWT_SECRETJWT 토큰 서명용 시크릿 키
JWT_REFRESH_SECRETJWT 리프레시 토큰 시크릿 키
KAKAO_API_KEY카카오 책 검색 API 키
GEMINI_API_KEYGoogle Gemini AI API 키

데이터베이스 마이그레이션:

npx prisma migrate dev

서버 실행:

# 개발 모드
npm run dev

# 프로덕션 빌드 후 실행
npm run build
npm start

서버는 기본적으로 http://localhost:3000에서 실행됩니다.

3. 클라이언트(Frontend) 설정

cd client
npm install
npm run dev

클라이언트는 기본적으로 http://localhost:5173에서 실행됩니다.

테스트 실행

cd server
npm run test

📁 디렉토리 구조

2026-capstone-84/
├─ client/                          # React + Vite 프론트엔드
│  ├─ src/
│  │  ├─ api/                       # axios 기반 API 클라이언트 (auth, books, groups, memos, ...)
│  │  ├─ components/                # 공용 UI 컴포넌트 (Markdown, NotificationBell, ReportModal, ...)
│  │  ├─ pages/                     # 라우트 단위 페이지 (Home, GroupDetail, Discussions, MyPage, ...)
│  │  ├─ stores/                    # Zustand 전역 상태 (authStore)
│  │  ├─ types/                     # 공용 타입 정의
│  │  ├─ utils/                     # 날짜·시간 유틸 (timeAgo, readingPeriod)
│  │  ├─ App.tsx                    # 라우팅 진입점
│  │  └─ main.tsx
│  ├─ public/                       # 정적 자산(파비콘, 로고 이미지)
│  └─ vite.config.ts
│
├─ server/                          # Express + TypeScript 백엔드
│  ├─ src/
│  │  ├─ index.ts                   # 앱 엔트리 · 라우터 등록 · 정적 서빙
│  │  ├─ middleware/                # auth, errorHandler 미들웨어
│  │  ├─ routes/                    # 도메인별 라우터
│  │  │  ├─ auth.routes.ts          # 회원가입 · 로그인 · 토큰 · 카카오 OAuth
│  │  │  ├─ book.routes.ts          # 책 검색
│  │  │  ├─ group.routes.ts         # 모임 CRUD · 참여 · 초대
│  │  │  ├─ dashboard.routes.ts     # 방장 대시보드
│  │  │  ├─ memo.routes.ts          # 메모
│  │  │  ├─ discussion.routes.ts    # 스레드 토론
│  │  │  ├─ token.routes.ts         # 발언권 토큰
│  │  │  ├─ insight.routes.ts       # AI 인사이트
│  │  │  ├─ ai.routes.ts            # AI 주제 추천 · 요약
│  │  │  ├─ mypage.routes.ts        # 마이페이지
│  │  │  ├─ notification.routes.ts  # 알림
│  │  │  ├─ ranking.routes.ts       # 활동 랭킹
│  │  │  └─ report.routes.ts        # 신고 + AI 검토
│  │  ├─ services/                  # 비즈니스 로직
│  │  │  ├─ ai-provider.service.ts  # Gemini / Bedrock 추상화
│  │  │  ├─ ai.service.ts           # AI 주제 추천 · 요약
│  │  │  ├─ insight.service.ts      # 독서 회고 인사이트 생성
│  │  │  ├─ similar-thread.service.ts  # 유사 스레드 감지
│  │  │  ├─ group.service.ts / memo.service.ts / discussion.service.ts
│  │  │  ├─ notification.service.ts # 알림 + 스케줄러
│  │  │  ├─ file-storage.service.ts # 로컬 / S3 드라이버 분리
│  │  │  ├─ profanity.service.ts    # 신고 보조 검토
│  │  │  └─ ...
│  │  └─ validators/                # Zod 스키마
│  ├─ prisma/
│  │  ├─ schema.prisma              # 데이터 모델
│  │  └─ migrations/                # 마이그레이션 히스토리
│  ├─ scripts/
│  │  ├─ seed-api-automation.mjs    # 테스트 데이터 자동 생성
│  │  └─ check-bedrock.mjs          # AWS Bedrock 연결 점검
│  └─ uploads/                      # 로컬 저장 모드일 때만 사용
│
├─ docs/                            # 발표·기획 문서
│  ├─ project-overview.md           # 프로젝트 기획 및 구조 정리
│  ├─ evaluation.md                 # 평가 기준
│  ├─ ppt.md / ppt-prompt.md        # 발표 PPT 가이드
│  ├─ deployment-cost-optimization.md
│  └─ api-seed-automation.md
│
├─ nginx/book-discussion.conf       # 운영용 Nginx 설정
├─ ecosystem.config.js              # PM2 프로세스 설정
├─ index.html / index.md            # GitHub Pages 소개 페이지
├─ README.md
└─ package.json