# Wagtail의 Zen Wagtail은 다년간의 웹사이트 구축 경험을 바탕으로, 효과적인 접근 방식과 그렇지 않은 접근 방식을 학습하고, 강력함과 단순함, 구조와 유연성 사이의 균형을 맞추어 탄생했습니다. Wagtail이 이러한 적절한 지점에 있기를 바랍니다. 그러나 소프트웨어로서 Wagtail은 그 임무를 완수하는 데 한계가 있습니다. 아름답고 즐겁게 작업할 수 있는 사이트를 만드는 것은 여러분에게 달려 있습니다. 따라서 서둘러 구축을 시작하고 싶은 유혹이 들겠지만, Wagtail이 구축된 설계 원칙을 이해하는 데 잠시 시간을 할애하는 것이 좋습니다. "[Python의 Zen](https://www.python.org/dev/peps/pep-0020/)"의 정신에 따라 Wagtail의 Zen은 Wagtail로 웹사이트를 구축하는 것과 Wagtail 자체의 지속적인 개발을 위한 일련의 지침 원칙입니다. ## Wagtail은 상자 안의 즉석 웹사이트가 아닙니다. 기성 모듈을 연결하여 아름다운 웹사이트를 만들 수는 없습니다. 코드를 작성해야 합니다. ## 항상 올바른 모자를 착용하십시오. Wagtail을 효과적으로 사용하는 핵심은 웹사이트를 만드는 데 관련된 여러 역할을 인식하는 것입니다: 콘텐츠 작성자, 사이트 관리자, 개발자 및 디자이너. 이들은 서로 다른 사람일 수도 있지만, 그럴 필요는 없습니다. Wagtail을 사용하여 개인 블로그를 구축하는 경우, 이러한 여러 역할을 번갈아 가며 수행하게 될 것입니다. 어느 쪽이든, 현재 어떤 모자를 착용하고 있는지 인식하고 해당 작업에 적합한 도구를 사용하는 것이 중요합니다. 콘텐츠 작성자 또는 사이트 관리자는 Wagtail [관리 인터페이스](https://guide.wagtail.org/en-latest/concepts/wagtail-interfaces/#admin-interface)를 통해 대부분의 작업을 수행합니다. 개발자 또는 디자이너는 대부분의 시간을 Python, HTML 또는 CSS 코드를 작성하는 데 보냅니다. 이것은 좋은 일입니다. Wagtail은 프로그래밍 작업을 대체하도록 설계되지 않았습니다. 언젠가 누군가가 코드를 작성하는 것만큼 강력한 웹사이트 구축을 위한 드래그 앤 드롭 UI를 개발할 수도 있지만, Wagtail은 그러한 도구가 아니며 그러려고 노력하지도 않습니다. 흔한 실수는 콘텐츠 작성자와 사이트 관리자에게 너무 많은 권한과 책임을 부여하는 것입니다. 실제로, 그들이 고객이라면 아마도 그것을 강력히 요구할 것입니다. 그러나 사이트의 성공은 거절할 수 있는 능력에 달려 있습니다. 콘텐츠 관리의 진정한 힘은 CMS 사용자에게 통제권을 넘겨주는 것이 아니라, 다른 역할 간에 명확한 경계를 설정하는 데서 비롯됩니다. 무엇보다도 이는 편집자가 콘텐츠 편집 인터페이스 내에서 디자인 및 레이아웃을 수행하지 않도록 하고, 사이트 관리자가 코드에서 더 잘 달성할 수 있는 복잡한 상호 작용 워크플로를 구축하지 않도록 하는 것을 의미합니다. ## CMS는 편집자의 머리에서 데이터베이스로 정보를 가능한 한 효율적이고 직접적으로 가져와야 합니다. 사이트가 자동차, 고양이, 케이크 또는 양도에 관한 것이든, 콘텐츠 작성자는 웹사이트에 올리고 싶은 특정 도메인 관련 정보를 가지고 Wagtail [관리 인터페이스](https://guide.wagtail.org/en-latest/concepts/wagtail-interfaces/#admin-interface)에 도착할 것입니다. 사이트 빌더로서 여러분의 목표는 이 정보를 원시 형태로 추출하고 저장하는 것이며, 특정 작성자가 정보가 어떻게 보여야 한다고 생각하는 방식이 아닙니다. 디자인 문제를 페이지 콘텐츠에서 분리하는 것은 수많은 장점이 있습니다. 이는 디자인이 사이트 전체에서 일관되게 유지되도록 보장하며, 편집자의 변덕에 따라 수시로 바뀌지 않습니다. 또한 페이지의 정보 콘텐츠를 최대한 활용할 수 있도록 합니다. 예를 들어, 페이지가 이벤트에 관한 것이라면 이벤트 날짜와 위치에 대한 데이터 필드를 가진 전용 "이벤트" 페이지 유형을 사용하면 이벤트가 일반 페이지의 다른 스타일의 헤딩으로만 구현되었다면 불가능했을 캘린더 보기 또는 필터링된 목록으로 이벤트를 표시할 수 있습니다. 마지막으로, 나중에 사이트를 재설계하거나 완전히 다른 플랫폼으로 이동하더라도 사이트 콘텐츠가 새로운 설정에서 작동할 것이며 특정 방식으로 서식 지정에 의존하지 않을 것이라고 확신할 수 있습니다. 콘텐츠 작성자가 다음과 같은 요청을 한다고 가정해 봅시다: "이 텍스트를 밝은 분홍색 Comic Sans로 만들어야 합니다." 여러분의 질문은 "왜요? 이 특정 텍스트에 특별한 점이 무엇인가요?"여야 합니다. 답이 "그냥 보기에 좋아서요"라면, 디자인 선택을 하는 것은 그들의 몫이 아니라는 것을 부드럽게 설득해야 할 것입니다. 그러나 답이 "어린이 섹션용입니다"라면, 편집과 디자인 문제를 분리할 수 있는 방법을 제공합니다. 그러면 편집자에게 태그 지정, 다른 페이지 모델 또는 사이트 계층 구조를 통해 특정 페이지를 "어린이 섹션"으로 지정할 수 있는 기능을 제공하고, 디자이너가 이를 기반으로 스타일을 적용하는 방법을 결정하도록 할 수 있습니다. ## 프로그래머를 위한 최고의 사용자 인터페이스는 일반적으로 프로그래밍 언어입니다. 콘텐츠 관리 시스템에서 흔히 볼 수 있는 것은 페이지를 구성하는 데이터 모델을 정의하기 위한 포인트 앤 클릭 인터페이스입니다: ![CMS 인터페이스 이미지](../_static/images/drupal_content_type.png) 판매 홍보에서는 매력적으로 보일 수 있지만, 사실상 콘텐츠 관리 시스템(CMS)의 일반 사용자가 그러한 근본적인 변경을 하는 것은 거의 불가능합니다. 이는 특히 라이브 웹사이트의 경우 프로그래밍에 대한 깊은 이해와 변경의 잠재적 결과에 대한 인식이 필요하기 때문에 더욱 그렇습니다. 따라서 그러한 포인트 앤 클릭 인터페이스를 협상하는 것은 항상 프로그래머의 몫이 될 것입니다. 여러분이 한 일은 그들을 텍스트 편집기부터 버전 제어 시스템에 이르기까지 코드 변경을 개발, 테스트 및 배포하는 데 도움이 되는 전체 도구 생태계를 가진 편안한 코드 작성의 세계에서 벗어나게 한 것뿐입니다. Wagtail은 대부분의 프로그래밍 작업이 코드를 작성하는 것으로 가장 잘 수행된다는 것을 인식하고 있으며, 타당한 이유 없이 이를 상자 채우기 연습으로 바꾸려 하지 않습니다. 마찬가지로, 사이트 기능을 구축할 때 일부 기능은 콘텐츠 편집자가 아닌 프로그래머가 유지 관리해야 한다는 점을 염두에 두고, Wagtail [관리 인터페이스](https://guide.wagtail.org/en-latest/concepts/wagtail-interfaces/#admin-interface)를 통해 구성할 수 있도록 하는 것이 편리함보다는 방해가 될지 고려해야 합니다. 예를 들어, Wagtail은 콘텐츠 작성자가 일반적인 데이터 수집 양식을 만들 수 있도록 양식 빌더를 제공합니다. CRM 시스템 또는 결제 프로세서와 통합되는 더 복잡한 양식의 기반으로 이를 사용하고 싶은 유혹이 들 수 있습니다. 그러나 이 경우 백엔드 로직을 다시 작성하지 않고는 양식 필드를 편집할 방법이 없습니다. 따라서 Wagtail을 통해 편집 가능하게 만드는 것은 제한적인 가치를 가집니다. 오히려 양식 필드가 코드에서 완전히 정의되는 Django의 양식 프레임워크를 사용하여 이러한 기능을 구축하는 것이 더 나을 것입니다.