📖 사이트X 사용설명서

이 문서는 사이트X 블로그/커뮤니티 HTML 템플릿의 전체 구조와 기능, 커스터마이징 방법을 안내합니다.
백엔드를 붙이기 전 프론트엔드 와이어프레임으로도 즉시 사용 가능합니다.

정적 HTML5 Vanilla CSS Vanilla JS 다크모드 반응형 광고 슬롯 내장

🗺 1. 사이트 개요

사이트X 템플릿은 커뮤니티/블로그형 웹사이트를 빠르게 구축할 수 있도록 설계된 순수 HTML·CSS·JS 기반의 프론트엔드 스타터킷입니다. 외부 라이브러리 의존성이 없어 로딩이 빠르고, 어떤 백엔드(Node.js, Django, Laravel 등)와도 연동할 수 있습니다.

설계 원칙

  • 제로 의존성 — CDN·npm 패키지 없이 브라우저만으로 동작합니다.
  • API 주석 방식 — 실제 서버 연동이 필요한 모든 자리에 [API: …] 주석이 표시되어 있어 개발자가 즉시 식별하고 구현할 수 있습니다.
  • CSS 변수(토큰) 기반 — 색상·간격·폰트를 :root 한 곳에서 수정하면 전체 사이트에 반영됩니다.
  • 더미 데이터 분리app.jsMOCK_BOARDS, MOCK_POSTS를 실제 API 호출로 교체하기만 하면 됩니다.

📁 2. 파일 구조

template/
  ├─ index.html 메인(홈) 페이지
  ├─ board.html 게시판 목록 페이지 (?id=a~h)
  ├─ post.html 게시글 상세 뷰 (?id=N)
  ├─ login.html 로그인 페이지
  ├─ signup.html 회원가입 페이지
  ├─ guide.html ← 이 페이지 (사용설명서)
  └─ assets/
      ├─ css/
      │   └─ style.css 전체 스타일 (디자인 토큰 포함)
      └─ js/
          └─ app.js 공통 JS (다크모드·더미데이터·렌더 함수)
💡 이미지 파일은 아직 포함되어 있지 않습니다. assets/img/ 폴더를 직접 만들고 아래 광고 슬롯 섹션에서 안내하는 파일명으로 저장하면 자동 적용됩니다.

📄 3. 페이지 안내

🏠
홈 (메인)
index.html
게시판 타일 그리드와 전체 최신글 목록을 표시합니다. JS가 더미 데이터를 동적으로 렌더링합니다.
📋
게시판
board.html?id=a
URL 파라미터 id로 어떤 게시판이든 하나의 파일로 처리합니다. 카테고리 탭·페이지네이션·글쓰기 버튼 포함.
📝
게시글 뷰
post.html?id=N
본문·광고·추천/비추천·댓글·이전·다음 글 네비게이션이 포함된 게시글 상세 페이지입니다.
🔐
로그인
login.html
아이디/비밀번호 로그인, 로그인 유지, 소셜 로그인(카카오·네이버·Google) 버튼이 준비되어 있습니다.
✏️
회원가입
signup.html
아이디·비밀번호·이메일·닉네임 입력 폼과 약관 동의 체크박스가 포함되어 있습니다.
📖
사용설명서
guide.html
지금 보고 계신 페이지입니다. 템플릿 전체 활용법과 기능을 정리합니다.

4. 주요 기능

🌙 다크모드

헤더 우측의 ◐ 버튼을 클릭하면 라이트/다크 모드가 전환됩니다. 선택값은 localStorage에 저장되어 재방문 시에도 유지됩니다.

// app.js — 테마 초기화 및 토글
localStorage.getItem("theme")  // "dark" | "light" | null
document.documentElement.setAttribute("data-theme", "dark")

🔍 검색 바

헤더의 검색 입력창에서 Enter를 누르면 현재는 데모 알림이 표시됩니다. 실제 구현 시 GET /api/search?q=… 엔드포인트로 연결하세요.

