Zend Framework는 Convention over Configuration 방식을 여러 부분에서 채용하고 있지만, 프로젝트의 디렉터리 구조에서는 그렇지 않다.
최근에 유행하는 Rails나 Django와 같이, 프로젝트를 생성하는 도구를 제공하지 않는다는 사실이나, 디렉터리 구조의 Convention이 존재하지 않고, 여러 안들을 제안한다는 사실로부터 이를 알 수 있다. 게다가, Zend에서도 기본적으로 디렉토리 구조는 사용자의 요구에 따라 유연하게 할 수 있는 것을 중요하게 생각하는 듯하다.
이러한 상황 하에서, 공식적으로 Zend가 제안하는 디렉토리 구조는 크게 두 가지라고 생각된다. 튜토리얼에 해당하는 Quick Start 문서에서 제안하는 디렉토리 구조와, Zend_Controller 레퍼런스 문서에서 제안하는 Moduler 디렉토리 구조가 그것이다. 소규모 프로젝트에서는 Quick Start 문서의 것을 채택하는 것이 좋다고 생각한다.
한편, Zend Framework를 처음으로 사용해 본 것은 작년 이 맘 때였는데, 현재 Zend Framework 안정 릴리즈의 버전이 1.6.2인데, 당시의 버전이 1.0.2 였다. 그 동안 많은 변화가 있었겠지만, 라이브러리만 업그레이드해도 당시에 개발한 내용이 아직 동작한다는 것이 신기할 정도.
QuickStart 문서의 내용도 당시와는 많이 달라졌는데, 부트스트랩 방식이나 디렉토리 구조 등이 많이 달라졌다. 기능도 추가할 겸 둘러보다가 디렉토리 구조를 현재의 방식에 맞게 다듬게 되었다.
부트스트랩 방식과 디렉토리 구조에서 크게 달라진 점을 정리해 보면 다음과 같다.
- controllers, models, views 디렉토리가 application 디렉토리 밑으로 들어갔다. 이를 통해 Moduler 디렉토리 구조와 호환되고 필요할 때 전환도 쉬워 진 것 같다.
- library 디렉토리에 Zend Framework 라이브러리를 포함하도록 한다. 프로젝트가 좀 더 독립적으로 배포될 수 있다. 또한, 외부의 Zend Framework 라이브러리를 참조하기 위해서 PHP include path가 수정되어야 하고, 결과적으로 부트스트랩에 영향을 미치는데, 이를 통해 부트스트랩을 수정해야 하는 일이 줄어들어, 설정이 단순화되었다.
- html 디렉토리가 public 디렉토리로 변경되었다. 단순히 이름의 변경이지만, 좀 더 성숙되어 가는 느낌이랄까.
결과적으로는 다음과 같은 디렉토리 구조가 된다.
QuickStart 문서의 디렉토리 구조를 기본으로 하는 프로젝트 생성 도구를 예전에 만들었었는데, 새로운 디렉토리 구조에 따라서 다시 만들어 봐야 할 것 같다. 예전보다는 많이 깔끔해 져서, 사실 Quick Start 문서에서 제공되는 프로젝트를 그대로 풀어서 해도 상관은 없지만 말이다.