도메인마다 하나씩, 독립된 패키지로 운영합니다.
여러 사이트를 한 코드로 묶던 테넌트 구조를 걷어냈습니다. 사이트마다 자기 패키지, 자기 DB, 자기 업로드 폴더를 갖고 업데이트는 패치 서버에서 버전으로 받습니다. 관리자 화면에서 한 번 누르면 백업 → 교체 → 점검 → 필요하면 롤백까지 스스로 합니다.
- 점검 모드
- 다운로드 · sha256
- DB 백업
- current 교체
- 마이그레이션
- 헬스체크
- 실패 시 롤백
사이트 하나 고치려고
전체 서버를 건드리고 계신가요?
한 코드에 여러 사이트를 얹으면 하나를 고칠 때 나머지가 흔들립니다. xPage 2는 사이트를 서로 떼어 놓고, 대신 업데이트를 한 곳에서 배포합니다.
도메인 하나에 패키지 하나
테넌트 컬럼도, 공유 업로드 폴더도 없습니다. 사이트마다 site/.env 와 DB, public/uploads 를 따로 갖고, 코어는 releases/vX 로 버전째 바뀝니다. 한 사이트의 문제가 다른 사이트로 번지지 않습니다.
수정은 서버가 아니라 버전으로
모든 변경은 릴리스로 만들어 패치 서버에 올리고, 각 사이트는 관리자 화면 도구 › 버전 에서 받아 적용합니다. 백업과 헬스체크가 붙어 있어 실패하면 이전 버전으로 돌아갑니다.
디자인은 관리자에서 조립
템플릿을 고르고 서브메뉴 형식을 정하고 메인 블록을 순서대로 쌓습니다. 히어로 파노라마, 메인노출, 강조형, 웹진형, 랭킹, 태그 — 코드 없이 관리자 화면에서 끝납니다.
최근 패치로
이렇게 달라졌습니다.
webjangee.com, local.xpage.kr, kjbridge.net, jp.kjbridge.net 네 사이트가 같은 패치 서버에서 같은 버전을 받으며 검증한 내용입니다.
메인 레이아웃 블록 확장
히어로 파노라마(좌 썸네일 · 우 제목, 메인노출 글만), 메인노출 섹션, 강조형(대형 1 + 목록), 웹진형, 랭킹, 태그 클라우드. 배경 가로 100% 밴드와 가운데 정렬 타이틀로 통일.
서브탭 노출 기준 정리
메뉴가 1차로 끝나면 콘텐츠 타이틀부터, 2차가 있으면 서브탑 밴드 + 1차/2차 드롭다운. 모바일은 최종 메뉴만. 세 템플릿 모두 같은 규칙.
서브탭 · 좌측 · 우측 메뉴
서브메뉴 형식 3종. 사이드 박스는 2차 메뉴가 있을 때만, 1차 메뉴를 타이틀로 2차 목록만 표시. 메인노출 · 서브탑노출 위젯이 함께 붙습니다.
게시판 자체 글쓰기
글쓰기 · 수정이 관리자 모드로 넘어가지 않고 게시판 안에서 처리. 카테고리, 옵션(공지 · 비밀 · 메인노출 · 서브탑노출), 에디터, 태그, 링크, 유튜브, 썸네일 등록 · 삭제, 첨부 무제한.
blog_premium 템플릿 추가
매거진형 블로그 템플릿. 카테고리 컬러 라벨, 라이트 · 다크, 검색 레이어, 플로팅 퀵메뉴, 정렬(최신 · 조회 · 제목), 서브탑 노출 슬라이드, 태그 검색까지 CMS 데이터에 연결.
기존 사이트 이관 도구
migrate-legacy.php 하나로 게시판, 메뉴, 게시물, 첨부, 설정을 옮깁니다. 테넌트 접두 링크 정리, 템플릿 id 매핑, 누락 파일 점검까지. 세 사이트를 이 도구로 옮겼습니다.
템플릿을 고르면,
메뉴와 글은 그대로 옷만 바뀝니다.
세 템플릿은 같은 데이터, 같은 글쓰기 폼, 같은 서브탭 규칙을 공유합니다. 관리자 › 디자인에서 바꾸면 바로 적용됩니다.

