드루팔이란 웹 오픈소스 프레임워크로 CMS(Contents Management System)으로도 불린다. 이 사이트도 드루팔로 만든 사이트이다. CMS 프레임워크로는 WordPress, Joomla등이 있다. 처음에는 워드프레스 프레임워크로 도입하려 했으나 좀더 커스터마이징이 가능하고 세밀하게 조정할 수 있는 프레임워크를 찾다가 도입 하게 되었다. 오바마 시절 백악관과 많은 기업들이 도입하여 사용하고 있다. 다만, 드루팔의 제작자가 'CMS계의 리눅스'라고 말한 것처럼 이 프레임워크를 이용하려면 상당히 많은 개념과 어마어마한 모듈의 종류에 대해 파악 하여야만 한다. 현재는 Drupal 8이 개발되어 있으나 내가 사용하고자 하는 모듈이 대부분 Drupal 7에서 가용하므로 Drupal 7에 대한 포스팅을 하고자 한다.
도입하기 전 각 프레임워크의 비교에서 발견한 그림인데 얼마나 어려우면 곡선을 이렇게 그려놨나 하고 Drupal을 도입하는 것에 대해 잠깐 생각했으나 CMS계의 리눅스라는 말이 왠지 도전의식을 자극해 시작하게 되었다. 왠지 이 프레임워크에 대한 자료나 사이트가 한국에는 거의 없다시피 하고 주로 외국에 많다는 것도 알게 되었다. 물론 지금 생각해 보면 꽤 어렵긴 했다. 따라서 좀 정리해 보도록 한다.
이 사이트는 사실 몇 년 전에 만들어지게 되었는데 향후 HTML5와 반응형프레임워크가 대세로 갈 것을 예상하고 당시 가장 최신 기법만 적용해 만들게 되었다. 오래된 IE에서는 제대로 작동되지 않았지만 낮은 버전의 IE 호환성 유지를 포기하고 HTML5표준과 최근 호환되는 JavaScript에 맞는 기술들만 도입하게 되었다. 몇 년이 흐른 지금에서야 각종 브라우저에서 잘 작동하고 있음을 발견했고 아이폰 브라우저의 몇가지 오작동 빼고 만족하고 있다. (안드폰만 4대 있는데도 불구하고 이런 에러 때문에 아이폰 사야겠다.) 다만, 컨텐츠를 만드는 것 - 글을 쓰고, 사진을 찍고, 동영상을 녹화하고, 글을 다듬고, 효과 주고, 시나리오작성하고... - 이런 것이 최신 웹 기술의 사이트를 만드는 것보다 중요하고 어렵다는 사실을 알고 있었다. 컨텐츠 크리에이터나 강사, 혹은 무료로 지원해 줄 사람은 거의 없었다. 본인 역시 일이 바빠 거의 작성하지 못했다. (역시 초기 자본 혹은 투자자 유치가 필요하다!) 이 모든 것을 내가 하려니 꽤나 지지 부진 하게 무료 컨텐츠 몇 개 올리는데 그치곤 했다. 다행히 호주에 어느정도 정착했고 그동안 이룩(?) 해 놓은 많은 자료가 컴퓨터에 쌓여 있으므로 차근차근 정리해 사이트를 채워 나가려고 한다.
드루팔은 여러 개의 계층으로 이루어져 구조화 되어 있다. 제일 아래에는 데이터가 존재하는데 데이터는 노드를 통해서 표현될 수 있다. 이 노드들은 모듈을 통해 가공 되며 특히 View모듈은 데이터를 어떤 방식으로 얻어올 것인가에 대한 질의 모듈로 화면에 어떤 것을 뿌릴 지를 결정할 수 있다. 일종의 SQL 질의와 같다. 이외에도 엄청나게 많은 모듈들이 존재하며 코어와 외부 제공자에 의한 모듈들이 있다.
블록은 가공된 데이터를 보여주는 작은 단위이며 화면에 여러 개가 배치될 수 있다. 이것은 메뉴를 통해 선택되고 사용자는 권한을 가지고 접근방법을 달리 할 수 있다. 가장 상위에는 하위의 이 모든 것을 오버라이딩 하며 화면의 모양새를 나타낼 수 있는 템플릿 개념이 있다.
노드는 Content Type을 통해 어떤 종류의 컨텐츠가 필요한지에 따라 데이터를 작성하게 되는데 예를 들어 노드는 글쓴이, 생성날짜, 제목, 본문 내용 같은 필드들을 가지게 되는 것이다. 만일 특정한 페이지가 필요하면 필요한 만큼 필드를 구성해 데이터를 정의할 수 있다. 드루팔은 기본적으로 데이터가 있어야만 무언가를 꾸미거나 해볼 수 있다. 따라서 초기 제작시에 더미 노드들을 많이 만들어 두는게 좋다.
그림과 같이 컨텐츠는 새로운 컨텐츠 타입을 자유로이 만들 수 있으며 컨텐츠 노드는 필드를 가지게 된다.
Core 모듈은 기본 프레임워크에 포함되어 있으며 대부분 필수적으로 사용되는 모듈이며 기여(Contributed)모듈은 커뮤니티등을 통해 개발되는 모듈들이다. 투표, 연락처, 사용자, 필드, 미디어등 상당한 수의 모듈이 있다. 드루팔을 어렵게 만드는 요인 중 하나가 이러한 모듈들을 이해하는 것이다.
엔티티는 추상적인 개념인데 댓글, 사용자, 파일과 같은 다수의 시스템 컴포넌트에 걸쳐 있고 기능 재사용성을 제공하는 개념이다. 예를 들어 댓글은 각 타입 여기저기에서 사용될 수 있다.
Taxonomy는 컨텐츠를 분류하기 위한 것이고 이것에 따라 Region과 Tags를 생성하여 관리 할 수 있다. 카테고리(Categories)라고도 할 수 있고 용어(Terms)로 분류할 수 있어 메뉴를 생성하는데도 쓰인다. 이것은 직접 용어들을 정의하여 하나의 그룹으로 만들어 활용하게 된다. Taxonomy module에 의해 관리된다.
데이터에서 원하는 사용자가 원하는 방식으로 뽑아내는 모듈이고 없어서는 안될 모듈이 되겠다. 이것으로 기본적인 데이터를 뽑아내는 것 뿐만 아니라 연관관계를 주어 필요한 데이터는 뭐든 골라낼 수 있다. 일종의 SQL 질의를 해주는 모듈인 셈이다.
페이지에 표시할 수 있는 콘텐츠의 작은 덩어리이다. 블록 구역(Region)을 보려면 다음에서 살펴볼 수 있다.
admin/structure/block à Demonstrate block regions
앞서 설명한 것처럼 뷰는 아주 중요한 모듈이고 반드시 개념을 잘 파악해야 한다. 뷰를 통해서 Page 혹은 Block 형태로 만들 수 있다.
그림에서 보는 것처럼 Show에서는 Content뿐만 아니라 Taxonomy, User등을 선택할 수 있으며 Type에서는 선택된 컨텐츠의 타입을 지정할 수 있다. 갤러리에서 이미지를 그리드 형태로 표시하는 뷰 예제를 살펴보자.
기본적인 생성 셋팅 후에도 언제든지 뷰의 정의를 바꿀 수 있다. 생성된 오른쪽 상단에는 기어표시가 나타나며 Views를 선택해 좀 더 상세한 설정이 가능하다.
이것으로 기본적인 Drupal의 소개를 마치고 본격적인 여러가지 팁을 포스팅 하도록 하겠다.
"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -