Skip to main content

2 posts tagged with "wagtail"

View All Tags

Wagtail 사용법

· 6 min read

image

얼마 전 썼던 Wagtail vs Wordpress - 프로젝트에 적합한 CMS를 선택하는 방법에 대해 글을 작성했는데 Wagtail에 대해 직접 써보고 작성해 보고자 글을 적어봤습니다.

Wagtail과 Wordpress는 모두 뛰어난 오픈 소스 콘텐츠 관리 시스템입니다. 프로젝트에 가장 적합한 기술을 결정할 때 고려해야 할 몇 가지 사항은 다음과 같습니다. Overview 오늘날 사용할 수 있는 오

Wagtail에 대해 알게 된 배경은 한번씩 검색해 보는 Trending 에서 Python 언어로 검색했을 때 높은 순위에 있었기 떄문입니다.

image

Wagtail은 위에 설명과 같이 CMS(Content Management System)에 사용할 수 있는 Wordpress 같은 기능을 할 수 있는 오픈소스 솔루션이었습니다. wordpress를 써 본 적은 없지만 php 기반의 wordpress 보다는 python djanog 기반의 wagtail이 더 나을 것이란 생각을 했습니다.(개인적 취향입니다.)

Wordpress는 개발자가 아닌 사람들이 블로그나 간단한 소개 웹 싸이트를 만들기 쉽게 구성되어 있습니다.

하지만 커스터마이징을 위해서는 플러그인을 사용해야 하는데, 문제는 플러그인으로 인해 보안에 문제가 될 수 있다는 겁니다.

하지만 Wagtail은 Django 기반의 솔루션으로서 Wordpress와 같이 페이지를 rich text 로 작성할 수 있으면서도 그 컴포넌트들을 코드 상에 배치하고 Django framework을 이용하듯 사용할 수 있는 장점이 있습니다. 

Wordpress 보다 개발자 친화적이고 구성 방법도 어렵지 않습니다. 심지어 공식 문서도 잘 되어 있으니 한번 읽어 보는 것이 좋습니다. 그리고 NASA에서도 사용한다고 합니다.

Welcome to Wagtail’s documentation — Wagtail Documentation 6.0.2 documentation

시작하는 방법은 간단합니다.

저는 Mac OS 기준으로 작성합니다. Windows OS도 거의 비슷한데 경로 설정이나 약간의 환경적인 부분이 다를 수 있으니 유의하세요.

우선 가상 환경을 생성하고 가상 환경을 활성화 합니다.(프로젝트 별로 환경을 별도로 두는 것이 글로벌 환경에 영향을 덜 주고 깔끔합니다.)

# Create a virtual environment
python -m venv venv
# Activate the virtual environment
source venv/bin/activate

가상 환경이 활성화 되었다면 이제 라이브러리를 설치해 줍니다.

# Upgrade pip
pip install --upgrade pip
# Install Wagtail
pip install wagtail

이제 wagtail 라이브러리를 사용할 수 있습니다.

wagtail을 이용해 프로젝트를 생성해 보세요.

# Create a new project
wagtail start myapp
# Go into the project
cd myapp
# Install requirements
pip install -r requirements.txt

myapp 폴더에 들어가면 아래와 같이 폴더 구조가 보입니다.(db.sqlite3은 다음 단계에서 생성됩니다.)

image

생성된 폴더에서 필요한 라이브러리들도 모두 설치했으니 myapp/myapp/settings/base.py 에 있는 데이터베이스 설정을 원하는대로 변경해 줍니다. (변경을 하지 않아도 default로 있던 sqlite3를 그대로 사용해도 됩니다.)

DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
}
}

이제 기본 wagtail 솔루션 실행을 위한 데이터베이스 마이그레이션 및 서버 실행을 진행합니다.

python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Run server
python manage.py runserver
# Open Website in browser
http://localhost:8000
# Open Admin Website in browser
http://localhost:8000/admin

wagtail 프로젝트를 생성할 때 이미 기본 마이그레이션을 생성해 뒀기 때문에 python manage.py makemigrations를 하지 않고 바로 python manage.py migrate를 진행한 겁니다. 아무튼 이렇게 해서 어드민 계정도 생성했고 서버도 실행하면 8000포트로 솔루션 초기 화면과 관리자 화면을 확인할 수 있습니다.

image