📊 게시판 타일 그리드 (메인)

renderBoardGrid(selector) 함수가 MOCK_BOARDS 배열을 읽어 아이콘·이름·글 수 카드를 렌더링합니다. 마우스를 올리면 카드가 살짝 위로 떠오르는 호버 효과가 있습니다.

// 실제 API로 교체하는 방법
const res = await fetch("/api/boards");
window.MOCK_BOARDS = await res.json();
renderBoardGrid("#board-grid");

📜 게시글 목록 테이블

renderPostList(selector, limit) 함수가 번호·분류·제목·작성자·날짜·조회·추천 컬럼을 가진 테이블을 생성합니다. 조회 수 상위 3개 게시글에는 자동으로 HOT 뱃지가 붙습니다.

🗂 카테고리 탭 (게시판)

게시판 페이지 내 전체 / 공지 / 일반 / 질문 / 후기 탭으로 구성되어 있습니다. 탭 클릭 시 해당 카테고리 API를 호출해 목록을 갱신하도록 연결하면 됩니다.

📑 페이지네이션

이전(‹)·다음(›) 버튼과 숫자 페이지가 준비되어 있습니다. 현재 페이지는 .active 클래스로 강조됩니다.

👍 추천 / 비추천 / 스크랩 / 신고

게시글 하단 액션 버튼 4종이 있습니다. 각 버튼의 onclick 핸들러에 아래 API를 연결하세요.

  • 추천 → POST /api/posts/:id/like
  • 비추천 → POST /api/posts/:id/dislike
  • 스크랩 → POST /api/posts/:id/scrap
  • 신고 → POST /api/posts/:id/report

💬 댓글

댓글 폼(.comment-form-el)과 목록(.comment-list)이 post.html에 포함되어 있습니다. 폼 submit 시 현재는 데모 알림이 표시됩니다.

🔑 소셜 로그인 버튼

login.html에 카카오·네이버·Google 버튼이 준비되어 있습니다. 각 버튼에 OAuth 인증 URL을 href 또는 onclick으로 연결하면 됩니다.

⚠️ 로그인·가입 폼의 submit 이벤트는 현재 데모 알림만 표시합니다. 실제 인증 처리는 app.js 하단의 auth-form 핸들러를 수정하세요.

🔌 5. API 연동 포인트

코드 내 [API: …] 주석이 달린 곳이 모두 실제 서버 연동이 필요한 지점입니다.

엔드포인트 메서드 설명 위치 파일
/api/search?q=… GET 전체 검색 index.html · board.html
/api/boards GET 게시판 목록 전체 app.js
/api/boards/:id/posts GET 게시판별 글 목록 (page, cat 파라미터) app.js · board.html
/api/posts/:id/like POST 게시글 추천 post.html
/api/posts/:id/dislike POST 게시글 비추천 post.html
/api/posts/:id/scrap POST 스크랩 post.html
/api/posts/:id/report POST 신고 post.html
/api/posts/:id/comments POST 댓글 등록 post.html
/api/auth/login POST 로그인 { id, pw } login.html · app.js
/api/auth/signup POST 회원가입 { id, pw, email, nickname } signup.html · app.js

🎨 6. 디자인 토큰

style.css:root 블록에서 CSS 변수를 수정하면 사이트 전체 디자인이 바뀝니다. 다크모드는 [data-theme="dark"] 블록을 수정하세요.

색상 변수

--bg
#f6f7f9 — 페이지 배경
--surface
#ffffff — 카드 배경
--surface-2
#f0f2f5 — 보조 표면
--accent
#2f6feb — 주 색상(링크·버튼)
--danger
#e04848 — 위험·삭제
--success
#2ea043 — 성공·완료

간격(Spacing) 변수

--sp-1
4px
--sp-2
8px
--sp-3
12px
--sp-4
16px
--sp-5
24px
--sp-6
32px
--sp-8
48px

