회원가입 | 고객센터 |
DESIGNONEX
dxcms.kr
로그인 회원가입
고객센터
5. 관리자 기능 사용법

DX 마켓

D DX
2026.04.21 01:32(수정됨) 177 0

1. DX 마켓 개요

DXCMS 관리자 패널의 [DX 마켓] 메뉴는 DesignOneX 생태계에서 공유되는 플러그인•테마•스킨을 탐색하고 한 클릭으로 설치하거나, 개발자로 등록하여 자신이 만든 아이템을 마켓에 직접 등록•배포하는 통합 앱스토어 도구입니다.

📌  접근 경로: 관리자 대시보드 → DX 마켓 (URL: /admin/market) 연동 중앙 서버: designonex.com


1.1 DX 마켓 시스템 구조

구성 요소 설명
DxMarket 클래스 DXCMS와 designonex.com 중앙 서버 간 통신을 담당하는 PHP 싱글톤 클래스.
중앙 마켓 서버 designonex.com. 아이템 목록·다운로드 URL·SHA-256 해시·통계 데이터를 제공하는 REST API 서버.
아이템 유형 3종 plugin(플러그인) / theme(테마) / skin(스킨). 각각 /plugins/, /themes/, /skins/ 디렉터리에 설치.
개발자 키 (dxd_) designonex.com에서 발급하는 개발자 API 키. dxd_로 시작. 마켓 등록·업데이트·내리기 시 필요.
SHA-256 무결성 검증 등록 시 중앙 서버가 download_url에서 파일을 다운로드하여 해시를 저장. 사용자 설치 시 동일 해시로 파일 무결성을 검증.
로컬 설치 감지 마켓 목록에서 이미 설치된 아이템은 "✓ 설치됨" 배지와 버튼으로 표시. /plugins/·/themes/ 디렉터리를 직접 스캔.


1.2 화면 구성 — 2탭 구조

설명
🏪 마켓 탐색 마켓에 등록된 플러그인·테마·스킨을 검색·필터링하여 탐색. 아이템 카드 보기·설치 가능.
💻 개발자 개발자 키 등록/교체. 아이템 마켓 등록 폼. 개발자 키가 있을 때만 등록 폼 표시.


1.3 페이지 헤더 통계 배지

페이지 상단 우측에 DX 마켓 전체 통계가 실시간으로 표시됩니다.
 
배지 배지 색상 표시 내용
N 플러그인 보라색 마켓에 등록된 총 플러그인 수(stats.plugins).
N 테마 초록색 마켓에 등록된 총 테마 수(stats.themes).
N 스킨 파란색 마켓에 등록된 총 스킨 수(stats.skins).
N 다운로드 회색 전체 누적 다운로드 수(stats.total_dl). 천 단위 쉼표.


2. 마켓 탐색 탭

마켓에 등록된 플러그인•테마•스킨을 검색하고 설치합니다. 탭 레이블 옆의 보라색 숫자 배지로 전체 등록 아이템 수를 확인할 수 있습니다.


2.1 검색 및 필터 바

필터 항목 GET 파라미터 설명 및 선택지
검색어 search 아이템 이름·태그·설명에서 검색. 예: "게시판", "반응형". 빈 값이면 전체 목록.
종류 (유형 필터) type 전체(all) / 플러그인(plugin) / 테마(theme) / 스킨(skin). 기본값: all.
정렬 sort 최신순(newest) / 인기순(popular) / 평점순(rating). 기본값: newest.
페이지 page 페이지 번호. 기본값: 1. 페이지당 20개 아이템 표시.

💡  검색 후 URL에 ?tab=browse&search=키워드&type=plugin&sort=newest 형식으로 파라미터가 추가됩니다. 이 URL을 즐겨찾기하면 같은 조건으로 바로 접근할 수 있습니다.


2.2 아이템 카드 구성