dark_blue_basic
기업 · 커뮤니티용 기본형. 서브탑 밴드와 카테고리 탭이 깔끔한 다크 블루.
- 히어로 파노라마 · 강조형 · 웹진형
- 서브탑 밴드 + 1차/2차 드롭다운
- 다크 · 라이트 모드
- webjangee.com 적용

bridge_style
로컬 브릿지 시안에서 온 라이트 기본형. 서브페이지 헤더 탭과 서브탑 슬라이드.
- 서브페이지 헤더 탭(2차 · 카테고리)
- 서브탑 노출 썸네일 슬라이드
- 서브탭 · 좌측 · 우측 메뉴
- local.xpage.kr · jp.kjbridge.net 적용

blog_premium
버건디 액센트의 매거진형. 카테고리 컬러 라벨과 정렬, 검색 레이어, 플로팅 퀵메뉴.
- 홈 모듈: 히어로 · 강조형 · 랭킹 · 태그
- 목록 정렬 · 카테고리 필터
- 서브탑 타이틀 · 서브탭 · 페이지 타이틀
- kjbridge.net 적용
고치고, 릴리스하고,
사이트에서 버튼 하나.
개발 → 패치 서버 → 각 사이트. 사이트는 서버 파일을 직접 만지지 않고 버전만 올립니다.
릴리스 만들기
make-release.php 가 코어를 core-2.0.x.tar.gz 로 묶고 sha256 과 함께 releases.json 에 등록합니다. publish.sh 한 줄로 패치 서버까지 올라갑니다.
패치 서버
update.xpage.kr 이 버전 목록과 파일을 내려줍니다. 각 사이트는 site/.env 의 UPDATE_SERVER 만 바라보고, 자기 버전보다 새 릴리스가 있으면 관리자 화면에 알립니다.
사이트에서 적용
점검 모드 → 다운로드 · 검증 → releases/vX 해제 → DB 백업 → current 교체 → 마이그레이션 → 헬스체크. 실패하면 이전 버전으로 자동 롤백, 언제든 수동 롤백도 됩니다.
관리자 화면과 같은 일을 셸에서도.
doctor.php 로 PHP 확장 · DB · 권한 · 심링크 점검, new-site.php 로 새 도메인 패키지 생성.교체 직전 mysqldump, 최근 사용 버전은 정리 대상에서 보호, 헬스체크는 재시도 후 판단. 웹 계정이 루트에 쓸 수 없는 호스팅도 간접 current 로 지원.
무엇이 바뀌었는지
한 표로.
| 항목 | Ver.1 (xzine 멀티테넌트) | Ver.2 (xPage 패키지) |
|---|---|---|
| 구조 | 한 코드 · 한 DB에 여러 사이트(tenant) | 도메인마다 독립 패키지 · DB · 업로드 |
| 업데이트 | 서버 파일 직접 수정 | 패치 서버에서 버전 단위로 적용, 자동 롤백 |
| 백업 | 수동 | 패치 때마다 DB 백업, 이전 릴리스 보존 |
| 템플릿 | dark_blue 1종 | dark_blue_basic · bridge_style · blog_premium |
| 메인 구성 | 고정 레이아웃 | 9종 블록 조립(히어로 · 메인노출 · 강조형 · 웹진형 · 랭킹 · 태그 …) |
| 서브메뉴 | 탭 고정 | 서브탭 · 좌측 · 우측 3형식, 2차 유무에 따라 자동 |
| 글쓰기 | 관리자 화면에서만 | 게시판 자체 폼(썸네일 · 첨부 무제한 · 노출 옵션) |
| 이관 | — | migrate-legacy.php (게시판 · 메뉴 · 글 · 첨부 · 설정) |
다음 사이트는
패키지 하나로 시작하세요.
도메인 하나, 패키지 하나, 패치 서버 하나. 새 사이트는 new-site.php 로 만들고 기존 사이트는 migrate-legacy.php 로 옮깁니다.
댓글 0