2026 FIFA 월드컵 경기 현황과 교내 승부예측을 한 화면에서 제공하는 Next.js 서비스입니다.
cp .env.example .env
npm install
npm run db:migrate
npm run devhttp://localhost:3000에서 확인할 수 있습니다. 최초 실행 시 DB가 비어
있으면 데모 경기 5개를 자동으로 넣습니다. 아래 일정 동기화를 한 번 실행하면
openfootball의 실제 2026 월드컵 104경기로 교체됩니다.
- DataGSM Client에서 OAuth 클라이언트를 생성합니다.
- 리다이렉트 URI에
http://localhost:3000/api/auth/callback을 정확히 등록합니다. .env.local에DATAGSM_CLIENT_ID,DATAGSM_REDIRECT_URI,SESSION_SECRET을 설정합니다.
로그인은 Authorization Code + PKCE(S256) 방식이며 state를 검증합니다.
DataGSM 액세스 토큰은 사용자 정보를 조회한 뒤 폐기하며 브라우저에 저장하지
않습니다.
| 이름 | 설명 |
|---|---|
DATAGSM_CLIENT_ID |
DataGSM OAuth Client ID |
DATAGSM_REDIRECT_URI |
사전 등록한 OAuth 콜백 URI |
SESSION_SECRET |
세션 쿠키 서명용 32자 이상 임의 문자열 |
DATABASE_URL |
로컬 SQLite 경로 또는 Turso libsql:// URL |
TURSO_AUTH_TOKEN |
Turso 원격 DB 토큰, Vercel 배포 시 필요 |
FOOTBALL_DATA_API_KEY |
football-data.org 무료 결과 갱신 키, 선택 |
CRON_SECRET |
경기 데이터 동기화 API 인증값 |
openfootball의 CC0 공개 JSON을 사용하므로 API 키나 결제가 필요 없습니다.
curl -X POST http://localhost:3000/api/admin/fixtures/sync \
-H "Authorization: Bearer $CRON_SECRET"이 요청은 2026 월드컵 104경기를 DB에 upsert하고 기존 데모 일정을 제거합니다. 일반 페이지 요청은 외부 API를 호출하지 않고 DB만 읽습니다.
football-data.org에서 무료 키를 발급한 뒤
FOOTBALL_DATA_API_KEY를 설정합니다. 무료 플랜의 결과는 지연될 수 있습니다.
curl -X POST http://localhost:3000/api/admin/fixtures/results \
-H "Authorization: Bearer $CRON_SECRET"외부 결과가 늦거나 누락된 경우 관리자가 직접 결과를 확정할 수 있습니다. 확정 즉시 베팅 풀이 정산됩니다.
curl -X PUT http://localhost:3000/api/admin/fixtures/20260001/result \
-H "Authorization: Bearer $CRON_SECRET" \
-H "Content-Type: application/json" \
-d '{"homeScore":2,"awayScore":1}'User: DataGSM 사용자, 학년·반, 포인트 지갑Fixture: 2026 월드컵 일정, 상태, 실제 스코어Prediction: 사용자별 경기 점수 예측, 베팅액, 배당 결과PredictionRevision: 예측 생성·수정·삭제 이력PointTransaction: 베팅 차감·환불·배당 포인트 원장
신규 사용자는 1,000P로 시작하며 경기당 10P부터 500P까지 베팅할 수 있습니다. 경기 시작 후 예측 변경은 서버에서 차단됩니다. 종료 경기 동기화 시 전체 베팅 풀의 70%는 정확한 스코어 적중자, 30%는 승무패만 적중한 사용자에게 각 베팅액 비율대로 분배됩니다. 한 그룹에 적중자가 없으면 해당 몫은 다른 적중 그룹으로 넘어가며, 적중자가 전혀 없으면 전원 환불됩니다.
npm run db:migrate # 미적용 SQL 마이그레이션 적용
npm run db:studio # DB 확인
npm run db:generate # Prisma Client 재생성Vercel Functions의 로컬 파일은 영구 저장소가 아니므로
DATABASE_URL=file:... 설정을 프로덕션에서 사용하면 안 됩니다. 무료 Turso
DB를 생성하고 Vercel 프로젝트의 Production 환경 변수에 다음 값을
설정합니다.
DATABASE_URL=libsql://your-database.turso.io
TURSO_AUTH_TOKEN=your-token환경 변수를 로컬 .env에 설정한 뒤 원격 DB 마이그레이션을 한 번
실행합니다.
npm run db:deployDataGSM 클라이언트에는 실제 Vercel 도메인의 콜백 주소를 등록하고
DATAGSM_REDIRECT_URI도 같은 값으로 설정해야 합니다.
https://your-project.vercel.app/api/auth/callback
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.