요소 설명
미리보기 이미지 preview_url이 있으면 160px 높이 object-cover 이미지. 없으면 유형별 아이콘(플러그인=퍼즐/테마=팔레트/스킨=스와치북).
유형 배지 PLUGIN(보라) / THEME(초록) / SKIN(파랑) 배지. 우측에 "유료" 배지(주황), "✓ 설치됨" 배지(초록) 표시.
아이템명·버전·제작자 굵은 이름 + "v버전" + "·" + 제작자(author 또는 dev_name).
평점 rating_count > 0이면 카드 우측 상단에 ★ N.N (N개 리뷰) 표시.
설명 description 텍스트 최대 2줄(-webkit-line-clamp:2) 표시.
다운로드 수 카드 하단 왼쪽. ⬇ N 형식. 천 단위 쉼표.
[홈페이지] 버튼 homepage_url이 있을 때 표시. 새 탭으로 아이템 공식 홈페이지 이동.
[구매] 버튼 (유료) is_paid=1이고 purchase_url이 있으면 주황 [구매] 버튼. 새 탭으로 구매 페이지 이동. 설치 버튼 없음.
[설치] 버튼 (무료·미설치) 무료 아이템이고 미설치 상태이면 보라색 [설치] 버튼 표시. 클릭 시 확인 창 후 설치 진행.
"✓ 설치됨" 표시 (설치 완료) 이미 로컬에 설치된 아이템은 초록 "✓ 설치됨" 스팬. 재설치 버튼 없음.


2.3 설치 처리 흐름

[설치] 버튼 클릭 시 "아이템명을 설치하시겠습니까?" 확인 창 후 다음 순서로 처리됩니다.
  1. CSRF 토큰 검증
  2. unique_id와 item_type POST 파라미터 확인
  3. DxMarket::installItem($uniqueId, $itemType) 실행
  4. 중앙 서버에서 download_url과 저장된 SHA-256 해시 조회
  5. download_url에서 ZIP 파일 다운로드
  6. 다운로드된 파일의 SHA-256 해시 계산 후 중앙 서버 해시와 비교 (무결성 검증)
  7. item_type에 따라 /plugins/ 또는 /themes/ 디렉터리에 ZIP 압축 해제
  8. download_count 증가 (중앙 서버 API 호출)
  9. 성공: "N 아이템 설치 완료" 메시지. 마켓 탐색 탭으로 유지. 카드에 "✓ 설치됨" 배지 표시.

💡  설치 후 [플러그인 관리] 또는 [테마 관리] 메뉴에서 해당 아이템을 활성화하거나 선택하세요. 설치 자체가 활성화를 의미하지 않습니다.


2.4 설치 실패 원인

오류 메시지 원인 및 해결
unique_id 없음 POST 데이터 오류. 페이지를 새로고침 후 재시도.
해시 불일치 파일이 변조되었거나 다운로드 중 손상. 개발자에게 파일 재업로드 요청.
ZIP 다운로드 실패 download_url 서버가 응답하지 않거나 파일 없음. 개발자 문의.
압축 해제 실패 /plugins/ 또는 /themes/ 디렉터리 쓰기 권한 없음. 서버 권한 확인.
중앙 서버 연결 실패 designonex.com API 서버 장애 또는 방화벽 차단. 잠시 후 재시도.


2.5 페이지네이션

아이템이 20개 초과 시 하단에 페이지 번호 버튼이 표시됩니다. 클릭 시 현재 검색 조건을 유지하며 해당 페이지로 이동합니다.
 
