댓글 6
-
이
이온디 2025.12.06 01:04
문제의 핵심 Rhymix 라우팅 (서버) React 라우팅 (클라이언트) ───────────────────── ────────────────────────── ?act=dispBoardWrite /write ?act=dispBoardView /view/:id ?act=dispMemberInfo /mypage ?mid=free&document_srl=123 /boards/free/123 서로 다른 두 세계를 하나로 합쳐야 하는 상황이죠. 처음 시도했던 방식 (멀티 마운트) @if($act == 'dispBoardWrite') @elseif($act == 'dispBoardView') @else @endif 이 방식은 React의 장점(상태 유지, SPA 경험)을 포기하는 거라 비효율적이에요. 더 나은 방식 (단일 앱 + React Router) 맞아요, React Router를 쓰면 하나의 React 앱에서 URL에 따라 다른 컴포넌트를 보여줄 수 있어요: // App.jsx } /> } /> } /> } /> 하지만 문제는... Rhymix는 ?act=dispBoardWrite&mid=free 형태의 쿼리스트링 URL을 쓰고, React Router는 /board/free/write 같은 경로 기반 URL을 선호하거든요.
-
이
이온디 2025.12.06 01:05
라이믹스도 free/write 구조로 지원해.. 그걸 php에서 인식해서 리액트 라우터로 딱 원하는 화면ㅇ르 보여주는게 문제였지.
-
이
이온디 2025.12.06 01:08
현재 구현된 라우팅 구조 1단계: PHP (layout.html)가 URL 분석 $current_mid = 'guide'; $current_act = 'dispBoardWrite'; // 또는 dispBoardList $document_srl = 12345; // 상세/수정 시 $is_write = true; // /write 경로 2단계: 조건부 마운트 포인트 생성 @if($current_mid === 'guide') @if($is_write || $is_edit) @elseif($document_srl) @else @endif @endif 3단계: React가 마운트 포인트 감지 // main.tsx if (document.getElementById('app-guide-list')) { createRoot(el).render(); } if (document.getElementById('app-guide-write')) { createRoot(el).render(); } if (document.getElementById('app-guide-view')) { createRoot(el).render(); } --- 두 가지 접근법 비교 | | 멀티 마운트 (현재) | SPA + React Router | |--------|-------------------|--------------------| | 라우팅 주체 | PHP (Rhymix) | React Router | | 페이지 전환 | 새로고침 (서버 렌더링) | 클라이언트 전환 | | SEO | 좋음 (PHP가 HTML 생성) | 추가 작업 필요 | | 복잡도 | 낮음 | 높음 (라우터 설정) | | 상태 유지 | 페이지간 초기화 | 유지 가능 | 현재 방식이 Rhymix와 가장 자연스럽게 통합되는 방식이에요. React Router로 전환하면 /guide/write ↔ /guide 이동 시 새로고침 없이 부드럽지만, Rhymix 권한 체크나 URL 구조와 싱크 맞추기가 까다로워지거든요. 지금 구조에서 잘 안 됐던 부분이 구체적으로 뭐였어요? main.tsx에서 마운트 로직을 확인해볼까요?
-
이
이온디 2025.12.06 01:11
즉, Rhymix는 /guide/write URL을 인식하고 있어요. 권한이 없어서 403이 뜬 거지, URL 라우팅 자체는 동작함. 현재 layout.html의 문제점 // 현재 방식 - act 파라미터에 의존 $is_write = ($current_act === 'dispBoardWrite'); // /edit은 URL path로 직접 체크 $is_edit = (strpos($request_uri, '/edit') !== false && $document_srl); /guide/write로 접근할 때 Rhymix가 act=dispBoardWrite로 변환해주면 동작하지만, URL path 직접 체크가 더 확실해요: // 개선된 방식 - URL path도 함께 체크 $is_write = ($current_act === 'dispBoardWrite') || (strpos($request_uri, '/write') !== false); 흐름 확인 사용자: /guide/write 접속 ↓ Rhymix: mid=guide, act=dispBoardWrite 변환 ↓ layout.html: $is_write = true ↓ 출력: ↓ main.tsx: GuideWritePage 마운트
-
이
이온디 2025.12.06 01:11
내가 잘하고 있는거 맞아? ⏺ 솔직하게 말하면, 네, 꽤 잘하고 있어요. 현재 접근 방식의 장점 | 항목 | 평가 | |-----------|----------------------------| | Rhymix 통합 | PHP가 라우팅/권한 담당 → 기존 시스템 활용 | | SEO | 서버에서 마운트 포인트 생성 → 검색엔진 친화적 | | 점진적 전환 | 한 번에 다 바꿀 필요 없이 페이지별 전환 가능 | | 복잡도 관리 | React Router 설정 없이 단순한 구조 | 이 방식이 적합한 이유 완전 SPA (React Router) ├── /guide → React가 라우팅 ├── /guide/write → React가 라우팅 ├── /guide/123 → React가 라우팅 └── 문제: Rhymix 권한, 세션, mid 개념과 충돌 현재 방식 (PHP + React 멀티마운트) ├── /guide → Rhymix가 라우팅 → ├── /guide/write → Rhymix가 라우팅 → ├── /guide/123 → Rhymix가 라우팅 → └── 장점: Rhymix의 권한/라우팅 그대로 활용 솔직한 단점 - 페이지 전환 시 새로고침 (SPA 느낌 아님) - 번들 크기 관리 필요 (code splitting은 잘 해둠) 결론 Rhymix 같은 기존 PHP 시스템에 React를 얹는 현실적인 방법이에요. 무리하게 완전 SPA로 가려다가 오히려 더 복잡해지는 경우가 많거든요. 다만, 지금 막혀있거나 고민되는 구체적인 부분이 있어요?
-
이
이온디 2025.12.06 01:12
고마워, 내가 좀 시간이 없고 체력이 방전되서 예민했나봐.