회원가입 | 고객센터 |
DESIGNONEX
디자인원엑스
DX마켓
Service
PR리그
Q&AN
지식공유N
공지사항
통계
로그인 회원가입
고객센터

포인트 복권 플러그인

D DX관리자
2026.07.23 09:26(수정됨) 3 0








1. 개요 특징

DX Lottery DXCMS 회원이 하루 1 포인트로 복권을 구매하고 긁어서 당첨 포인트를 받는 플러그인입니다. 10포인트로 참여하여 최대 2,000포인트를 당첨받을 있으며, 전체 당첨 확률은 65%입니다.
 

주요 특징

•  하루 1 참여 제한회원당 날짜별 1
•  풀스크린 모달페이지 이동 없이 전체 화면 모달로 진행
•  실제 복권 긁기 UI — Canvas API 기반 은박 긁기 인터랙션
•  10등급 당첨 구조 — 100pt ~ 2,000pt, 전체 당첨률 65%
•  등수별 1 제한낙관적 잠금으로 동시 요청 방어
•  자동 포인트 처리구매 차감, 당첨 지급 자동화
•  달력 기반 관리자날짜별 번호 확인 당첨자 조회
•  실시간 확률 시뮬레이션지정 횟수만큼 테스트 가능
•  관리자 리셋 기능특정 회원 티켓 삭제 포인트 원복
•  운영 기간 설정시작일/종료일 지정 가능
•  PHP 5.6+ 호환
 

참여 흐름 요약

로그인 회원이 페이지 접속
    ↓
복권 모달 자동 표시
    ↓
① 참여 (10포인트 차감) → 은박 긁기 → 당첨 결과 확인
② 다음에 하기 → 모달 닫기 (오늘은 더 이상 표시 안 함)
 
 
 

2. 설치 방법

파일 구조

plugins/
  dx-lottery/
    manifest.php         ← 플러그인 메타 정보
    plugin.php           ← 훅 등록, AJAX 처리, 모달 렌더링
    core/
      install.php        ← DB 테이블 설치
      helper.php         ← 핵심 로직 (당첨 처리, 포인트 등)
    admin/
      index.php          ← 관리자 화면
    assets/
      lottery.css        ← 복권 모달 스타일
      admin.css          ← 관리자 화면 스타일

설치 절차

1.  plugins/dx-lottery/ 폴더를 DXCMS 루트의 plugins/ 폴더에 복사
2.  관리자플러그인 → DX Lottery → 활성화
3.  활성화 3 DB 테이블 자동 생성
4.  관리자 사이드바레이아웃포인트 복권 메뉴 확인
5.  설정 탭에서 복권 활성화 여부, 참여 비용, 운영 기간 설정
 
활성화 로그인한 회원이 사이트에 접속하면 자동으로 복권 모달이 표시됩니다.
포인트가 없는 회원은 "포인트가 부족합니다" 메시지와 함께 참여할 없습니다.
 
 

3. 복권 참여 방법 (회원 화면)

로그인한 회원이 사이트 어느 페이지에 접속하든 하루 1 복권 모달이 자동으로 표시됩니다.
 

3-1. 모달 화면 구성

단계 화면 설명
1단계 안내 화면 복권 설명, 참여 비용(포인트), 참여/다음에 하기 버튼
2단계 긁기 화면 은박 긁기 UI — 마우스/터치로 긁으면 결과 표시
3단계 결과 화면 당첨 등수 포인트 표시 (꽝이면 화면)
 

3-2. 참여 절차

1.  모달 표시 → "참여하기" 버튼 클릭 (10포인트 차감)
2.  은박 영역을 마우스 또는 손가락으로 긁기
3.  긁기 완료 당첨 결과 자동 표시
4.  "확인" 버튼으로 모달 닫기
 

3-3. 모달 상태 정의

상태 설명
none 오늘 티켓 없음모달 처음 표시 (JS init 호출 )
pending 모달이 화면에 표시된 상태아직 결정
purchased 참여 완료 (포인트 차감됨) — 긁기 대기
scratched 긁기 완료당첨 결과 확정
declined 다음에 하기 선택오늘 모달 재표시
 
"다음에 하기" 선택하면 오늘 하루는 모달이 다시 표시되지 않습니다. 다음 자정 이후 접속 다시 표시됩니다.
긁기 화면에서 페이지를 이동해도 다시 접속 긁기 화면에서 재개됩니다.
 
 

4. 관리자 화면 사용법

관리자 사이드바레이아웃포인트 복권 접속
5 탭으로 구성: 대시보드 / 일별 번호 관리 / 당첨자 현황 / 실시간 로그 / 설정
 

4-1. 대시보드

오늘의 복권 현황을 한눈에 확인합니다.
 
항목 설명
오늘 참여자 오늘 복권에 참여한 회원
오늘 당첨자 오늘 포인트를 받은 당첨자
오늘 지급 포인트 오늘 지급된 포인트 합계
전체 참여 회원 전체 기간 누적 참여 회원
오늘 참여 내역 최근 30 실시간 현황 (회원명, 상태, 등수, 포인트, 시각)
 

