콘텐츠로 이동

3. 기술 스택

계층기술버전
CMSWordPress (Bedrock)6.9
언어PHP8.3
데이터베이스MariaDB10.11
템플릿Timber + Twig2.3
프론트엔드Svelte5.x
빌드 도구Vite6.x
CSSTailwind CSS4.x (CSS-first)
애니메이션GSAP3.x
슬라이더Swiper12.x
스크롤Lenis1.x
로컬 개발DDEV최신
DNS/CDNCloudflare-

구성 요소설명
roots/bedrockWordPress 보일러플레이트
roots/wordpressComposer로 관리되는 WP 코어
timber/timberTwig 템플릿 엔진 통합
config/application.php
Config::define('WP_DEBUG', false);
Config::define('DISALLOW_FILE_MODS', true);
Config::define('AUTOMATIC_UPDATER_DISABLED', true);
플러그인용도
advanced-custom-fields-pro커스텀 필드 + ACF 블록
timber/timberTwig 템플릿 엔진
polylang다국어 관리
all-in-one-seo-packSEO 최적화
bit-smtp이메일 발송 (SMTP)
complianz-gdprGDPR 쿠키 동의
complianz-terms-conditions이용약관 관리
safe-svgSVG 업로드 허용
post-types-order포스트 순서 관리
disable-comments-rb댓글 비활성화

Svelte 5의 Runes 문법을 사용합니다:

// Svelte 5 Runes 예시
let { title, items } = $props();
let count = $state(0);
let doubled = $derived(count * 2);
$effect(() => {
console.log('count changed:', count);
});

설정 파일 없이 CSS에서 직접 테마를 정의합니다:

src/styles.css
@import "tailwindcss";
@source "../templates/**/*.twig";
@source "../blocks/**/*.twig";
@source "../blocks/**/*.svelte";
@theme {
--font-display: "Poppins", sans-serif;
--font-body: "Inter", sans-serif;
--font-korean: "Pretendard", sans-serif;
--color-accent: #144B5C;
--color-body: #424242;
}
라이브러리용도
GSAP복잡한 애니메이션, 스크롤 트리거
Lenis부드러운 스크롤
Swiper슬라이더/캐러셀

로컬 개발 환경으로 DDEV를 사용합니다.

.ddev/config.yaml
name: genedit
type: wordpress
docroot: web
php_version: "8.3"
database:
type: mariadb
version: "10.11"
명령어설명
ddev start환경 시작
ddev launch브라우저에서 사이트 열기
ddev npm run devVite 개발 서버
ddev npm run build프로덕션 빌드
ddev composer installPHP 의존성 설치
ddev wpWP-CLI 실행

중요: 모든 npm/composer 명령은 반드시 ddev 접두사로 실행해야 합니다. 호스트(macOS)와 컨테이너(Linux) 간 네이티브 바이너리 불일치 문제를 방지합니다.


breezebio.com 도메인은 Cloudflare를 통해 DNS 및 CDN을 관리합니다.

%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '14px' }}}%%
flowchart TB
    subgraph CF["**Cloudflare**"]
        subgraph DNS["**DNS Records**"]
            A1["A breezebio.com → 서버 IP"]
            A2["A www → 서버 IP"]
            C1["CNAME 기타 서브도메인"]
        end
        subgraph SEC["**보안/성능 기능**"]
            S1["SSL/TLS: Full Strict"]
            S2["Auto Minify: JS, CSS, HTML"]
            S3["Brotli 압축: ON"]
            S4["Browser Cache TTL: 설정값"]
        end
        DNS --> SEC
    end

    style CF fill:#fff,stroke:#333,stroke-width:2px
    style DNS fill:#f5f5f5,stroke:#666,stroke-width:1px
    style SEC fill:#f5f5f5,stroke:#666,stroke-width:1px
    style A1 fill:#fff,stroke:#333,stroke-width:1px
    style A2 fill:#fff,stroke:#333,stroke-width:1px
    style C1 fill:#fff,stroke:#333,stroke-width:1px
    style S1 fill:#fff,stroke:#333,stroke-width:1px
    style S2 fill:#fff,stroke:#333,stroke-width:1px
    style S3 fill:#fff,stroke:#333,stroke-width:1px
    style S4 fill:#fff,stroke:#333,stroke-width:1px
기능설명상태
Proxy (주황색 구름)CDN + DDoS 보호 활성화ON
SSL/TLSFull (Strict) 모드ON
Auto MinifyJS/CSS/HTML 자동 압축ON
Always Use HTTPSHTTP → HTTPS 리다이렉트ON
BrotliBrotli 압축ON
  1. https://dash.cloudflare.com 접속
  2. 계정 로그인
  3. 좌측 메뉴에서 도메인 선택 (breezebio.com)
  1. Cloudflare 대시보드 → DNS → Records
  2. “Add record” 또는 기존 레코드 편집
  3. 저장 (전파 시간: 즉시~수 분)

사이트 업데이트 후 캐시 문제가 있을 경우:

  1. Cloudflare 대시보드 → Caching → Configuration
  2. “Purge Everything” 클릭
  3. 또는 특정 URL만 삭제: “Custom Purge”

긴급 수정 시 캐시를 일시 비활성화:

  1. Caching → Configuration
  2. “Development Mode” 토글 ON
  3. 3시간 후 자동 OFF

저장소용도
originGitHub (sknkwoxs/genedit)
live운영 서버 bare 저장소
# .gitignore (주요 항목)
/vendor/
/web/wp/
/web/app/plugins/
/web/app/uploads/
.env
node_modules/

dist/ 디렉토리는 Git에 포함됩니다 (CI/CD 없이 수동 배포).

Terminal window
# 배포 전 빌드
$ ddev npm run build
$ git add dist/
$ git commit -m "빌드 산출물 업데이트"
$ git push live main

Terminal window
# 데이터베이스
DB_NAME='db'
DB_USER='db'
DB_PASSWORD='db'
DB_HOST='db'
# WordPress
WP_ENV='development' # development | staging | production
WP_HOME='https://genedit.ddev.site'
WP_SITEURL='${WP_HOME}/wp'
# 보안 키 (자동 생성)
AUTH_KEY='...'
SECURE_AUTH_KEY='...'
# ... (8개 키)
환경WP_ENVWP_DEBUG캐시
개발developmenttrue비활성화
스테이징stagingtrue활성화
운영productionfalse활성화

← 이전: 2. 시스템 아키텍처 | 다음: 4. 테마 구조 →