wagtail 본 화면은 React 초기 화면과 같이 아무런 의미가 없습니다. admin으로 들어가서 superuser 생성 때 만든 계정을 적어서 로그인 해줍니다. 어드민에 로그인하고 나면 아래와 같이 pages, images, documents, reports, settings, help 메뉴가 보입니다. (search 는 검색하는 거라서 생략)

image

페이지를 누르면 edit 아이콘이 보인느데 그걸 눌러줍니다.

image

잠시 코드로 돌아와서 myapp/home/model.py 를 아래와 같이 수정합니다.

from django.db import models

from wagtail.models import Page
from wagtail.fields import RichTextField

# import MultiFieldPanel:
from wagtail.admin.panels import FieldPanel, MultiFieldPanel


class HomePage(Page):
# add the Hero section of HomePage:
image = models.ForeignKey(
"wagtailimages.Image",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
help_text="Homepage image",
)
hero_text = models.CharField(
blank=True,
max_length=255, help_text="Write an introduction for the site"
)
hero_cta = models.CharField(
blank=True,
verbose_name="Hero CTA",
max_length=255,
help_text="Text to display on Call to Action",
)
hero_cta_link = models.ForeignKey(
"wagtailcore.Page",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
verbose_name="Hero CTA link",
help_text="Choose a page to link to for the Call to Action",
)

body = RichTextField(blank=True)

# modify your content_panels:
content_panels = Page.content_panels + [
MultiFieldPanel(
[
FieldPanel("image"),
FieldPanel("hero_text"),
FieldPanel("hero_cta"),
FieldPanel("hero_cta_link"),
],
heading="Hero section",
),
FieldPanel('body'),
]

또한 myapp/home/templates/home/home_page.html을 아래와 같이 수정합니다.

위에 model에서 추가된 필드들을 html에서 불러오도록 맵핑해주는 작업입니다. 원래는 보여주는 것이 page.title 밖에 없었는데 page.image, page.hero\_text, ... 추가 된 것을 볼 수 있습니다. 또한 가장 중요한 명시인 load wagtailcore\_tags는 꼭 있어야 합니다. 이것이 있어야 내용을 보여준다고 합니다.