4-2. 일별 번호 관리

달력 형태로 날짜별 당첨 번호와 당첨자를 관리합니다.

•  달력에서 날짜 클릭해당 날의 당첨 번호(1~10) 당첨자 확인
•  번호는 로그인 회원이 처음 접속하는 시점에 자동 생성 (6자리 난수)
•  등수별 당첨 번호, 상금, 슬롯 상태(비어있음/당첨자ID), 당첨 회원명 표시
 
번호는 당일 로그인 회원이 접속할 자동으로 생성됩니다. 수동 생성 불필요.
 

4-3. 당첨자 현황

전체 당첨 기록을 필터링하여 조회합니다.

필터 옵션
•  날짜 필터특정 날짜의 당첨 내역만 조회
•  등수 필터특정 등수만 필터 (클릭으로 선택, 포함)
•  회원 ID 필터특정 회원의 전체 참여 이력 조회

등수별 당첨 통계
•  등수별 당첨 횟수를 카드로 표시
•  카드 클릭 해당 등수 필터 자동 적용
 

4-4. 실시간 로그

당첨 확률 시뮬레이션 도구입니다. 실제 당첨 로직을 N 실행하여 결과를 확인합니다.

•  100 / 1,000 / 10,000 / 100,000 선택
•  등수별 당첨 횟수, 비율, 이론 확률과의 비교 표시
•  오차 범위 확인 가능
 
탭은 관리자 테스트용입니다. 실제 회원 데이터에 영향을 주지 않습니다.
 

4-5. 설정

설정 항목 설명 기본값
복권 활성화 전체 ON/OFF 제어 ON
참여 비용 (포인트) 복권 1 참여 차감될 포인트 10
시작일 복권 서비스 시작 날짜 (비워두면 즉시 운영) 없음
종료일 복권 서비스 종료 날짜 (비워두면 무기한) 없음
 
종료일이 지난 후에는 로그인 회원에게 모달이 표시되지 않습니다.
참여 비용을 0으로 설정하면 무료 참여가 됩니다.
 

4-6. 회원 복권 리셋

특정 회원의 복권 티켓을 삭제하고 포인트를 원래대로 복구합니다. 테스트 또는 불만 처리용입니다.

리셋 처리 내용
•  해당 회원의 해당 날짜 티켓 삭제
•  구매 비용(포인트) 환불
•  당첨 포인트가 지급된 경우 회수
•  해당 등수 당첨 슬롯 반환 (다른 회원이 당첨 가능)
•  리셋 해당 회원이 다음 접속 모달 재표시

리셋 방법
1.  회원 ID 입력
2.  날짜 선택 (기본: 오늘)
3.  "리셋 실행" 클릭
4.  확인 다이얼로그 승인
 
리셋은 되돌릴 없습니다. 신중하게 사용하세요.
 
 

5. 당첨 확률 상금 체계

1000 기준으로 당첨 650 (65%), 350 (35%) 설계되어 있습니다.
 
등수 당첨 포인트 당첨 확률 비고
1 2,000 pt 1.9% 최고 상금
2 1,000 pt 2.3%  
3 700 pt 3.7%  
4 500 pt 5.1%  
5 400 pt 6.1%  
6 300 pt 7.0%  
7 200 pt 7.9%  
8 150 pt 8.9%  
9 120 pt 9.8%  
10 100 pt 12.3% 최다 당첨
0 pt 35.0% 포인트 없음
 
등수는 하루에 1명만 당첨 가능합니다. 해당 등수 슬롯이 이미 채워진 경우 다음 등수로 조정됩니다.
모든 등수 슬롯이 채워진 경우 꽝으로 처리됩니다.
 

등수별 1 제한 동작 예시

예시: A회원이 확률 추첨에서 3등에 해당됨

경우 1) 3등 슬롯이 비어있음
  → A회원이 3등 당첨 (700pt 지급)

경우 2) 3등 슬롯이 이미 다른 회원이 차지함
  → 4등 슬롯 확인 → 비어있으면 4등 당첨 (500pt)
  → 4등도 차있으면 5등 확인 ... 반복
  → 10등까지 모두 차있으면 꽝
 
 
 

6. 동작 방식 (기술)

6-1. 등록 구조

Priority 역할
dx_extend_top 1 DB 설치 확인 + AJAX POST 처리 (_dxlt_action)
dx_admin_top 2 관리자 사이드바 링크 등록 + 관리자 화면 진입
dx_bottom 20 로그인 회원에게 복권 풀모달 HTML/JS 삽입
 

6-2. AJAX 액션 처리

_dxlt_action 설명 인증
adm_reset 회원 복권 리셋 (관리자 전용) 관리자
init 모달 초기화 — pending 티켓 생성 로그인
purchase 복권 구매포인트 차감 로그인
scratch 복권 긁기당첨 처리 로그인
decline 다음에 하기 — declined 처리 로그인
 

