RWS 프레임워크는 Redinfo Web Sever 의 줄임말로 현재 운영되는 사이트를 통합한 프레임워크의 이름이다. 처음 개발을 시작한지 2년이 지난것같다. 최근에 대규모 업데이트를 하면서 어느정도 프레임워크 형태가 갖추어 지고 있긴 하지만 고려하지 못했던 사항들이 발생되어 지속적으로 업데이트 중에있다. 

 

처음 개발을 시작하게된 목적은 사이트를 운영할때 조금더 편리하게 유지보수하기 위한 목적이였는데 최초 만들고 보니 사이트마다 프레임워크가 분리되어있어 사이트가 늘어나면 그만큼 수정을 해줘야하는 불편함이 있었다. 따라서 같은 서버에 있는 사이트들을 굳이 분리해서 만들필요가 있을까하여 최근엔 1개의 index로 통합된 프레임워크를 만들게 되었다. 

 

자체 프레임워크를 만들다보니 노하우까지는 아니여도 지금껏 제작했던 RWS의 구조 및 후기에 대해 간단하게 알아보도록 하자 

 

RWS 프레임워크 구조 

RWS 프레임워크는 기본적으로 아래와 같은 구조로 구성되어있다. 

[파일]
index.php 
.htaccess

[디렉토리]

crontab
data

engine
server
system 

모든 시스템 처리는 index.php 에서 실행하도록 구성되어있고 .htaccess 는 index 죽이기에 대한 지시어로 구성 되어있다. 

 

처음 만들때 고려하지 못하였던게 정적 파일들에 대한 처리였는데 상위에 공통으로 공개 디렉토리를 .htacess에서 설정해볼까 생각해보았지만 사이트별로 다르게 구성하고 싶은 마음에 여러 시도를 해보았다. 결국엔 PHP에서 읽어들이는 방식으로 변경하였고 다행히 작동은 원하는데로 되었다. 

 

RWS 프레임워크의 이점 

RWS 프레임워크의 이점이라하면 모든 사이트들을 한곳에서 사전에 관리가 가능하다는 것이다. 예를 들면 IP 차단을 할 경우 모든 사이트를 작업할 필요없이 index.php 에서 바로 제어가 가능하고, 공통으로 사용되는 클래스등을 한곳에서 라이브러리화 하여 사용이 가능하다. 

 

두번째로는 공통화된 상위 클래스에서 모든걸 제어하기때문에 라이브러리를 별도로 배포할 필요없다는 것이다. 기존에는 라이브러리가 변경되면 모든 곳에 업데이트를 해주어야 했지만 현재는 수정하는 순간 배포가 되기때문에 그만큼 수고가 줄어든다. 

 

세번째는 아파치 설정에 대한 이점이다. 모든 서버가 동일한 디렉토리를 공유하기 때문에 아피치설정시 도메인만 설정하면 되고, 보안서버도 Let's Encrypt을 사용하는데 추가시 같은 서버에서 실행하면 된다는 이점이 있다. 

 

조금더 활용한 부분이 있다면 공통으로 사용되는 PHP 소스뿐만 아니라 스크립트나 CSS등도 공통으로 사용되는 부분들은 CDN 서버로 분리하여 처리를 하였다. 이렇게 하면 캐싱에 대한 이점이 있을 수 있다. 

 

RWS의 단점 

단점이라고 하면 역시나 외부 관리 시스템에는 사용할 수 없다는 것이다. 예를 들면 워드프레스, 그누보드, phpMyAdmin, Roundcube Webmail 와 같은 솔루션에서는 사용이 불가능하다. 물론 시도는 해보았고 작동도 잘되는것을 확인하였지만 정상작동 까지 수 많은 테스트 및 보완작업들이 필요하다. 

 

따라서 가장 큰 단점은 위와 같이 외부 관리 시스템을 이용할 수 없다는 것이고, 두번째로는 서버가 분리될때 문제이다. 공통화된 사이트를 운영하기 위한 목적으로 만들어진 프레임워크다보니 단독으로 분리하여 사용하면 불필요한 디렉토리 구조와 필요없는 소스코드를 수정해줘야 하는 단점이 있다. 

 

하지만 서버 분리의 경우는 모든 프레임워크에서도 동일하기 때문에 배포만 잘된다면 어느정도 해결은 가능하다. 

 

고려했던 사항

처음 프레임워크를 개발 시 API에 대한 헛된 바람이 불어 같은 서버에 있는데도 CURL로 호출하여 처리를 하였다. 예를 들면 회원의 정보를 가져오는데 CURL 을 통해 계정정보를 호출하고 결과를 받아서 처리했는데 이것은 정말 잘못된 방식이란걸 깨달았다. 

 

RWS 프레임워크 목적이 같은 서버에서 실행되는 사이트를 통합한건데 이걸 CURL로 통신해서 불러오는건 멍청한 짓이였다.

 

물론 최초 프레임워크에서는 모델 기능을 사이트별로 만들었기에 회원 모델을 쓸려면 회원 사이트를 통해 가져와야 했다. 처음엔 CURL로 만들었는데 양쪽간 개발이 들어가다보니 복잡하기도하고 개발 속도도 나지 않았다. 그래서 시도했던게 디렉토리에서 회원 모델을 include 하는 방식이였는데 역시나 namespace 문제가 발생되었고 억지로 해결해서 쓰다보니 정말 불편했다.  (모델은 기본 프레임워크 구조중 mvc 패턴의 model이다.)

 

그래서 현재 개발된 프레임워크는 모델도 통합해서 사용하였고 RWS에 있는 모든 사이트들은 공통으로 모델을 사용할 수 있다. 

 

잠깐 언급했지만 CURL로 데이터를 가져오는 restAPI 방식은 다른 다수의 서버간에서 HTTP 통신으로 데이터를 주고받기 위해 주로 사용되기때문에 RWS 프레임워크와 같이 통합된 환경에서는 필요가 없다. 쉽게말해 가족들이 같은 집에 살고 있고 바로 옆에 있는데 무언가 전달 할 때 굳이 전화로 할 필요는 없다는 것이다.

 

어찌보면 RWS 프레임워크의 장점은 내부망 프레임워크를 들 수 있을것같다. 하지만 외부에서도 단독으로도 사용할 수 있기때문에 추후에는 웹 서비스 그룹 서버와 API 그룹 서버를 별도로 분리하여 운영해볼까 고려중이다. 

 

RWS 프레임워크는 외부 배포목적은 아니기에 전체 공개는 하지 않을예정이긴 하나 자신만의 프레임워크를 만드는 개발자들에게 조금이나마 도움이 될만한 부분들을 앞으로도 공유해나갈 생각이다.  

 

이번에는 간단하게나마 RWS 프레임워크의 구조 및  기본적인 부분에 대해 소개하였고 다음편에서는 프론트단에 적용된 기능에 대해 소개할 예정이다.