벌써 1년이 ... cms 개발 재개.
지난 회고록.
xpressengine이나 그누보드, 워드프래스 같은 유명한 것들이 있지만 php언어로 구동 된다는 점이 제약이 있습니다.
php의 싱글 쓰레드 구조나 fpm 혹은 mpm 구조나 언어 근본 문제도 적지 않아서 php cms개발이 쉽지 않았습니다.
스크립트 작동 구조상 디자인 패턴을 녹여내기가 쉽지가 않았고 다른 오픈 소스 cms에서도 디렉토리 구조도 적지 않게 복잡합니다.
각각에 나눠진 모듈로 작업 했지만 너무 심하게 구조를 나누는 것도 관리하기 벅차지는 부분이 있었어요.
GAME OVER 근접.
가득 이나 개발 하기 싫은데 작업 하기 싫은 느낌을 받는 것 만으로 거의 안 되는 것 확정입니다.
개발을 잠깐 중단 하려고 했지만.
중간에 프로젝트 협업 지원으로 개발을 중단한 상태로 어느덧 1년여 시간이 지나버렸어요.
지원하는 프로젝트에서도 mysql 계열에 데이터베이스를 사용 했는데 작업하면서 기존에 문제점을 개선할 방법을 다양하게 시도 해보았습니다.
기존 서버도 nginx, apache 서버를 사용 했지만 틈틈히 준비하여 현재는 컨테이너 기반에 openlitespeed 서버로 변경 했습니다.
마냥 손 놓았던 것은 아니지만 시간이 많이 지나 잠깐이 아니게 되었어요.
현재는 만들던 cms 소스를 처음부터 새로 만들었습니다.
새 작업에는 이상한 도전 하지 말기.
기존보다 더 냉정하게 프로그램 디자인을 줄였습니다 이건 두 번째 정도로 어려웠어요.
첫 번째로 가장 어려운 부분은 php 언어 자체에 자칫 잘못 하면 오류 난 부분을 못 찾는 경우가 생길 수 있는 점입니다.
php 도 디버깅이 가능 하지만 화면 출력으로 확인하며 개발 하는 것이 보편적 이어서 아직 이렇게 두었어요.
세 번째 어려움은 잘못된 자신감을 가지는 것인 것 같습니다.
프로그램 설계가 너무 복잡하여 못 하겠다는 것을 억지로 한다면 완성 못 해요.
코드 분량도 과감하게 줄일 수 있는 형태로 만들어야 할 필요성을 많이 깨달았습니다.
모듈 안에 소스 파일 마다 코드 줄이 200 이 넘어가면 몬가가 잘못 된 것이어요.
오픈소스 활용하기.
php 에도 모듈 관리 체계로 composer가 있어요.
처음 만들 때도 썼지만 현재는 기본 이름인 vendor 폴더 명 그대로 사용 할 수 있도록 했습니다.
다른 플랫폼에 패키지 관리 프로그램에 의존하며 추가적인 개발이나 관리를 하지 않는 방향을 잡은 것이에요.
아직은 메일 발송을 위한 phpmailer 정도 설치를 해두었습니다.
노드js 활용하기.
php 자체 만으로 웹 소켓이나 롱-풀링 같은 구현처럼 오랫동안 접속을 유지하는데 리소스가 상당하게 들어갑니다.
현재는 프론트 엔드에서 비동기 요청시에 스트리밍 리더를 통한 http-chunk 데이터를 실시간으로 받아오도록 할 수가 있습니다.
입력을 php로 받으면 예약 작업을 등록 한 뒤에 처리를 끝낸 뒤에 노드js가 출력을 처리 해주면 php에 사용하는 리소스가 줄어요.
이 기능은 실시간 처리 기능을 염두 하는 것이어서 노드js는 굳이 없더라도 큰 관련은 없는 것이어요.
여기까지 백엔드 부분.
프론트 엔드는 갈 길이 많이 먼 것 같아요.
프론트 엔드는 아직 구현이 되어 있지 않고 뷰 영역에 샘플 정도만 넣어 두었습니다.
웹 사이트 레이아웃과 페이지 영역에 라우팅으로 홈 페이지나 로그인 화면 같은 원하는 페이지 출력은 되어야 보면서 작업을 해요.
처음 만들던 방식과 비슷한데 빼버릴 부분을 모두 제외하여 작업은 획기적으로 원활해 졌어요.
그리고 요즘은 서버에서 변경된 값이 있으면 실시간으로 화면에 바로 바뀌어요!
실시간 동기화를 구현 하는 데에는 기존에 요청 방식에 처리 구조 대신 rpc 계열 통신을 구축 해야 해요.
실시간 동기화는 노드js를 같이 연동 하려고 한 가장 큰 원인입니다.
이번에 다시 만드는 것은 정말 마지막이 되었으면 좋겠어요.
