Add Next.js + PostgreSQL rewrite scaffold with 4-theme system
Stack
- Next.js 15 (App Router) + TypeScript + Drizzle ORM + postgres-js
- Node scrypt for password hashing; PBKDF2 verifier for legacy gnuboard5 hashes
- pnpm workspace monorepo: apps/web + packages/{db,auth,themes,...}
Themes (admin-selectable at /admin/themes)
- basic : 그누보드 default reproduction (light, blue accent)
- eyoom : eb4_maga_005 매거진 reproduction (dark, orange accent, ranking sidebar)
- amina : Aminam Builder reproduction (light, violet gradient, card grid)
- youngcart : 영카트 shop reproduction (red accent, search bar, category nav)
DB
- New schema (12 tables) pushed to PG via drizzle-kit: members, sessions, boards,
posts, point_ledger, app_settings, bacara_*, lottery_tickets, roulette_spins,
game_points, board_groups
- Legacy data still readable from inspection2 schema via @slot/db/legacy
Verified end-to-end against the migrated DB on localhost:3000:
- Home renders with active theme tokens injected as CSS variables
- /free lists 442K real posts from inspection2.g5_write_free
- Login (testlogin/test1234) issues session cookie, header switches to
"테스트님 환영합니다 / 로그아웃"
- Switching app_settings.theme.global from eyoom → amina swaps colors,
layout, and Korean nav labels site-wide on next request
Migration docs added: 03-migration-plan, 04-theme-architecture,
05-local-dev-setup, 06-feature-inventory.
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
# Feature Inventory — slot-ss.com (슬롯/카지노 커뮤니티 도메인)
|
||||
|
||||
이 문서는 신규 시스템 (Next.js + Node.js + PostgreSQL) 으로 옮겨야 할 모든 기능을 도메인별로 정리한다. 항목당 (1) 기존 위치, (2) DB 의존, (3) 신규 패키지 매핑.
|
||||
|
||||
## 1. 회원·인증
|
||||
|
||||
| 기능 | 기존 | DB | 신규 패키지 |
|
||||
|------|-----|-----|-------------|
|
||||
| 일반 회원가입 | `bbs/register*.php` | `g5_member` | `apps/web/auth/register` |
|
||||
| 로그인 / 로그아웃 | `bbs/login.php`, `login_check.php`, `logout.php` | `g5_member`, `g5_login` | `packages/auth` (NextAuth.js) |
|
||||
| 비밀번호 찾기 | `bbs/password_lost.php` | `g5_member.mb_lost_certify` | `apps/web/auth/recovery` |
|
||||
| 메일 인증 | (다양한 register*.php) | `g5_member.mb_email_certify` | `packages/auth/email-verify` |
|
||||
| **2FA OTP** | `plugin/ask-otp/` | (별도 외부 OTP 서버) | `packages/auth/totp` |
|
||||
| **본인인증 — OK-Name** | `plugin/okname/` | `g5_member_cert_history`, `g5_cert_history` | `packages/auth/okname` |
|
||||
| **본인인증 — KCP cert** | `plugin/kcpcert/` | 동상 | `packages/auth/kcp` |
|
||||
| **본인인증 — iNICert** | `plugin/inicert/` | 동상 | `packages/auth/inicert` |
|
||||
| **소셜 로그인** | `plugin/sns/` (Naver/Kakao/Facebook) | `g5_member_social_profiles` | NextAuth providers |
|
||||
| 회원 등급 (lv 1-12) | `g5_member.mb_level` + `g5_auth` | `g5_auth` | `packages/auth/permissions` |
|
||||
| 차단/탈퇴 | `g5_member.mb_intercept_date`, `mb_leave_date` | 동상 | 동상 |
|
||||
| 회원 검색/관리 | `adm/member_*.php` | `g5_member` | `apps/admin/members` |
|
||||
| **레벨/랭크 시스템** | `bbs/*rank.php` (12종) + `lib/member.rank.lib.php` | `g5_eyoom_member`, 게임별 포인트 테이블 | `packages/games/ranking` |
|
||||
| 출석체크 | `bbs/attendance.php`, `data/attendance.config.php` | `g5_eyoom_attendance` | `apps/web/attendance` |
|
||||
| 회원 활동 로그 | `g5_eyoom_activity`, `writing_activity` | 동상 | `packages/shared/activity` |
|
||||
| 회원 메모 (관리자 메모) | `g5_eyoom_mbmemo` | 동상 | `apps/admin/members/memo` |
|
||||
| 옐로카드 (경고) | `g5_eyoom_yellowcard` | 동상 | `apps/admin/members/yellowcard` |
|
||||
|
||||
## 2. 게시판
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 게시판 목록 | `bbs/group.php`, `bbs/board.php?bo_table=X` | `g5_group`, `g5_board` | `apps/web/[boardSlug]` |
|
||||
| 글 작성/수정/삭제 | `bbs/write.php`, `write_update.php`, `delete.php` | `g5_write_<bo_table>` | `apps/web/[boardSlug]/write` + API |
|
||||
| 글 보기 | `bbs/board.php?bo_table=X&wr_id=N` | `g5_write_<bo_table>` + `g5_board_file` | `apps/web/[boardSlug]/[wrId]` |
|
||||
| 댓글 | `bbs/write_comment_update.php` | `g5_write_<bo_table>` (is_comment) | 동상 |
|
||||
| 추천/비추천 | `bbs/good.php`, `bbs/bad.php` | `g5_board_good` | API |
|
||||
| 첨부 파일 업로드 | `lib/board.lib.php` | `g5_board_file` | `packages/shared/upload` (S3) |
|
||||
| 글 검색 | `bbs/search.php`, `lib/parsing.lib.php`, `lib/SphinxSearch.class.php` | sphinx index | Meilisearch 또는 PG FTS |
|
||||
| 인기 검색어 | `bbs/popular*.php`, `lib/popular.lib.php` | `g5_popular` | API + Redis |
|
||||
| 신규글 위젯 | `lib/latest.lib.php` | `g5_board_new` | RSC + ISR |
|
||||
| 인기글 / 추천글 | `lib/eblatest.*` | `g5_eyoom_*` | 동상 |
|
||||
| 글 임시저장 | `bbs/autosave.php` | `g5_autosave` | localStorage + 서버 백업 |
|
||||
| 스크랩 | `bbs/scrap_popin.php` | `g5_scrap` | 동상 |
|
||||
| 1:1 문의 | `bbs/qa*.php` | `g5_qa_config`, `g5_qa_content` | `apps/web/help/qa` |
|
||||
| 자주묻는질문 | `bbs/faq.php` | `g5_faq`, `g5_faq_master` | `apps/web/help/faq` |
|
||||
| 메모(쪽지) | `bbs/memo*.php` | `g5_memo` | `apps/web/inbox` |
|
||||
| 새창 알림 | `bbs/new.php` | `g5_new_win` | `apps/admin/popups` |
|
||||
| 게시판 새글 표시 | (자동 — `g5_board_new`) | 동상 | 동상 |
|
||||
| 멀티미디어 게시판 (`webtoon`, `ai`) | board skin 변형 | 게시판 데이터 | 테마 슬롯 + `<MediaGrid />` |
|
||||
|
||||
### 운영 게시판 36종
|
||||
| 카테고리 | 게시판 슬러그 |
|
||||
|---------|----------|
|
||||
| 종합 / 자유 | `free`, `humor`, `notice`, `event`, `column`, `news` |
|
||||
| 슬롯 후기/리뷰 | `review`, `slotreview`, `pick` |
|
||||
| 슬롯 제조사 | `slotche`, `slotche2~12` (프라그마틱, 플레이엔고, 릴랙스게이밍, 하바네로, CQ9 등) |
|
||||
| 게임/이벤트 | `lottery_ticket`(슬생복권), `dividend`(배당), `gift_coupons`/`gift_exchanges`(기프티콘) |
|
||||
| 검수/검증 | `mukti`(먹튀사이트), `fakesite`(가품사이트), `complaint`(먹튀신고), `inspection`(검수), `guarantee`(보증) |
|
||||
| AI / 19금 | `ai`(AI 사진), `webtoon`(번역망가), `rear`(후방) |
|
||||
| 안내 | `guide`, `qa`, `reservation` |
|
||||
| 가짜 (테스트?) | `fakes`, `fakeframe` |
|
||||
|
||||
## 3. 슬롯/카지노 게임
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| **바카라 게임** | `plugin/bacara/`, `bbs/bacara.php` | `bacara_betting` | `packages/games/bacara` + WebSocket |
|
||||
| 바카라 랭킹 | `bbs/bacararank.php` | 동상 | `apps/web/games/bacara/rank` |
|
||||
| **룰렛 게임** | `roulette/index.php`, `plugin/roulette/` | `g5_eyoom_*` | `packages/games/roulette` |
|
||||
| 룰렛 어드민 | `adm/roulette/{roulettelist,form,rewardlist,chancelist}.php` | 동상 | `apps/admin/games/roulette` |
|
||||
| **복권 (슬생복권)** | `lottery/index.php`, `bok.php`, `lib/lottery.lib.php` | `g5_write_lottery_ticket`, `lottery_history` | `packages/games/lottery` |
|
||||
| 복권 추첨 | `adm/roulette/lotterywinninglist.php` | 동상 | BullMQ cron + 어드민 |
|
||||
| **Swiun 슬롯 API** | `plugin/swiunApi/` (`trans_point`, `game`, `get_betlist`, `_config`) | `swiun_betting`, `game_point` | `packages/games/swiun` |
|
||||
| **게임 포인트** | (전반적) | `game_point` (4.4M rows), `g5_point` (5.9M) | `point_ledger` 통합 |
|
||||
| **27개 게임별 랭크 자동 업데이트** | `plugin/cron/auto.{slot,bacara,marilyn,...}rankup.php` (27개) | `g5_eyoom_member` + 게임 포인트 | `packages/workers/jobs/rank.update.ts` |
|
||||
| 가짜 게임 포인트 (개발용?) | `plugin/cron/fake_game_points.php` | 동상 | dev-only 시드 |
|
||||
|
||||
## 4. 검수·블랙리스트 (커뮤니티 신뢰)
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 먹튀 사이트 등록/검색 | `bbs/inspection.php`, `inspection.list.update.php`, `inspection.update.php`, `bbs/cagumsa.php`(가검사) | `blacklist_table` (193K), `blacklist_search`, `check_table` | `apps/web/blacklist` |
|
||||
| 블랙리스트 어드민 | `adm/eyoom_admin/core/board/blacklist_search.php` | 동상 | `apps/admin/blacklist` |
|
||||
| 100up 블랙리스트 (구버전) | `db100up/` | 동상 | (legacy, 사용 안 함) |
|
||||
| 검수 로그 | `writing_activity`, `writing_activity_bak`, `writing_today` | 동상 | `inspection_logs` |
|
||||
|
||||
## 5. 포인트·환전
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 포인트 적립/사용 원장 | `lib/common.lib.php::insert_point()` | `g5_point` | `point_ledger` |
|
||||
| 포인트 환전 신청 | (회원 페이지) | `point_exchange`, `event_point_exchange` | `apps/web/wallet/exchange` |
|
||||
| 기프티콘 교환 | `bbs/giftcon*.php` | `g5_write_gift_coupons`, `g5_write_gift_exchanges`, `officecon_products` | `apps/web/wallet/gifticon` |
|
||||
| 슬롯버프 (특별 보상) | `bbs/slotbuff*.php` | `slotbuff`, `slotbuff-category` | `apps/web/wallet/slotbuff` |
|
||||
| 베팅 어드민 | `adm/betting_list.php`, `betting_list_update.php` | `bacara_betting`, `swiun_betting`, `game_point` | `apps/admin/betting` |
|
||||
|
||||
## 6. 영카트 쇼핑몰 (현재 데이터 거의 없음, 기능은 보존)
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 상품 등록/수정 | `adm/shop_admin/item_*.php` | `g5_shop_item`, `g5_shop_item_option` | `apps/admin/shop/items` |
|
||||
| 카테고리 | `shop/list.php`, `adm/shop_admin/categoryform.php` | `g5_shop_category` | `apps/admin/shop/categories` |
|
||||
| 브랜드 | `shop/brand.php` | (`g5_shop_item.it_brand`) | 동상 |
|
||||
| 장바구니 | `shop/cart.php` | `g5_shop_cart` | `apps/web/cart` |
|
||||
| 주문/결제 | `shop/orderform*.php`, `shop/inicis/*` | `g5_shop_order`, `g5_shop_order_data`, `g5_shop_inicis_log` | `apps/web/checkout` |
|
||||
| 결제 게이트웨이 — 이니시스 | `shop/inicis/`, `shop/kcp/` | 동상 | `packages/shop/payments/inicis` |
|
||||
| 결제 게이트웨이 — KCP | `shop/kcp/`, `plugin/kcpcert/` | 동상 | `packages/shop/payments/kcp` |
|
||||
| 결제 게이트웨이 — LG U+ | `plugin/lgxpay/` | 동상 | `packages/shop/payments/lgxpay` |
|
||||
| 쿠폰 | `g5_shop_coupon`, `g5_shop_coupon_zone`, `g5_shop_coupon_log` | 동상 | `apps/web/coupons` |
|
||||
| 위시리스트 | `shop/wishlist.php` | `g5_shop_wish` | 동상 |
|
||||
| 상품 후기 | `shop/itemuse*.php` | `g5_shop_item_use` | 동상 |
|
||||
| 상품 Q&A | `shop/itemqa*.php` | `g5_shop_item_qa` | 동상 |
|
||||
| 재입고 SMS | `g5_shop_item_stocksms` | 동상 | `packages/shop/restock-notify` |
|
||||
|
||||
## 7. SMS / 메일 / 알림
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| SMS 발송 (Aligo) | `plugin/sms5/`, `data/aligo-sms.data` | `sms5_*` (`book`, `book_group`, `config`, `form`, `form_group`, `history`, `write`) | `packages/notify/sms` |
|
||||
| 이메일 발송 | `plugin/PHPMailer/` | `g5_mail` | `packages/notify/email` (Resend/SES) |
|
||||
| 푸시 알림 | `plugin/notifier/`, `g5_plugin_notifier_hist` | 동상 | `packages/notify/push` (Web Push) |
|
||||
| Slack 알림 | `plugin/slack/` | — | `packages/notify/slack` |
|
||||
|
||||
## 8. 챗봇 (AI)
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 챗봇 대화 | `plugin/chatbot/api_proxy.php`, `view.php`, `script.js`, `style.css` | `chatbot_conversations` | `packages/chatbot` (OpenAI/Anthropic) |
|
||||
| 챗봇 피드백 | `plugin/chatbot/feedback.php` | `chatbot_feedback` | 동상 |
|
||||
| 챗봇 로그 | `plugin/chatbot/log.php` | 동상 | 동상 |
|
||||
|
||||
## 9. SEO·마케팅
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| SEO 메타 (페이지/게시판별) | `data/eyoom.seocfg.php`, `theme/.../meta_config.php`, `theme/.../seo.map.php` | `ask_seo`, `ask_seo_url` | `packages/shared/seo` + Next.js metadata API |
|
||||
| robots.txt / sitemap | `robots.txt` | — | Next.js sitemap.ts |
|
||||
| Naver Syndication | `plugin/syndi/` | — | `packages/notify/naver-syn` |
|
||||
| Google Indexing API | `google_indexing-api.php`, `silicon-cocoa-*.json` | — | API 라우트 |
|
||||
| OG 이미지 / Twitter 카드 | `head.html.php` 인라인 | — | Next.js Open Graph |
|
||||
| 도메인 이력 / 도메인체크 | `domainCheck.php`, `domainCheck2.php`, `ajax.domainCheck.php`, DB `DomainCheck` | (별도 DB, 거의 빈 상태) | `apps/web/tools/domain-check` (옵션) |
|
||||
|
||||
## 10. 관리자
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 관리자 대시보드 | `adm/index.php` | (요약쿼리) | `apps/admin/dashboard` |
|
||||
| 회원 관리 | `adm/member_*.php` | `g5_member` | `apps/admin/members` |
|
||||
| 게시판 관리 | `adm/boardgroup_*.php`, `board_*.php` | `g5_board`, `g5_group` | `apps/admin/boards` |
|
||||
| 환경설정 | `adm/config_*.php` | `g5_config` | `apps/admin/settings` |
|
||||
| 메뉴 관리 | `adm/menu_*.php` | `g5_menu` | `apps/admin/menu` |
|
||||
| 권한 관리 | `adm/auth_*.php` | `g5_auth` | `apps/admin/permissions` |
|
||||
| 점프 (관리자 전환) | (이윰) | `g5_eyoom_manager` | `apps/admin/managers` |
|
||||
| 베팅/룰렛/복권 어드민 | (위 §3) | (위 §3) | `apps/admin/games/*` |
|
||||
| 통계 (방문/회원/포인트) | `adm/visit_*.php` | `g5_visit`, `g5_visit_sum`, `g5_login` | `apps/admin/stats` |
|
||||
| **테마 관리 (4종 선택)** | (없음 — 이윰 빌더 내부) | (신규) `app_settings` | `apps/admin/themes` |
|
||||
|
||||
## 11. 기타 / 인프라
|
||||
|
||||
| 기능 | 기존 | DB | 신규 |
|
||||
|------|-----|-----|------|
|
||||
| 캐시 (Sphinx Search) | `lib/SphinxSearch.class.php`, `sphinx.conf` | sphinx index | Meilisearch |
|
||||
| 캐시 (Redis) | `lib/RedisCache.class.php` | redis | Redis (그대로) |
|
||||
| 캐시 (파일) | `lib/Cache/` | `data/cache/` | Redis |
|
||||
| 훅 시스템 | `lib/Hook/` (`run_event`, `run_replace`) | — | EventEmitter / Plugin pattern |
|
||||
| reCAPTCHA | `plugin/recaptcha/`, `plugin/recaptcha_inv/` | — | next-recaptcha-v3 |
|
||||
| 자체 캡차 | `plugin/kcaptcha/` | — | (필요 시) |
|
||||
| 디버그바 | `plugin/debugbar/` | — | dev only — Next.js devtools |
|
||||
| jQuery 차트 | `plugin/jqplot/` | — | Recharts / Chart.js |
|
||||
| HTML 정화 | `plugin/htmlpurifier/` | — | DOMPurify (server side: sanitize-html) |
|
||||
|
||||
## 12. 도메인 데이터 통계 (현재 운영)
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 회원 수 | 3,064 |
|
||||
| 관리자 수 | 4 (`admin`, `admin2`, `admin3`, `admin4`) |
|
||||
| 운영 게시판 수 | 36 |
|
||||
| 총 게시글 수 (모든 g5_write_*) | ~764K |
|
||||
| 자유게시판 글 / 댓글 | 90,591 / 351,685 |
|
||||
| 후기게시판 글 / 댓글 | 8,399 / 112,462 |
|
||||
| 먹튀사이트 글 / 댓글 | 1,824 / 35,501 |
|
||||
| 가품사이트 글 / 댓글 | 1,517 / 31,609 |
|
||||
| 포인트 원장 행 수 | 5,950,013 |
|
||||
| 게임 포인트 행 수 | 4,383,542 |
|
||||
| 슬롯 게임 회차 (games_table) | 303,238 |
|
||||
| 바카라 베팅 | 7,987 |
|
||||
| 복권 응모 | 45,724 |
|
||||
| 블랙리스트 | 193,190 |
|
||||
| 누적 방문 | 4,566,650 |
|
||||
| 첨부파일 메타 | 12,606 |
|
||||
| 첨부파일 실용량 (서버) | data/file 8.5GB + data/editor 74GB |
|
||||
Reference in New Issue
Block a user