{% extends "base.html" %}
{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-homepage{% endblock %}

{% block content %}
<div>
<h1>{{ page.title }}</h1>
{% image page.image fill-480x320 %}
<p>{{ page.hero_text }}</p>
{% if page.hero_cta_link %}
<a href="{% pageurl page.hero_cta_link %}">
{% firstof page.hero_cta page.hero_cta_link.title %}
</a>
{% endif %}
</div>

{{ page.body|richtext }}
{% endblock content %}

위에서 model을 수정했으니 마이그레이션을 진행해줍니다.

python manage.py makemigrations
python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Run server
python manage.py runserver

다시 실행한 화면에서 admin에 들어온 뒤 다시 page edit 화면으로 온 뒤 아래와 같이 수정해 줍니다.

이미지 추가부터 텍스트 입력 모든 것이 가능합니다. 아까 수정한 html을 이용해 다른 수정들도 또 가능합니다.

또한 body 는 입력이 RichTextField이기 때문에 텍스트 편집기 작성하듯 편하게 작성할 수 있습니다.

게다가 아래 오른쪽을 보면 프리뷰까지 보여줍니다.(모바일, 웹, 테블릿 등 환경 별로도 보여줍니다.)

image

오른쪽 상단에 라이브 버튼을 누르면 아직 프리뷰 화면에 작성한 내용이 보이지 않고 있는데,

image

이건 Pages 버튼을 눌러 페이지 목록으로 간 뒤 해당 페이지를 체크하면 아래 publish 버튼이 보이는데 이걸 클릭하면 라이브에도 반영됩니다!

image

wagtail을 이용하면 아래와 같이 문서, 이미지를 쉽게 등록하고 이것을 페이지에 보여주는 것도 자연스럽게 이용해 보여줄 수 있습니다.

image

image

또한 히스토리 관리도 해주고, 싸이트 설정, 유저 및 그룹 관리, 리다이렉트 등 엔터프라이즈 급의 관리를 아무 코딩 없이 바로 솔루션을 통해 사용 가능합니다. 

image

image

구성에 대한 이해도 직관적으로 알 수 있습니다. html에 database에서 관리되는 필드들을 저장하고 가져와 보여주는 방식입니다.

html에 등록할 때 Django 유저에 친숙하게 {{}} 를 통해 값을 찝어 넣어주면 됩니다.

아직 많이 사용해 보지 않아 익숙하진 않지만 조금 더 사용하다 보면 CMS 기능을 만들 때는 이걸로 계속 만들지 않을까 생각합니다.

배포 방법은 공식 문서를 참조하면 좋습니다. Dockerfile도 있기 때문에 Dockerize 할 수 있는 방법도 제공합니다.

Wagtail이 정말 좋은 솔루션이라는 생각이 들었고 더 많이 사용하게 되서 오픈 소스가 더 발전해 나가고 모두에게 좋은 기회가 되길 기원합니다!

Wagtail vs Wordpress - 프로젝트에 적합한 CMS를 선택하는 방법

· 7 min read

image

Wagtail과 Wordpress는 모두 뛰어난 오픈 소스 콘텐츠 관리 시스템입니다. 프로젝트에 가장 적합한 기술을 결정할 때 고려해야 할 몇 가지 사항은 다음과 같습니다.

Overview

오늘날 사용할 수 있는 오픈 소스 및 독점 CMS가 너무 많기 때문에 새 웹 사이트에 사용할 콘텐츠 관리 시스템(CMS)을 결정하는 것은 어려운 결정일 수 있습니다 . Wagtail과 Wordpress를 보고 있다면 오픈 소스 옵션을 사용하고 싶을 가능성이 높습니다. 특정 프로젝트에 어떤 오픈 소스 기술이 잘 작동할지는 항상 명확하지 않습니다. 그럼 Wagtail과 Wordpress의 장점을 비교하고, 각각 어떤 유형의 프로젝트가 잘 작동하는지 비교해 보겠습니다.

Wagtail 소개

Wagtail은 Python으로 작성되었으며 오픈 소스 Django 웹 프레임워크를 통합한 CMS입니다 . Django는 거의 20년 동안 존재해 왔으며 Spotify 및 Instagram과 같은 회사에서 사용됩니다. Wagtail은 2014년에 만들어졌으며 이후 NASA, Google, National Health Service와 같은 조직에서 채택되었습니다. Wagtail의 장점은 다음과 같습니다.

  • 사용자 정의: 데이터 구조부터 프런트엔드까지 Wagtail은 프로젝트의 특정 요구 사항을 충족하도록 사용자 정의하기가 매우 쉽습니다.
  • 유연성: Wagtail은 확장성이 매우 뛰어나며 매우 쉽게 확장하여 프로젝트에 필요한 사용자 정의 기능을 통합할 수 있습니다.
  • 엔터프라이즈 기능: Wagtail에는 권한, 워크플로, 보고서, 기록 추적 및 대규모 팀에 필요한 기타 기능이 포함되어 있습니다.
  • 보안: Wagtail은 다양한 일반적인 공격 방법 에 대한 보호를 포함하는 Django의 보안 기능을 통합합니다 .

Wordpress 소개

Wordpress는 일반적으로 MySQL 데이터베이스와 쌍을 이루는 PHP로 작성된 CMS입니다. Wordpress는 거의 20년이 되었으며 상위 1,000만개 웹사이트 중 42.8%가 사용할 정도로 인기가 높습니다. Wordpress의 장점은 다음과 같습니다.

  • 신속한 배포: 유명한 5분 설치 프로세스 덕분에 Wordpress를 사용하면 웹 사이트를 신속하게 배포하는 것이 매우 쉽습니다.
  • 로우 코드 솔루션: Wordpress는 코딩 없이 설정 및 설치할 수 있으므로 개인 프로젝트나 개발자가 없는 소규모 팀에 적합한 솔루션입니다.
  • 잘 알려진 CMS: 지구상에서 가장 인기 있는 CMS로서 프로젝트를 지원할 수 있는 사람들이 부족하지 않습니다.
  • 쉬운 업그레이드: Wordpress 프로젝트는 이전 버전과의 호환성에 중점을 두고 업그레이드가 상대적으로 수월하도록 합니다.
 WagtailWordpress
CostWagtail은 오픈 소스이며, 라이센스 비용이 없습니다. 웹싸이트 제작을 위한 개발자나 대행사 비용이 포함될 가능성이 있습니다.Wordpress는 오픈 소스이며 라이센스 비용이 없습니다. 시작하고 실행하는데 매우 저렴합니다.
LanguagePythonPHP
Framework효율성과 보안을 위해 설계된 최신 웹 프레임워크인 Django를 통합합니다.웹 프레임워크를 통합하지 않습니다.
CustomizationWagtail은 사용자 정의가 가능하고 블로그, 앱, 온라인 서비스 등 무엇이든 맞춤화하기 좋게 구성되어 있습니다.Wordpress는 블로그용으로 설계되어 블로그가 아닌 다른 프로젝트에 사용하려면 사용자 정의를 수행해야 합니다.
ExtendabilityWagtail은 확장이 매우 쉽고 패키지 또는 Python 코드를 사용해 기능을 추가할 수 있습니다.Wordpress는 플러그인을 사용해 쉽게 확장할 수 있습니다. 
ScalabilityWagtail은 성능에 심각한 영향을 주지 않고 대부분의 웹 싸이트에서 대량의 콘텐츠를 관리할 수 있습니다.Wordpress는 중소 규모 웹싸이트에 가장 적합합니다. 플러그인 수가 많을수록 성능에 영향을 줄 수 있습니다.
Required SkillWagtail은 웹 싸이트를 설정하고 유지할 개발자가 필요합니다.Wordpress는 개발자가 필요하지 않습니다.
Enterprise-level features대규모 조직에 일반적으로 필요한 워크플로, 권한, 주석, 보고서, 기록 추적 및 접근 기능 등이 포함됩니다.Wordpress는 고급 엔터프라이즈 기능을 추가하려면 플러그인이나 사용자 정의 개발이 필요합니다.
SecurityDjango의 고급 보안 기능과 일반적 공격에 대한 보호 기능이 포함됩니다.Wordpress는 그 자체로 우수한 보안을 제공하지만 플러그인으로 인해 보안 위험과 성능 문제가 발생할 수 있습니다.
Support무료 커뮤니티 지원과 세계적 네트워크가 있습니다.무료 커뮤니티 지원과 대규모 네트워크가 있습니다.

시작하는 것이 얼마나 쉬운가요?

Wordpress와 Wagtail은 모두 개발자와 콘텐츠 제작자가 비교적 배우기 쉽습니다. 둘 다 강력한 문서, 지원을 제공하는 번성하는 커뮤니티 및 직관적인 사용자 인터페이스를 갖추고 있습니다.

현재 둘 사이의 주요 차이점은 Wagtail 웹사이트를 시작하려면 기술적 능력이 필요하다는 것입니다. Wagtail은 직원 중에 개발자가 있거나 프리랜서 개발자 또는 대행사를 고용하려는 팀 및 조직에 이상적입니다. 개발자와 협력하더라도 작은 Wagtail 웹사이트를 구축하는 데 일반적으로 최소 일주일이 걸립니다. 반면에 Wordpress는 개발자 없이도 시작할 수 있으며 단 하루 만에 시작할 수 있습니다.

따라서 웹사이트가 정말 빨리 필요하거나 개발자와 협력할 여력이 없다면 Wordpress가 프로젝트에 가장 적합한 옵션일 수 있습니다. 예산이 적당하고 장기적으로 귀하 또는 귀하의 조직에 도움이 될 웹사이트에 투자하는 데 더 관심이 있다면 Wagtail이 더 나은 선택일 것입니다.

Wagtail과 Wordpress는 얼마나 사용자 정의가 가능합니까?

Wagtail은 사용자 정의가 가능합니다. Django 스타일 모델을 사용하여 Wagtail에서 프로젝트 시작 초기부터 데이터 구조와 기능을 사용자 정의할 수 있으므로 프로젝트에 특별히 필요한 기능에 맞게 만들어지지 않은 기능을 조정하는 것에 대해 걱정할 필요가 없습니다. 또한 Wagtail은 특정 프런트엔드 프레임워크에 의존하거나 필요하지 않으므로 원하는 프런트엔드 기술과 자유롭게 결합할 수 있습니다.

Wordpress는 블로그에 최적화되어 있습니다. 코드를 조정하고 다른 작업을 수행하도록 사용자 정의할 수 있지만 추가한 새 기능을 지원하기 위한 것이 아닌 인프라를 해결해야 하는 경우가 많습니다. Wordpress는 로우 코드 솔루션으로 설계되었기 때문에 대부분의 사람들이 Wordpress 테마를 통해 적응할 수 있는 프런트엔드도 내장되어 있습니다. 프런트엔드를 맞춤설정하려면 맞춤 테마를 만들어야 하는 경우가 많습니다.

프로젝트가 대부분 콘텐츠 중심이고 완전히 맞춤화된 시각적 디자인이 필요하지 않다면 Wordpress가 프로젝트에 적합할 수 있습니다. 데이터 구성 방식에 대한 더 많은 제어가 필요하거나, 사용자 정의된 사이트 구조를 원하거나, 프로젝트의 시각적 모양에 대해 더 많은 제어를 원할 경우 Wagtail이 더 나은 선택이 될 것입니다.

Wagtail과 Wordpress는 얼마나 안전합니까?

Wagtail은 Django 웹 프레임워크에 포함된 고급 보안 기능을 통합합니다. 이러한 기능은 교차 사이트 스크립팅, 교차 사이트 요청 위조, SQL 삽입 등을 비롯한 다양한 일반적인 공격으로부터 보호합니다. Wagtail과 Wagtail을 확장하는 패키지가 데이터베이스와 상호 작용하는 방식으로 인해 악의적인 행위자가 웹 사이트를 표적으로 삼고 데이터를 훔치는 것이 훨씬 더 어려워집니다.

Wordpress는 그 자체로 매우 안전합니다. 그러나 플러그인이 최신이 아니거나, 잘 작성되지 않았거나, 보안을 염두에 두고 생성되지 않은 경우에는 취약점이 발생할 수 있습니다 . Wordpress의 인기로 인해 Wordpress는 해커에게 일반적이고 비교적 쉬운 표적이 됩니다.

사용자로부터 대량의 데이터를 수집하거나 금융 정보나 건강 정보와 같은 민감한 데이터를 수집할 계획이 없다면 Wordpress가 적합할 수 있습니다. 결국, 난초에 대한 기사를 게시할 계획이라면 귀하의 웹사이트가 해커의 특히 귀중한 표적이 될 가능성은 거의 없습니다. 사용자 정보를 수집하거나 민감한 데이터로 작업하려는 경우 사람들이 해당 데이터를 훔치기 어렵게 만드는 Wagtail과 같은 CMS를 선택하는 것이 좋습니다.

Wagtail과 Wordpress는 얼마나 확장 가능합니까?

Wordpress와 Wagtail은 모두 매우 쉽게 확장할 수 있습니다. Wordpress는 한 번의 클릭으로 설치하고 웹 사이트에 추가할 수 있는 플러그인을 사용합니다. Wordpress에는 수천 개의 무료 및 유료 플러그인이 있습니다. Wagtail은 개발자가 웹사이트 백엔드에 설치해야 하는 패키지를 사용합니다. 현재 Wagtail에 특별히 사용할 수 있는 패키지는 더 적지만 , 많은 Django 패키지 도 Wagtail과 잘 작동합니다.

Wagtail과 Wordpress의 주요 차이점 중 하나는 Wagtail 패키지가 웹 사이트가 커지고 더 많은 트래픽을 처리함에 따라 계속 잘 작동하는 경향이 있다는 것입니다. 반면에 Wordpress 플러그인은 종종 서로 충돌할 수 있으며 성능 문제의 일반적인 원인인 것으로 나타났습니다.

프로젝트가 상대적으로 간단하고 플러그인으로 제공되는 복잡한 기능이 많이 필요하지 않다면 Wordpress가 프로젝트에 적합한 선택입니다. 프로젝트가 더 복잡하고 많은 추가 기능이 필요하거나 웹 사이트 트래픽이 많은 경우 Wagtail을 고려해야 합니다.

내 프로젝트에 어느 것이 더 나은 투자입니까?

이 질문에 대한 답은 여러분이 만들고 있는 프로젝트의 유형과 타임라인에 따라 달라집니다. 각 CMS가 실제로 빛나는 시나리오는 다음과 같습니다.

와그테일은 다음에 좋습니다:

  • 엄청난 양의 콘텐츠를 생산하고 관리하는 조직
  • 시간이 지남에 따라 꾸준히 성장하고 많은 수의 사용자를 지원해야 하는 장기 프로젝트
  • 사용자 및 출판 워크플로를 구성하기 위해 기본 제공 도구가 필요한 중대형 팀
  • 많은 사용자 정의 또는 독특한 디자인이 필요한 프로젝트

WordPress는 다음에 적합합니다.

  • 솔로 프로젝트 또는 소규모 팀
  • 매우 빠르게 출시되어야 하는 개념 증명 프로젝트
  • 개발자가 없는 팀
  • 상대적으로 트래픽이 적은 개인 블로그나 웹사이트