6-3. 낙관적 잠금 (동시성 처리)

여러 회원이 동시에 같은 등수를 당첨받는 상황을 방지합니다.
1. 현재 winners JSON 값 읽기 (oldWinners)
2. 당첨 등수 슬롯 선점 시도:
   UPDATE lottery_daily
   SET winners = <새값>
   WHERE lot_date = ? AND winners = <oldWinners>
3. 업데이트 성공 (영향 행 > 0) → 당첨 확정
4. 업데이트 실패 (다른 요청이 먼저 선점) → 재시도 (최대 3회)
5. 3회 모두 실패 → 꽝 처리
방식으로 동시에 수백 명이 접속해도 등수는 정확히 1명만 당첨됩니다.
 
 

7. DB 테이블 구조

7-1. lottery_settings — 전역 설정

컬럼 타입 기본값 설명
id INT AUTO 설정 ID
is_active TINYINT(1) 1 복권 활성화 여부
ticket_cost INT 10 참여 비용 (포인트)
start_date DATE NULL 서비스 시작일 (NULL=즉시)
end_date DATE NULL 서비스 종료일 (NULL=무기한)
updated_at DATETIME   마지막 수정일
 

7-2. lottery_daily — 일별 당첨 번호

컬럼 타입 설명
id BIGINT ID
lot_date DATE (UNIQUE) 날짜 (하루 1)
numbers TEXT (JSON) {"1":"123456",...,"10":"654321"} — 등수별 6자리 번호
winners TEXT (JSON) {"1":0,...,"10":0} — 0=빈슬롯, member_id=당첨자
created_by INT 번호 최초 생성한 회원 ID
created_at DATETIME 생성 일시
 
lot_date UNIQUE 제약이 있어 날짜당 하나의 행만 존재합니다.
 

7-3. lottery_tickets — 회원별 참여 기록

컬럼 타입 설명
id BIGINT ID
lot_date DATE 참여 날짜
member_id INT 회원 ID
status VARCHAR(20) pending / purchased / scratched / declined
prize_rank TINYINT 당첨 등수 (0= 또는 미긁음)
prize_pts INT 지급된 포인트
scratched_at DATETIME 긁기 완료 시각
created_at DATETIME 티켓 생성 시각
 
(member_id, lot_date) UNIQUE 제약으로 하루 1 참여가 보장됩니다.
 
 

8. FAQ

 

Q. 복권 모달이 표시되지 않아요.

다음을 확인하세요. ① 플러그인 활성화 여부설정 탭의 복권 활성화 ON 여부운영 기간(시작일/종료일) 확인로그인 상태 확인 (비로그인 회원에게는 표시되지 않음)
 

Q. 이미 오늘 "다음에 하기" 눌렀는데 다시 보여주고 싶어요.

관리자 화면회원 복권 리셋 에서 해당 회원 ID 오늘 날짜를 선택하여 리셋하면 됩니다. 해당 회원이 다음 접속 모달이 재표시됩니다.
 

Q. 1 당첨자가 하루에 1명뿐인 이유는?

공정성을 위해 등수별 1명만 당첨되도록 설계되어 있습니다. 1 슬롯이 채워지면 이후 참여자는 1등에 해당하는 확률이 나왔더라도 2, 3... 순으로 조정됩니다.
 

Q. 포인트가 부족한 회원은 어떻게 되나요?

"참여하기" 버튼 클릭 "포인트가 부족합니다" 메시지가 표시되고 구매가 차단됩니다. 경우 "다음에 하기" 모달을 닫을 있습니다.
 

Q. 당첨 확률을 조정하고 싶어요.

core/helper.php dxlt_prize_table() 함수에서 등수의 weight 값을 조정하면 됩니다. 전체 weight 합이 650 유지해야 당첨 확률 65% 유지됩니다. 변경 실시간 로그 탭에서 시뮬레이션으로 확인하세요.
 

Q. 복권 운영을 특정 기간만 하고 싶어요.

설정 탭에서 시작일과 종료일을 지정하면 해당 기간에만 모달이 표시됩니다. 종료일이 지나면 자동으로 비활성화됩니다.
 

Q. 관리자도 복권 모달이 표시되나요?

, 관리자도 로그인 회원이므로 모달이 표시됩니다. 테스트 관리자 리셋으로 초기화할 있습니다.

***** 필독 *****
1. 포인트 복권은 버그를 제외하고, 모든 것은 직접 개발 및 수정하셔야 합니다.
2. 추가 개발은 하지 않습니다.
3. 원본 그대로 재배포, 재판매만 금지합니다.
첨부파일 1개 회원전용 1,000P

댓글0

로그인 후 댓글을 작성할 수 있습니다.
Plugin 20
41
전체 회원
1,357
전체 게시글
2,397
전체 댓글
15
오늘 방문
51,042
전체 방문
1
현재 접속
인기글 7일 이내
최신글
최신댓글
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록
목록