데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      cookiecutter를 이용해 템플릿 만들고 웹 배포하기

      심재훈 23.04.12
      2,162 19 0

      1. 개요

      MSA로 개발하면서 템플릿 기반으로 작은 서비스를 많이 만들게 됐습니다.

      이 때 템플릿을 잘 만들어두면, 개발 효율이 올라가고 동료 개발자도 금방 프로젝트에 합류 가능합니다.

      이런 템플릿을 만드는 툴로 create-react-app, django-admin 이 있습니다.


      여기서 더 나아가 본인 조직만의 템플릿을 만들고 싶을 때, cookiecutter를 배우면 좋습니다 😃

      이번 포스팅에서는 cookiecutter로 Django 템플릿을 만들고 웹으로 배포하는 내용을 다뤄보겠습니다.


      cookiecutter 활용 예시: tiangolo의 FastAPI cookiecutter 프로젝트


      2. 결과물 미리보기 (소스코드 Repo)

      demo.jpg

      폼을 채우고 생성하기 버튼을 누르면, 장고 템플릿을 zip파일로 다운받을 수 있습니다.


      3. cookiecutter 프로젝트 만들기

      cookiecutter Hello world 예시

      cookiecutter 한국어 설명 블로그

      cookiecutter 공식문서


      cookiecutter 사용법에 대해서는 여러 포스팅이 작성되어 있습니다. 먼저 참고해보세요~


      이 프로젝트에서 cookiecutter 소스는 devocean-cookiecutter/web/maker/django-template 폴더에 있습니다.

      cookiecutter.json 에서 변수를 설정해주고 이 변수를 템플릿 내에서 {{cookiecutter.some\_variable}} 형식으로 이용합니다.


      cookiecutter_json.jpg


      템플릿 내에 { } 같은 문법을 이미 사용중인 경우 시작과 끝에 {% raw %} {% endraw %}를 넣으면 됩니다.

      ex). web/templates/web/base.html


      raw_endraw.jpg


      4. CLI 대신 Web GUI, 압축 파일로 템플릿 배포하기

      cookiecutter 프로젝트를 만들었으면 이제 사용자 편의성을 늘릴 차례입니다.

      사용자 입장에서는 cookiecutter를 설치안해도 템플릿을 만들 수 있으면 좋습니다. 그래서 cookiecutter CLI대신 웹으로 배포해보려고 합니다.


      전체 코드는 devocean-cookiecutter repo 를 참고해보세요~

      4-1. make_template 함수 만들기

      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
          

      4-2. Form 입력창 만들기

      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)

      4-3. 압축파일 응답하기

      입력값을 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

      http://127.0.0.1:8000/ 접속


      5. 하이닉스에서의 활용 방법

      하이닉스에서는 HCP (Hynix Cloud Platform) 이라는 이름으로 Kubernetes 기반 Private 클라우드 운영중입니다.

      여기서 이 웹앱을 이용해 HCP에 필요한 템플릿을 만들때 활용중입니다~ (deployment.yaml, Jenkinsfile ...)

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      심재훈 님의 최신 블로그

      더보기
      동영상 기고하기