PHP에서 React로, 그다음 Express로. 한 번에 못 바꾸는 현실 속 점진적 전환기 (2탄)
PHP 프로젝트 두 개가 얽혀 있어 한 번에 갈아엎을 수 없었다. iframe으로 React 화면을 먼저 붙이고, PHP를 API 역할로 줄여가며 필요한 것만 Express로 옮긴 점진적 전환 기록이다.
#PHP #React #Express #마이그레이션
지난 글 : https://blog.jaeyonging.com/blog/50 이전 글에서는 PHP + HTML로 만든 프로젝트를 React + Express로 옮기기로 한 이유를 적었다. 결심은 그렇게 했는데, 막상 손을 대보니 현실은 단순하지 않았다. 이번 글은 그걸 어떻게 조금씩 옮겼는지에 대한 기록이다. 프로젝트가 두 개나 얽혀 있었다 내가 맡은 서비스는 PHP 프로젝트가 두 개가 얽혀서 돌아가는 구조 였다. 관리자 페이지, 사용자 페이지, 그리고 그 안에서 서로 include로 주고받는 파일들이 복잡하게 얽혀 있었기 때문에 한 번에 싹 React로 갈아엎는 건 불가능 했다. 코드도 많고 구조도 꼬여 있어서, 잘못 건드리면 어디서 터질지 모르는 상황이었다. 게다가 서비스는 계속 돌아가야 했다. 전환한다고 몇 주씩 멈출 수 있는 게 아니었다. 그래서 iframe부터 썼다 초기에는 게임이나 동영상 콘텐츠, 일부 기능성 페이지들을 먼저 React로 만들고, 그걸 iframe으로 PHP 페이지에 끼워 넣는 방식 으로 붙였다. 빌드한 React 결과물을 정적 파일로 올려두고 PHP 페이지에서 이렇게 불러오는 식이다. iframe src="/static/react-built-game/index.html?id=123" width="100%" height="600px" /iframe 이 방식은 React로 UI를 빠르게 만들 수 있어서 좋았지만, 서버와 상태를 공유하기 어렵고 postMessage 없이는 바깥 페이지와 얘기를 주고받기도 힘들었다. 로그인 정보 하나 넘기는 것도 쿼리스트링이나 postMessage로 따로 처리해야 했다. 결국 이건 임시방편이었고, 전체를 React로 옮겨가는 게 목표였다. iframe과 React 사이에서 메시지를 어떻게 주고받았는지는 따로 글로 정리했다. 완전히 React로 갈아끼우기 시작 iframe으로 붙였던 기능들을 하나씩 React로 옮겨가기 시작했다. 기존 PHP는 이제 화면을 그리는 역할이 아니라, React가 필요한 데이터를 JSON으로 넘겨주는 API 서버처럼 동작 하도록 바꿨다. 화면을 만들던 PHP 파일에서 HTML 부분을 걷어내고 json_encode로 데이터만 돌려주게 고치는 작업이 한동안 이어졌다. 그러다 보니 필요한 API들이 보였다 React로 구조를 옮기다 보니 어떤 API가 필요하고 어떤 데이터가 오가는지가 분명해졌다. PHP로 화면을 그릴 때는 쿼리 결과를 바로 HTML에 찍었으니까 "이 화면에 어떤 데이터가 필요한가"를 따로 정리할 일이 없었는데, React가 데이터를 요청하는 쪽이 되니 그 목록이 저절로 나왔다. 그제야 Express로 바꿔야 할 API들만 추릴 수 있었다. 처음부터 다 바꾸려 하지 않았고, 진짜 필요한 API만 골라서 Express로 옮겼다. 결국 핵심 기능부터 차례로 옮겨가면서도 서비스는 계속 운영 가능한 상태를 유지할 수 있었다. 결과적으로 이렇게 정리됐다 PHP는 점점 데이터 제공자 역할로 줄어들었다 iframe으로 붙였던 React 기능들은 전부 SPA 안으로 합쳤다 Express는 진짜 필요한 부분부터 붙이기 시작했고, 지금은 거의 대부분의 API가 Express + MySQL 구조로 돌아간다 정리하자면 이런 상황이었다면 처음부터 다 뜯어고치는 건 오히려 위험한 선택이었다. 나는 "이건 무조건 React로 가야 해"가 아니라, 단계적으로 전환 가능한 영역부터 React로 옮겨가는 쪽이 더 안정적 이라고 판단했다. 그리고 조금씩 PHP의 역할을 줄이고 Express로 필요한 API만 다시 만드는 식으로 가니까, 서비스를 멈추지 않고도 전환이 가능했다. 비슷한 상황이라면 전부 갈아엎을 날을 기다리기보다 iframe이든 뭐든 지금 옮길 수 있는 것부터 옮겨보길 추천한다. 지금 와서 아쉬운 것 점진 전환 자체는 잘한 선택이었다고 생각한다. 다만 언제 끝낼지를 안 정해둔 것 이 문제였다. "되는 것부터 바꾸자"로 시작하면 안 되는 것은 계속 남는다. 관리자 화면 몇 개는 결국 PHP로 남았고, 지금도 그대로다. 급하지 않으니까 매번 뒤로 밀렸다. 전환을 시작할 때 여기까지는 옮기고 나머지는 안 옮긴다 를 먼저 적어뒀으면 좋았을 것 같다. 그랬으면 남은 게 "못 옮긴 것"이 아니라 "안 옮기기로 한 것"이 됐을 텐데, 지금은 볼 때마다 찜찜하다.