






1. 플러그인 개요
| 항목 | 내용 |
| 플러그인 ID | dx-survey |
| 버전 | 1.0.0 |
| PHP 호환 | 5.6 이상 (7.x, 8.x 권장) |
| DXCMS | v8.8.0 이상 |
| 설문 목록 URL | /survey |
| 관리자 URL | /admin/dx-survey |
| AJAX 엔드포인트 | /survey-ajax |
| 라이선스 | 디자인원엑스 라이선스 |
주요 기능
• 15가지 질문 유형 — 단일/복수 선택, 주관식(단문·장문), 숫자, 날짜, 시간, 별점, 점수, 슬라이더, 순위, 이미지 선택, 파일, 이메일, 전화번호• 다중 페이지 — 설문을 여러 단계로 구성 가능
• 조건부 분기 — 선택지에 따라 다른 질문으로 이동
• 스텝바이스텝 폼 — 진행률 바 + 단계 인디케이터
• 임시저장 — 중간에 저장 후 이어서 작성
• 중복 참여 방지 — 회원 로그인 / 쿠키 / IP 방식
• 통계 — 선택형 막대 그래프, 숫자형 통계, 주관식 텍스트 목록
• 참여 모니터링 — 회원/비회원 현황, 일별 추이, 최근 참여자 20명
• 참여 초기화 — 설문별 응답 데이터 전체 초기화
• CSV 내보내기 — 전체 응답 데이터 다운로드
2. 시스템 요구사항
| 항목 | 요구사항 |
| CMS | DXCMS v8.8.0 이상 |
| PHP | 5.6 이상 (PHP 7.4, 8.x 권장) |
| DB | MySQL 5.6 이상 / MariaDB 10.x 이상 |
| 웹서버 | Apache / Nginx / IIS (Windows 포함) |
| 브라우저 | Chrome, Edge, Firefox, Safari 최신 버전 |
| JS | ES5 이상 (IE11 미지원) |
3. 설치 방법
3-1. 파일 복사
배포된 dx-survey.zip 압축을 풀어 DXCMS 루트 디렉터리에 병합 복사합니다.| 복사 경로 | 설명 |
| extend/top/00_survey_router.php | /survey/* URL 라우팅 |
| extend/top/01_survey_admin_ajax.php | 관리자 AJAX 전용 처리 (/survey-ajax) |
| plugins/dx-survey/ | 플러그인 전체 폴더 |
3-2. DB 자동 설치
파일 복사 후 아래 URL에 접속하면 필요한 테이블이 자동으로 생성됩니다.3-3. 접속 확인
| 구분 | URL |
| 설문 목록 (사용자) | /survey |
| 관리자 대시보드 | /admin/dx-survey |
3-4. 기존 DB 마이그레이션
이미 구형 스키마로 생성된 테이블이 있어도 플러그인이 자동으로 누락 컬럼을 추가합니다. SHOW COLUMNS로 확인 후 ALTER TABLE로 마이그레이션이 실행됩니다.4. 파일 구조
| 파일/폴더 | 역할 |
| extend/top/00_survey_router.php | /survey/* 경로를 가로채 라우팅 처리 |
| extend/top/01_survey_admin_ajax.php | /survey-ajax 관리자 AJAX 전용 처리 |
| plugins/dx-survey/plugin.php | 플러그인 메인, 훅 등록, 관리자 사이드바 |
| plugins/dx-survey/core/install.php | DB 테이블 생성 및 자동 마이그레이션 |
| plugins/dx-survey/core/DxSurvey.php | 설문 CRUD 클래스 |
| plugins/dx-survey/core/DxSurveyQuestion.php | 질문 및 선택지 CRUD 클래스 |
| plugins/dx-survey/core/DxSurveyResponse.php | 답변 저장, 통계, CSV 클래스 |
| plugins/dx-survey/core/DxSurveyAuth.php | 권한 확인 클래스 |
| plugins/dx-survey/core/DxSurveyFingerprint.php | 중복 참여 방지 클래스 |
| plugins/dx-survey/admin/ | 관리자 화면 (블록 단위 구성) |
| plugins/dx-survey/views/ | 사용자 설문 화면 |
5. 관리자 기능
5-1. 대시보드
플러그인 접속 시 첫 화면입니다. 전체 통계 현황을 한눈에 확인합니다.| 표시 항목 | 설명 |
| 총 참여 | 전체 설문 누적 참여 수 |
| 오늘 참여 | 오늘 날짜 기준 참여 수 |
| 조회 수 | 설문 페이지 조회 수 |
| 참여율 | 조회 대비 참여 비율 |
| 회원 참여 | 로그인 회원의 참여 수 |
| 비회원 참여 | 비로그인 참여 수 |
| 인기 운세 TOP 10 | 가장 많이 나온 운세 순위 (DX Fortune 연동 시) |
5-2. 설문 목록
등록된 설문 전체 목록입니다. 상태 변경, 편집, 통계, 초기화, 삭제가 가능합니다.• 상태 변경 — 작성중 / 진행중 / 종료 전환 가능
• 편집 — 설문 기본 정보 수정
• 질문 편집기 — 질문 추가/수정/삭제
• 통계 — 응답 결과 분석
• 초기화 — 응답 데이터만 삭제 (질문/설정 유지)
• 삭제 — 설문 및 모든 관련 데이터 완전 삭제
5-3. 설문 만들기
사이드바 [설문 만들기] 클릭 후 아래 항목을 입력합니다.| 항목 | 설명 | 필수 |
| 제목 | 설문 제목 | ✅ |
| 부제목 | 설문 페이지 상단 간단 설명 | |
| 설명 | 상세 설명 텍스트 | |
| 카테고리 | 카테고리 관리에서 추가한 분류 | |
| 상태 | 작성중 / 진행중 / 종료 | ✅ |
| 시작일 | 설문 시작 일시 (비워두면 즉시 시작) | |
| 종료일 | 설문 종료 일시 (비워두면 무제한) | |
| 최대 응답 수 | 0=무제한, 숫자 입력 시 해당 수 도달 후 자동 종료 | |
| 결과 공개 | 참여 완료 후 통계 결과를 참여자에게 공개 | |
| 비회원 허용 | 로그인 없이 참여 허용 여부 | |
| 중복 방지 | 로그인 기반 / 쿠키 / IP 방식 선택 | |
| 완료 메시지 | 제출 후 표시되는 감사 메시지 | |
| 리다이렉트 URL | 완료 후 이동할 URL (선택) |
5-4. 질문 편집기
설문 저장 후 [질문 편집기]로 이동하여 질문을 추가합니다. URL: /admin/dx-survey?p=builder&id={설문ID}지원 질문 유형 (15가지)
| 유형 ID | 유형명 | 설명 |
| single | 단일 선택 | 보기 중 하나만 선택 (라디오 버튼) |
| multi | 복수 선택 | 보기 중 여러 개 선택 (체크박스) |
| text | 단문 주관식 | 짧은 텍스트 입력 |
| textarea | 장문 주관식 | 긴 텍스트 입력 |
| number | 숫자 입력 | 숫자만 입력 (최소/최대 설정 가능) |
| date | 날짜 | 날짜 선택기 |
| time | 시간 | 시간 선택기 |
| rating | 별점 | 1~5점 별점 |
| score | 점수 | 숫자 범위로 점수 선택 |
| slider | 슬라이더 | 슬라이더로 값 선택 (최소/최대/단계) |
| rank | 순위 선택 | 항목 순서 정하기 |
| image | 이미지 선택 | 이미지 보기 중 선택 |
| file | 파일 첨부 | 파일 업로드 |
| 이메일 | 이메일 형식 입력 | |
| phone | 전화번호 | 전화번호 형식 입력 |
질문 수정/삭제
• 각 질문 카드의 ✏️ 수정 버튼 클릭 → 우측 패널에서 기존 값 수정 후 [저장]• 🗑️ 삭제 버튼 클릭 → 확인 후 삭제
• 드래그&드롭으로 질문 순서 변경 가능
페이지 구성
• 상단 [+ 페이지 추가] 버튼으로 설문을 여러 단계로 구성• 페이지 탭 클릭으로 각 페이지별 질문 관리
• 사용자 화면에서 스텝 인디케이터와 진행률 바로 표시
5-5. 통계 (결과 분석)
URL: /admin/dx-survey?p=stats&id={설문ID}| 섹션 | 내용 |
| 요약 카드 6개 | 전체 참여 / 오늘 참여 / 조회수 / 참여율 / 회원 참여 / 비회원 참여 |
| 회원·비회원 현황 | 비율 막대 그래프 + 인원수 |
| 최근 7일 추이 | 일별 참여 막대 차트 |
| 최근 참여자 20명 | 회원/비회원 구분, 아이피, 참여일시, 소요시간 |
| 질문별 응답 현황 | 선택형: 막대 그래프 / 숫자형: 통계 수치 / 주관식: 텍스트 목록 |
| CSV 내려받기 | 전체 응답 데이터를 엑셀 호환 CSV로 다운로드 |
5-6. 참여 모니터링
URL: /admin/dx-survey?p=monitor설문별 실시간 참여 현황을 모니터링합니다.
• 설문 선택 드롭다운으로 원하는 설문 전환
• 전체/오늘/회원/비회원 참여 통계 카드
• 최근 7일 일별 추이 차트
• 최근 참여자 20명 목록 (회원/비회원, 아이피, 참여일시, 소요시간)
5-7. 카테고리 관리
URL: /admin/dx-survey?p=categories설문을 분류하는 카테고리를 관리합니다. 기본 카테고리 6개(고객 만족도, 이벤트, 시장조사, 직원 평가, 교육 설문, 기타)는 최초 설치 시에만 자동 생성됩니다.
5-8. 참여 초기화
설문 목록에서 각 설문의 [초기화] 버튼을 클릭합니다.| 초기화 대상 | 유지 항목 |
| survey_answers (응답 데이터) | ✅ 질문 목록 |
| survey_responses (참여 세션) | ✅ 설문 기본 정보 |
| survey_votes (구형 투표) | ✅ 카테고리 |
| survey_drafts (임시저장) | ✅ 설정 값 |
| survey_stats (통계 캐시) | |
| response_count 0 리셋 | |
| 쿠키 삭제 (JS) |
6. 사용자 설문 화면
6-1. 설문 목록 (/survey)
• 상단 네비바 — 로고, 검색창, 로그인/회원가입• 이번 주 인기 설문 — response_count 상위 3개, HOT 배지
• 진행중 설문 목록 — D-day/오늘마감/진행중 배지, 참여율 바
• 카테고리 탭 필터
• 푸터 — 카피라이트, 이용약관, 개인정보처리방침
6-2. 설문 참여 폼
• 상단 고정 헤더 — 설문 제목 + 진행률 바 (n%)• 스텝 인디케이터 — 페이지별 원형 번호, 완료 시 체크 표시
• 첫 페이지 진입 시 설문 제목·부제목 표시
• 질문 카드 — 번호, 제목, 설명, 유형별 입력 UI
• 이전 / 다음 / 제출하기 버튼
• 임시저장 버튼 — 클릭 시 하단 토스트 메시지 표시
6-3. 중복 참여 방지
| 방식 | 설명 | 비고 |
| 로그인 기반 | member_id로 중복 확인 | 회원 전용 |
| 쿠키 | 브라우저 쿠키로 중복 확인 | 비회원 가능 |
| IP | IP 주소로 중복 확인 | 비회원 가능, 공유 IP 주의 |
6-4. 완료/오류 화면
| 화면 | 표시 조건 |
| 제출 완료 | 정상 제출 후 (/survey/{id}?done=1) |
| 이미 참여 | 중복 참여 방지에 걸린 경우 |
| 종료된 설문 | status=closed 또는 종료일 초과 |
7. DB 테이블 구조
| 테이블명 | 설명 | 주요 컬럼 |
| dx_survey | 설문 기본 정보 | id, title, status, category, start_at, end_at, response_count |
| dx_survey_questions | 질문 목록 | id, survey_id, question(제목), q_type(유형), required, sort_order |
| dx_survey_options | 선택지 목록 | id, question_id, label, sort |
| dx_survey_answers | 응답 데이터 | id, survey_id, question_id, member_id, ip, answer, created_at |
| dx_survey_responses | 참여 세션 | id, survey_id, member_id, ip, is_complete, completed_at, duration_sec |
| dx_survey_pages | 페이지 구성 | id, survey_id, title, sort |
| dx_survey_branches | 조건부 분기 설정 | id, survey_id, question_id, option_id, action |
| dx_survey_categories | 카테고리 | id, name, sort (id=9999는 설치 플래그) |
| dx_survey_drafts | 임시저장 | id, survey_id, member_id, answers_json, current_page |
| dx_survey_stats | 일별 통계 캐시 | id, survey_id, stat_date, response_cnt, complete_cnt |
8. 주의사항 및 FAQ
주의사항
• 관리자 AJAX는 /survey-ajax 경로로 처리됩니다. 해당 경로를 웹서버에서 차단하면 질문 추가/수정이 동작하지 않습니다.• survey_answers.answer 컬럼에는 survey_options.id(숫자)가 저장됩니다. 통계는 이 id로 옵션을 매칭합니다.
• array_merge() 대신 + 연산자를 사용해 question_id(숫자 키)를 보존합니다. 커스텀 수정 시 주의하세요.
• PHP 5.6 환경에서는 ?? (null coalescing) 연산자 사용 불가. isset($x)?$x:'' 형태만 사용하세요.
• CSV 내보내기 시 UTF-8 BOM이 포함되어 Excel에서 한글이 정상 표시됩니다.
• 설문 삭제 시 관련 질문, 선택지, 응답, 통계, 임시저장 데이터가 모두 삭제됩니다.
FAQ
| 질문 | 답변 |
| 통계에 응답이 0으로 보여요 | survey_answers 테이블에 데이터가 있는지 확인하세요. question_id가 0이면 saveAnswers 오류입니다. 참여 초기화 후 재시도하세요. |
| 질문 추가 시 오류가 발생해요 | /survey-ajax 경로가 서버에서 허용되는지 확인하세요. 01_survey_admin_ajax.php 파일이 extend/top/ 에 있어야 합니다. |
| 초기화 후에도 중복 참여로 막혀요 | 브라우저 쿠키를 직접 삭제하거나, 새 브라우저 탭에서 시도해보세요. |
| 기본 카테고리가 다시 생겨요 | dx_survey_categories에서 id=9999 행이 삭제된 경우입니다. 이 행이 없으면 매번 기본 카테고리를 재삽입합니다. |
9. 라이선스
| 항목 | 내용 |
| 라이선스명 | 디자인원엑스 라이선스 (DesignOneX License) |
| 원천 소유 | DesignOneX — designonex.com |
| 재배포·판매 | ❌ 금지 (원천 소스 90% 이상 수정 시 재배포·판매 가능) |
| 상업적 사용 | ✅ 상업적 프로젝트 제작에만 허용 (학습·개인 포트폴리오 포함) |
| 플러그인 원천 | plugin.php, core/, admin/ 자체의 재배포 및 판매 금지 |
| 보증 | 본 플러그인은 현재 상태 그대로 제공되며 어떠한 명시적·묵시적 보증도 없습니다. |