표시 조건 browsePages > 1일 때(총 페이지 수가 2 이상).
URL 파라미터 ?tab=browse&page=N&type={유형}&sort={정렬}&search={검색어} 형태 유지.
현재 페이지 보라색 배경(#7c3aed) 흰색 텍스트로 구분. 다른 페이지는 회색 배경.


3. 개발자 탭 — 개발자 키 등록

[개발자] 탭에서는 designonex.com에서 발급한 개발자 키를 등록하고, 마켓에 플러그인•테마•스킨을 직접 배포합니다. 개발자 키가 등록되면 탭 레이블 옆에 초록색 "등록됨" 배지가 표시됩니다.


3.1 개발자 키란?

개발자 키는 designonex.com에서 발급하는 API 인증 토큰으로, 마켓에 아이템을 등록•수정•삭제할 수 있는 권한을 부여합니다.
 
키 형식 dxd_로 시작하는 문자열. 예: dxd_a1b2c3d4_xxxxxxxxxxxxxxxxxxxx.
발급 위치 designonex.com → 로그인 → developer-key.php 페이지에서 발급.
발급 조건 designonex.com 회원가입 및 개발자 인증 완료.
DB 저장 키 settings 테이블의 market_dev_key (setting_group=market).
유효성 검사 dxd_로 시작하지 않으면 "올바른 개발자 키를 입력하세요" 오류. 서버에서만 검사.
복사 기능 등록된 키는 보라색 모노스페이스로 표시 + [복사] 버튼 제공.


3.2 개발자 키 등록 절차

  1. designonex.com 접속 후 회원가입 및 로그인
  2. developer-key.php 페이지에서 개발자 키(dxd_xxx) 발급
  3. 발급된 키 전체 복사
  4. [관리자 → DX 마켓] → [개발자] 탭 클릭
  5. [발급받은 개발자 키 입력] 필드에 붙여넣기
  6. [키 저장] 버튼 클릭
  7. PRG 패턴으로 ?tab=developer&saved=1 리다이렉트 → "개발자 키가 교체되었습니다." 메시지
  8. 탭 레이블에 초록 "등록됨" 배지 확인
  9. 아래에 아이템 등록 폼이 표시됨 확인

💡  기존 키를 교체하려면 동일한 방법으로 새 키를 입력하고 저장하면 됩니다. 폼 레이블이 "개발자 키 교체"로 변경되고 버튼이 "키 교체"로 표시됩니다.


3.3 키 저장 처리

  1. CSRF 토큰 검증
  2. 입력값이 비어있거나 dxd_로 시작하지 않으면 "올바른 개발자 키를 입력하세요." 오류
  3. settings 테이블에 market_dev_key UPSERT (setting_group=market)
  4. PRG 패턴: /admin/market?tab=developer&saved=1로 리다이렉트
  5. 리다이렉트 후 GET ?saved=1 감지 → "개발자 키가 교체되었습니다." 성공 메시지


4. 개발자 탭 — 아이템 마켓 등록

개발자 키가 등록되면 [개발자] 탭 하단에 아이템 등록 폼이 표시됩니다. 새 아이템 등록과 기존 아이템 업데이트(버전 변경)를 모두 이 폼으로 처리합니다.


4.1 등록 폼 전체 필드

필드명 필수 여부 설명 및 유의사항
종류 (item_type) 필수 드롭다운: 플러그인(plugin) / 테마(theme) / 스킨(skin). 설치 디렉터리 결정.
폴더명 (folder_name) 필수 서버에 설치될 디렉터리명. 영문 소문자·숫자·하이픈만 허용. 예: my-plugin. 동일 폴더명으로 재등록 시 버전 업데이트.
버전 (version) 필수 시맨틱 버전 권장. 예: 1.0.0, 2.3.1. 기본값: 1.0.0.
이름 (item_name) 필수 마켓에 표시될 아이템 표시 이름. 예: 내 플러그인, 미니멀 블로그 테마.
카테고리 (category) 선택 게시판·쇼핑·블로그·소셜·유틸리티·SEO·보안·기타 중 선택.
다운로드 URL (download_url) 필수 개발자 서버에 호스팅된 ZIP 파일의 직접 다운로드 URL. 예: https://mysite.com/my-plugin-v1.0.0.zip. 등록 시 중앙서버가 이 URL에서 파일을 다운로드하여 SHA-256 해시를 저장.
미리보기 이미지 URL (preview_url) 선택 마켓 카드 상단에 표시될 스크린샷 이미지 URL. 없으면 유형 아이콘으로 대체.
홈페이지 URL (homepage_url) 선택 플러그인/테마 공식 홈페이지 또는 GitHub 페이지 URL. 카드에 [홈페이지] 버튼으로 표시.
설명 (description) 선택 마켓 카드 설명 텍스트. 2줄 이후 자동 줄임.
태그 (tags) 선택 쉼표로 구분한 검색 키워드. 예: 게시판,댓글,소셜. 마켓 검색 시 태그도 검색 대상.
변경사항 (changelog) 선택 업데이트 시 변경 내용 기록. 예: 버그 수정, 신규 기능 추가.
유료 아이템 (is_paid) 선택 체크 시 유료 아이템으로 등록. 아래 가격·통화·구매 URL 입력 필드가 표시됨.
가격 (price) 유료 시 판매 가격. 소수점 허용(step=0.01). 예: 29000.
통화 (price_unit) 유료 시 KRW 또는 USD.
구매 페이지 URL (purchase_url) 유료 시 결제·구매가 이루어지는 외부 페이지 URL. 카드에 주황 [구매] 버튼으로 표시.


4.2 등록 처리 흐름

  1. CSRF 토큰 검증
  2. 개발자 키(market_dev_key) 존재 확인 → 없으면 오류
  3. payload 배열 구성 (item_type 유효성 검사: plugin/theme/skin 외 값이면 plugin으로 강제)
  4. DxMarket::registerItem($devKey, $payload) 실행
  5. 중앙 서버 API 호출: download_url에서 파일 다운로드 → SHA-256 해시 계산 및 저장
  6. 기존 동일 folder_name+item_type이면 버전 업데이트(action=updated), 없으면 신규 등록(action=processed)
  7. 성공: "버전 업데이트 완료 — unique_id: xxx / hash: abc123..." 또는 "마켓 등록 완료 — unique_id: xxx / hash: ..." 메시지
  8. 실패: 중앙 서버 반환 오류 메시지 표시

🔐  등록 시 중앙 서버가 download_url에서 파일을 실제로 다운로드하여 SHA-256 해시를 저장합니다. 이후 사용자가 설치할 때 동일한 해시로 파일 무결성을 검증합니다. 파일을 수정했다면 반드시 새 버전으로 재등록하세요.


4.3 신규 등록 vs 버전 업데이트

구분 조건 처리 결과
신규 등록 folder_name + item_type 조합이 마켓에 없는 경우 "마켓 등록 완료" 메시지. 새 unique_id 발급.
버전 업데이트 동일 folder_name + item_type이 이미 마켓에 등록된 경우 "버전 업데이트 완료" 메시지. 기존 unique_id 유지, 해시·버전·변경사항 갱신.

💡  버전 업데이트 시에는 등록 폼에 folder_name과 item_type을 동일하게 입력하고, version과 download_url(새 ZIP)•changelog를 변경하면 됩니다.


5. 마켓에서 아이템 내리기

등록한 아이템을 마켓에서 비공개 처리합니다. 현재 v8.1.0 관리자 UI에는 아이템 내리기 전용 버튼이 표시되지 않으나, POST action=delete_item 으로 내부 처리가 구현되어 있습니다.


5.1 내리기 처리 흐름

  1. 개발자 키(market_dev_key) + unique_id POST 파라미터 확인
  2. DxMarket::deleteItem($devKey, $uniqueId) 실행
  3. 중앙 서버에 아이템 비공개 요청
  4. 성공: "마켓에서 내려졌습니다." 메시지
  5. 실패: 중앙 서버 반환 오류 메시지

⚠️  아이템을 내려도 이미 설치한 사용자의 파일은 삭제되지 않습니다. 마켓 목록에서만 제외되며, 신규 설치가 차단됩니다. 이 기능은 [테마 관리] 또는 [플러그인 관리]의 "마켓 공유 중단" 버튼으로도 실행할 수 있습니다.


6. 유료 아이템 처리

is_paid=1로 등록된 아이템은 마켓 카드에서 [구매] 버튼이 표시되고 [설치] 버튼이 표시되지 않습니다.


6.1 유료 아이템 카드 표시

"유료" 배지 카드 유형 배지 옆에 주황색 "유료" pill 배지 표시.
[구매] 버튼 주황색 그라데이션 버튼. purchase_url이 있으면 새 탭으로 구매 페이지 이동.
[설치] 버튼 없음 유료 아이템에는 직접 설치 버튼이 없습니다. 구매 후 제공되는 ZIP을 수동 설치.
가격 표시 마켓 카드에 가격·통화 표시(구현은 중앙 서버 응답 데이터에 따름).


6.2 유료 아이템 수동 설치 방법

  1. 마켓 카드의 [구매] 버튼 클릭 → 개발자 구매 페이지로 이동
  2. 결제 완료 후 개발자로부터 ZIP 파일 다운로드
  3. 서버에 FTP•파일 관리자로 직접 업로드하여 /plugins/ 또는 /themes/ 디렉터리에 압축 해제
  4. 관리자 → [플러그인 관리] 또는 [테마 관리]에서 새 아이템 확인 후 활성화


7. 전체 사용 절차


7.1 마켓에서 무료 플러그인 설치

  1. [관리자 → DX 마켓] 메뉴 클릭
  2. [마켓 탐색] 탭에서 종류=플러그인, 정렬=인기순 설정 후 [검색]
  3. 원하는 플러그인 카드의 [홈페이지] 버튼으로 상세 정보 확인
  4. 카드의 [설치] 버튼 클릭
  5. "플러그인명을 설치하시겠습니까?" 확인 창에서 [확인]
  6. "설치 완료" 성공 메시지 및 카드에 "✓ 설치됨" 배지 확인
  7. [플러그인 관리] 메뉴로 이동하여 해당 플러그인 [활성화하기] 클릭


7.2 개발자로 등록하여 아이템 배포

  1. designonex.com에서 회원가입 후 developer-key.php에서 dxd_ 키 발급
  2. [관리자 → DX 마켓] → [개발자] 탭 클릭
  3. 개발자 키 입력 후 [키 저장]
  4. 개발자 서버에 ZIP 파일 업로드 및 다운로드 URL 준비
  5. 등록 폼에서 종류•폴더명•버전•이름•download_url 입력
  6. 미리보기 이미지•홈페이지•설명•태그 추가(선택)
  7. 유료이면 [유료 아이템] 체크 후 가격•통화•구매 URL 입력
  8. [마켓에 등록 / 업데이트] 버튼 클릭
  9. "마켓 등록 완료 — unique_id: xxx" 성공 메시지 확인
  10. [마켓 탐색] 탭에서 등록된 아이템 확인


7.3 기존 아이템 버전 업데이트

  1. 플러그인/테마 파일 수정 후 새 버전 ZIP 파일 생성
  2. 개발자 서버에 새 ZIP 업로드 (새 URL 또는 기존 URL 덮어쓰기)
  3. [개발자] 탭 → 등록 폼에서 동일한 폴더명•종류•새 버전번호•새 download_url•변경사항 입력
  4. [마켓에 등록 / 업데이트] 클릭
  5. "버전 업데이트 완료" 메시지 확인


8. 자주 묻는 질문 (FAQ)


Q1. 마켓 아이템이 표시되지 않습니다.

A. designonex.com 중앙 서버와의 네트워크 연결을 확인하세요. 서버 방화벽에서 외부 HTTPS 요청이 차단된 경우 마켓 API에 접근하지 못합니다. 또한 중앙 서버에 등록된 아이템이 없는 경우 "등록된 아이템이 없습니다." 안내가 표시됩니다.


Q2. [설치] 버튼을 눌렀는데 "압축 해제 실패"가 뜹니다.

A. /plugins/ 또는 /themes/ 디렉터리의 쓰기(write) 권한을 확인하세요. Linux 환경에서는 chmod 755 또는 chmod 775로 권한을 설정하세요. 파일 소유자도 웹서버 사용자(www-data, apache 등)와 일치해야 합니다.


Q3. 개발자 키를 입력했는데 "올바른 개발자 키를 입력하세요" 오류가 납니다.

A. 입력한 키가 dxd_로 시작하는지 확인하세요. designonex.com에서 발급한 키가 맞는지, 복사 시 공백이 포함되지 않았는지 확인하세요.


Q4. 마켓에 등록했는데 검색이 되지 않습니다.

A. 중앙 서버의 검색 인덱스 업데이트에 수 분이 소요될 수 있습니다. 잠시 후 새로고침하거나 정확한 폴더명으로 검색해보세요.


Q5. 설치한 플러그인이 [플러그인 관리]에 표시되지 않습니다.

A. 설치가 성공했다면 /plugins/{폴더명}/ 디렉터리에 파일이 있어야 합니다. [플러그인 관리] 페이지는 이 디렉터리를 스캔하여 목록을 생성합니다. 파일이 있는데 표시되지 않는다면 plugin.php 파일이 없는 것입니다. 플러그인 제작자에게 문의하세요.


Q6. 다운로드 URL을 변경하지 않고 버전만 올릴 수 있나요?

A. 권장하지 않습니다. 중앙 서버는 download_url에서 파일을 다운로드하여 새 해시를 저장합니다. 같은 URL이어도 파일이 변경되었다면 반드시 재등록하세요. URL을 변경하지 않고 버전만 올리면 이전 파일의 해시가 새 버전으로 저장됩니다.


Q7. 유료 아이템을 무료로 전환하거나 가격을 변경하려면?

A. 등록 폼에서 동일한 folder_name과 item_type으로 다시 등록하되 is_paid 체크 해제(무료) 또는 가격 변경 후 제출하세요. 버전 업데이트와 동일한 방식입니다.


9. 용어 정리

용어 설명
DxMarket DXCMS와 마켓 중앙 서버 간 통신을 담당하는 PHP 싱글톤 클래스.
중앙 마켓 서버 designonex.com. 아이템 목록·해시·통계를 관리하는 REST API 서버.
unique_id 마켓에 등록된 아이템의 고유 식별자. 등록 시 중앙 서버가 발급.
folder_name 아이템이 설치될 디렉터리명. 영문·숫자·하이픈만 허용. 업데이트의 기준값.
item_type 아이템 유형. plugin(/plugins/ 설치) / theme(/themes/ 설치) / skin(/skins/ 설치).
개발자 키 (dxd_) designonex.com에서 발급하는 개발자 API 키. dxd_로 시작. 등록·수정·삭제 권한.
market_dev_key settings 테이블에 저장되는 개발자 키 setting_key.
download_url 아이템 ZIP 파일의 직접 다운로드 URL. 등록 시 중앙서버가 이 URL로 파일을 가져옴.
SHA-256 해시 파일 무결성 검증 알고리즘. 등록 시 저장, 설치 시 비교하여 변조 여부 확인.
registerItem() 마켓 등록/업데이트를 수행하는 DxMarket 메서드. 신규이면 등록, 기존이면 업데이트.
installItem() 마켓 아이템 설치 메서드. 다운로드→해시 검증→압축 해제 수행.
deleteItem() 마켓에서 아이템을 내리는 메서드. 중앙 서버 비공개 처리.
getStats() 마켓 통계(플러그인/테마/스킨 수, 총 다운로드)를 반환하는 메서드.
getMarket() 아이템 목록을 type/search/sort/page 파라미터로 조회하는 메서드.
is_paid 유료 여부. 1=유료(구매 페이지), 0=무료(설치 버튼).
is_installed (isInstalled) 로컬 /plugins/ 또는 /themes/ 디렉터리에 이미 설치된 아이템 여부.
action (등록 결과) registerItem() 반환의 action 키. processed=신규, updated=업데이트.
per_page 마켓 탐색 페이지당 아이템 수. 현재 20개 고정.
PRG 패턴 개발자 키 저장 후 ?saved=1로 GET 리다이렉트. 중복 제출 방지.

댓글0

로그인 후 댓글을 작성할 수 있습니다.
1. DX 철학 / 개념 왜 DXCMS를 만들었는가 2026.04.20 1. DX 철학 / 개념 DXCMS란 무엇인가 2026.04.20 DXCMS 활용 (CMS) DXCMS 날코딩•막코딩 완전 허용 2026.04.12
31
전체 회원
503
전체 게시글
770
전체 댓글
441
오늘 방문
33,173
전체 방문
2
현재 접속
인기글 7일 이내
최신글
최신댓글
목록