- 당신의 최애 사도는 누구인가요? 릭트컬 거버넌스에 참여하여 최애 사도 월드컵을 만들고 친구들에게 공유해보세요!
caution
클라우드플레어 워커 free 플랜 리소스 사용량에 따라 접근이 잠시 불가할 수도 있습니다.
항목 | 설명 |
---|---|
지속 가능성 | 대부분의 사이드 프로젝트는 배포 후 몇 주 내에 종료됨. 이를 방지하기 위해 초기부터 장기 유지 가능한 구조로 설계함 |
보안 대응 | 배포 직후부터 자동화된 봇 및 AI 크롤러 공격이 들어오기 때문에, 적절한 보안 요소를 배치해야 함 |
UX 간결성 | 블록체인 UX는 본질적으로 복잡함. 트랜잭션 실패, 가스비, 니모닉 등 사용자는 신경 쓰고 싶어하지 않음. 블록체인 요소는 감추고 UX는 단순하게 구성해야 함 |
영역 | 기술 |
---|---|
풀스택 프레임워크 | Next.js |
UI 구성 | shadcn/ui , Tailwind CSS |
배치 작업 (크론) | GitHub Actions |
영역 | 기술 |
---|---|
네트워크 | L1 Ethereum Sepolia |
스마트 컨트랙트 | Hardhat , Mocha , OpenZeppelin |
항목 | 설명 |
---|---|
도메인 등록처 | DigitalPlat |
네임서버 | Cloudflare DNS |
방화벽 | Cloudflare WAF , Bot Fight Mode |
항목 | 설명 |
---|---|
서버리스 플랫폼 | Cloudflare Workers |
시크릿 관리 | Cloudflare Wrangler Secrets 사용 |
항목 | 기술 |
---|---|
DB 엔진 | Cloudflare D1 (SQLite3 기반) |
ORM | Drizzle ORM |
기능 | 설명 |
---|---|
라이트/다크 모드 설정하기 | 사용자 테마 설정 지원 |
로그인/로그아웃 | 쿠키 기반 인증 처리 |
월드컵 생성 및 참여 | 게시글 생성 및 확인하기 |
현재 월드컵 상황 보기 | 실시간 진행 상태 확인 |
내 프로필 페이지 확인하기 | 내 정보 및 히스토리 조회 |
전체 투표자 확인하기 | 가입 유저 히스토리 조회하기 |
자주 묻는 질문 확인하기 | 서비스 가이드 제공 |
온보딩 투어 사용하기 | 참여형 초보자용 가이드 제공 |
인앱 메시지 확인하기 | 월드컵 승자 보상 안내 조회하기 |
기능 | 설명 |
---|---|
내 블록체인 지갑 생성하기 | 자체 지갑 생성 기능 |
지갑으로 로그인하기 (experimental) | 패스키(니모닉)을/를 통한 인증 |
엘리프 발급 트랜잭션 연동하기 | 블록체인에 ERC20 토큰 발급 |
월드컵 투표 트랜잭션 연동하기 | 투표 내역 블록체인 기록 |
지갑으로 내 투표 내용 서명하기 | 전자 서명으로 투표 위/변조 방지 |
엘리프 투표권 사용해서 투표하기 | 전자 서명 및 토큰 소각을 통한 투표 기능 |
내 포인트/엘리프 잔고 확인하기 | 내 자산 조회하기 |
기능 | 설명 |
---|---|
월드컵 시작/종료하기 | 깃허브 액션: cron-proposal.yaml로 자동화 |
월드컵 보상 부여하기 | 깃허브 액션: cron-reward.yaml로 자동화 |
미확인 블록체인 트랜잭션 추적하기 | 깃허브 액션: cron-pending.yaml로 자동화 |
데이터베이스 백업하기 | 로컬/프로덕션 환경 백업 지원 |
- 미확인 트랜잭션 존재 시 추가 투표/엘리프 교환 요청 비활성하기
nextjs 로컬 https, 프로덕션 쿠키 옵션 모킹
# package.json
"dev": "next dev --turbopack --experimental-https",
# run
pnpm dev
next-swagger-doc, 스웨거 api 테스트
# move to /apidoc page, required api key on production
데이터베이스 마이그레이션(로컬 sqlite3 파일 생성 및 싱크)
# package.json
"db:schema": "pnpm exec drizzle-kit generate",
"db:local": "wrangler d1 execute ricktcal-db --remote --file=./src/server/database/migrations/0003_wet_energizer.sql",
# run schema gen
pnpm db:schema
# run schema migration
pnpm db:local
데이터베이스 백업 및 복구(sqlite3 외래키 순서 충돌 방지 => 스키마, 데이터 분리 처리)
# export current schema and then data
pnpm db:local:backup
# import the exported schema and then data
pnpm db:local:restore
워커 배포 환경 모킹, 스테이징. 빌드 에러 확인 및 프로덕션 배포 전 점검
pnpm preview
development 와 동일하게 데이터베이스 백업, 복구, 그리고 마이그레이션을 필요시 진행.
데이터베이스 백업 및 복구(sqlite3 외래키 순서 충돌 방지 => 스키마, 데이터 분리 처리)
서버 배포 처리
# package.json
"dep": "opennextjs-cloudflare build && opennextjs-cloudflare deploy",
# run
pnpm dep
- cloudflare docs: worker framework guide: nextjs
- cloudflare docs: d1 getting started
- github: TypeORM with Next.JS example project
- cloudflare docs: Hyperdrive
- github: sign in with ethereum
- root wallet tx history: ethereum sepolia
- eth faucet for test
- cloudflare d1 docs: Billing metrics
- cloudflare d1 docs: Import and export data