23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
MSA로 개발하면서 템플릿 기반으로 작은 서비스를 많이 만들게 됐습니다.
이 때 템플릿을 잘 만들어두면, 개발 효율이 올라가고 동료 개발자도 금방 프로젝트에 합류 가능합니다.
이런 템플릿을 만드는 툴로 create-react-app, django-admin 이 있습니다.
여기서 더 나아가 본인 조직만의 템플릿을 만들고 싶을 때, cookiecutter를 배우면 좋습니다 😃
이번 포스팅에서는 cookiecutter로 Django 템플릿을 만들고 웹으로 배포하는 내용을 다뤄보겠습니다.
cookiecutter 활용 예시: tiangolo의 FastAPI cookiecutter 프로젝트
폼을 채우고 생성하기 버튼을 누르면, 장고 템플릿을 zip파일로 다운받을 수 있습니다.
cookiecutter 사용법에 대해서는 여러 포스팅이 작성되어 있습니다. 먼저 참고해보세요~
이 프로젝트에서 cookiecutter 소스는 devocean-cookiecutter/web/maker/django-template 폴더에 있습니다.
cookiecutter.json 에서 변수를 설정해주고 이 변수를 템플릿 내에서 {{cookiecutter.some\_variable}} 형식으로 이용합니다.
템플릿 내에 { } 같은 문법을 이미 사용중인 경우 시작과 끝에 {% raw %} {% endraw %}를 넣으면 됩니다.
ex). web/templates/web/base.html
cookiecutter 프로젝트를 만들었으면 이제 사용자 편의성을 늘릴 차례입니다.
사용자 입장에서는 cookiecutter를 설치안해도 템플릿을 만들 수 있으면 좋습니다. 그래서 cookiecutter CLI대신 웹으로 배포해보려고 합니다.
전체 코드는 devocean-cookiecutter repo 를 참고해보세요~
make_template 함수는 cookiecutter API를 이용해 입력값을 바탕으로 템플릿을 만듭니다. 그리고 이를 압축파일로 만듭니다.
# web/maker/__init__.py
import os
import shutil
from cookiecutter.main import cookiecutter
BASE_PATH = os.path.dirname(__file__)
OUTPUT_DIR = os.path.join(BASE_PATH, 'output')
def make_template(context, path):
template = os.path.join(BASE_PATH, path)
result = cookiecutter(template, no_input=True, output_dir=OUTPUT_DIR, extra_context=context)
filename = result.split('\\')[-1]
zipped = shutil.make_archive(f'{OUTPUT_DIR}\{filename}', 'zip', result)
shutil.rmtree(result)
with open(zipped, 'rb') as f:
file = f.read()
return file
Template에 필요한 변수를 Django Form을 이용해 입력 받습니다.
# web/forms.py
from django import forms
class DjangoTemplateForm(forms.Form):
project_name = forms.CharField(label='Project name', max_length=100)
app_service_name = forms.CharField(label='AppService name', max_length=100)입력값을 make_template 함수에 전달해줍니다. make_template 반환값은 압축파일인데 이 압축파일로 응답합니다.
# web/views.py/template 함수 내
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
file = make_template(form.cleaned_data, cookiecutter_path)
response = HttpResponse(file, content_type='application/zip')
filename = form.cleaned_data['project_name'] + '-' + form.cleaned_data['app_service_name']
response['Content-Disposition'] = f'inline; filename={filename}.zip'
return response이렇게 만들면 앞의 결과물을 만들 수 있습니다!
로컬에서 실행해보고 싶으면 파이썬 설치후, 압축파일 푼 경로에서 아래 명령어 입력하면 됩니다.
python -m pip install -r requirements.txt
python manage.py runserver
하이닉스에서는 HCP (Hynix Cloud Platform) 이라는 이름으로 Kubernetes 기반 Private 클라우드 운영중입니다.
여기서 이 웹앱을 이용해 HCP에 필요한 템플릿을 만들때 활용중입니다~ (deployment.yaml, Jenkinsfile ...)
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.