React로 만드는 차세대 XE 게시판
들어가며: 왜 XE에 React를 도입했는가
XE/Rhymix와 함께한 지 15년이 넘었습니다. 수많은 프로젝트를 진행하며 느낀 것은, XE의 안정성과 한국형 CMS로서의 강점은 여전히 유효하지만, 프론트엔드 경험에서는 현대적인 웹 애플리케이션에 비해 아쉬움이 있다는 점이었습니다.
특히 게시판은 XE의 핵심 모듈이지만:
- 매 페이지마다 전체 새로고침이 발생
- 모바일에서 앱 같은 부드러운 전환 경험 부재
- 대용량 게시물이 많을 경우 체감 속도 저하
이런 문제들을 해결하면서도 XE의 강점은 유지할 수 없을까? 그 고민의 결과가 바로 React SPA 게시판입니다.
기술 스택 선정
Backend: XE/Rhymix API Layer
```
// XE의 기존 구조를 활용한 RESTful API
class BoardAPIController extends Controller {
public function getDocumentList() {
$output = executeQueryArray('board.getDocumentList', $args);
return new JSONResponse([
'success' => true,
'data' => $output->data,
'pagination' => [
'total' => $output->total_count,
'page' => $args->page
]
]);
}
}
```
선택 이유:
- XE의 강력한 권한 시스템 그대로 활용
- 기존 모듈/애드온과 호환성 유지
- 검증된 데이터베이스 쿼리 재사용
```
// 가상돔 기반 초고속 렌더링
import { useState, useEffect } from 'react';
function BoardList({ moduleId }) {
const [documents, setDocuments] = useState([]);
const [loading, setLoading] = useState(false);
const fetchDocuments = async (page = 1) => {
setLoading(true);
const response = await fetch(
`/api/board/${moduleId}/documents?page=${page}`
);
const data = await response.json();
setDocuments(data.data);
setLoading(false);
};
useEffect(() => {
fetchDocuments();
}, []);
return (
<div className="board-list">
{loading ? (
<Skeleton count={10} />
) : (
documents.map(doc => (
<DocumentRow key={doc.document_srl} data={doc} />
))
)}
</div>
);
}
```
선택 이유:
- Virtual DOM으로 불필요한 DOM 조작 최소화
- Vite의 초고속 빌드 시스템
- 풍부한 생태계와 라이브러리
핵심 구현 전략
1. 점진적 마이그레이션 (Progressive Enhancement)
기존 XE 사이트를 한 번에 바꾸는 것이 아니라, 게시판만 React로 교체하는 방식입니다.
장점:
- 기존 스킨, 위젯, 레이아웃 그대로 사용
- 단계적 적용으로 리스크 최소화
- SEO를 위한 SSR은 선택적 적용
2. 상태 관리: React Query 활용
효과:
- 자동 캐싱으로 네트워크 요청 최소화
- 낙관적 업데이트로 즉각적인 UX
- 백그라운드 자동 동기화
3. 라우팅: 페이지 전환 없는 네비게이션
체감 효과:
- 클릭 즉시 화면 전환 (새로고침 없음)
- 뒤로가기/앞으로가기 자연스럽게 동작
- 모바일 앱과 동일한 경험
4. 성능 최적화
성능 비교: 실측 데이터
| 항목 | 기존 XE 게시판 | React SPA 게시판 |
|---|---|---|
| 초기 로딩 | 1.2초 | 0.8초 |
| 페이지 전환 | 0.9초 (전체 새로고침) | 0.1초 (부분 렌더링) |
| 1000개 게시물 렌더링 | 3.5초 | 0.3초 (가상 스크롤) |
| 모바일 체감 속도 | ★★★☆☆ | ★★★★★ |
측정 환경: Chrome DevTools, Regular 3G throttling
XE 권한 시스템 통합
XE의 강력한 권한 관리를 그대로 활용합니다.
실제 프로젝트 적용 사례
사례 1: 대형 커뮤니티 (회원 10만+, 게시물 50만+)
도입 전 문제점:
- 게시판 목록 로딩에 2-3초 소요
- 모바일 이탈률 45%
- 서버 부하로 인한 간헐적 다운
도입 후 개선:
- 목록 로딩 0.5초로 단축
- 모바일 이탈률 28%로 감소
- API 캐싱으로 서버 부하 40% 감소
사례 2: 기업 인트라넷
요구사항:
- 엑셀 같은 빠른 데이터 입력
- 실시간 협업 기능
- 기존 ERP 시스템과 연동
React SPA의 이점:
- 인라인 편집으로 즉각 반응
- WebSocket 통합으로 실시간 동기화
- API 기반이라 외부 시스템 연동 용이
개발 과정의 도전과 해결
도전 1: SEO 문제
문제: SPA는 검색엔진 크롤링이 어려움
해결:
- 게시물 상세 페이지는 서버 사이드 렌더링 옵션 제공
- 메타 태그 동적 생성
- Sitemap 자동 생성 API
도전 2: 기존 애드온 호환성
문제: XE 애드온이 DOM 직접 조작
해결:
- 애드온 실행 시점을 React 라이프사이클에 통합
useEffect에서 애드온 초기화- 필요시 애드온을 React 컴포넌트로 재작성
도전 3: 에디터 통합
문제: XE Editor 모듈과의 통합
해결:- Editor를 React 컴포넌트로 래핑
- 파일 업로드 API 별도 구현
- 이미지 드래그앤드롭 지원
배포 전략
빌드 프로세스
- [준비중]
버전관리
- [준비중]
향후 로드맵
Phase 1 (완료)
- ✅ 기본 CRUD 기능
- ✅ 댓글 시스템
- ✅ 파일 첨부
- ✅ 권한 관리
Phase 2 (진행중)
- 🚧 실시간 알림 (WebSocket)
- 🚧 마크다운 에디터 옵션
- 🚧 다크모드 지원
Phase 3 (계획)
- 📋 모바일 앱 (React Native)
- 📋 오프라인 모드 (PWA)
- 📋 AI 기반 내용 추천
마치며
"레거시를 버리지 않고 현대화한다"는 철학으로 시작한 이 프로젝트는, XE/Rhymix의 강력한 기반 위에 현대적인 사용자 경험을 더하는 것이 가능함을 증명했습니다.
핵심 가치:
- 완전한 재작성보다 점진적 개선이 현실적
- API 레이어 분리로 프론트/백엔드 독립성 확보
- 사용자 경험 개선이 곧 비즈니스 가치
25년간 쌓아온 XE 경험과 최신 React 기술의 만남. 이것이 제가 만든 "현존하는 가장 빠른 XE"의 비밀입니다.