레이아웃 변수

  • --container: 1200px — 페이지 최대 너비
  • --header-h: 60px — 헤더 높이
  • --radius: 8px / --radius-sm: 4px — 모서리 둥글기

반응형 브레이크포인트

  • ≤ 960px — 사이드바가 숨겨지고 단일 컬럼 레이아웃으로 전환됩니다.

📢 7. 광고 슬롯

광고 이미지를 교체하거나 Google Ads 코드를 넣을 수 있는 자리가 사전 지정되어 있습니다.

슬롯 위치권장 크기교체 방법해당 파일
상단 배너 728 × 90 assets/img/banner-top.jpg 저장 후 .banner-top 배경 변경 index.html · board.html · post.html
사이드바 상단 300 × 250 .ad-slot 내부를 <img> 또는 Ads 스크립트로 교체 index.html · board.html · post.html
사이드바 하단 300 × 600 위와 동일 index.html · board.html · post.html
글 상단 728 × 90 post.html 내 첫 번째 .ad-slot 교체 post.html
글 하단 728 × 90 post.html 내 두 번째 .ad-slot 교체 post.html
💡 Google AdSense를 사용할 경우, <div class="ad-slot"> 내부를 <ins class="adsbygoogle"> 태그로 교체하고 헤드에 AdSense 스크립트를 추가하면 됩니다.

🛠 8. 커스터마이징 가이드

사이트 이름 변경

모든 HTML 파일의 <title> 태그와 .logo 텍스트(사이트X)를 원하는 이름으로 바꾸세요.

게시판 추가/변경

모든 페이지의 .nav-main<li> 항목과, app.jsMOCK_BOARDS 배열을 수정하면 됩니다.

// app.js — MOCK_BOARDS 예시
window.MOCK_BOARDS = [
  { id: "tech", icon: "💻", name: "개발", count: 0 },
  { id: "life", icon: "🌱", name: "일상", count: 0 },
];

포인트 컬러 변경

style.css--accent 값만 바꾸면 버튼·링크·활성 탭 등 모든 강조 색상이 한꺼번에 바뀝니다.

/* style.css */
:root {
  --accent: #e85d04;       /* 원하는 색상으로 교체 */
  --accent-hover: #c44d00;  /* 호버 시 살짝 어두운 색 */
}

본문 콘텐츠 렌더링 (post.html)

.post-body 내부는 서버에서 받은 HTML이 들어오는 자리입니다. 마크다운을 HTML로 변환한 뒤 반드시 DOMPurify 등으로 XSS 필터링을 적용하세요.

// 예시 — 안전한 HTML 삽입
import DOMPurify from "dompurify";
document.querySelector(".post-body").innerHTML =
  DOMPurify.sanitize(markdownToHtml(rawContent));

🚀 9. 배포 체크리스트

실제 서비스 전 아래 항목을 확인하세요.

  • 모든 [API: …] 주석 자리에 실제 API 연동 완료
  • 더미 데이터(MOCK_BOARDS, MOCK_POSTS)를 서버 응답으로 교체
  • 광고 슬롯(.ad-slot)에 실제 광고 코드 삽입
  • 로그인 폼 — 실제 인증 로직 연결 (app.js auth-form 핸들러 수정)
  • 소셜 로그인 버튼 — OAuth 콜백 URL 등록 및 연결
  • 게시글 본문 — DOMPurify 등 XSS 방어 처리
  • <title><meta description> SEO 정보 채우기
  • 파비콘(favicon.ico) 추가
  • 이미지 최적화 (WebP 변환 권장)
  • HTTPS 적용 확인
  • 모바일(≤960px) 레이아웃 크로스 브라우저 확인
🌐 현재 이 템플릿은 Cloudflare Pages(june-ca.pages.dev)에 배포되어 있습니다. 코드를 수정한 후 npx wrangler pages deploy template --project-name june-ca 명령어를 실행하면 즉시 반영됩니다.