[작정하고 장고] 1

jinsik·2022년 11월 25일
0
post-custom-banner

작정하고 장고 1강 - 무엇을 만들 것인지 : Django로 Pinterest 따라하기!

🏆 핀터레스트 레이아웃으로 웹서비스를 만들어보자.

개요

  • Front-End
    • JS
    • HTML
    • CSS
  • Back-End
    • Django
    • Nginx
    • MariaDB
    • Docker
  • Docker로 시스템을 구축해서 Vultr에 올리는 것이 목표이다

가상환경 구축

$ pyenv virtualenv test123
  • 가상환경 구축에 대해서는 여기를 참고해보자.
  • 위 명령어를 실행하면 test123이라는 파이썬 가상환경이 생성된다.
#버전 스위칭
$ pyenv local test123
(test123)$ pip install django
  • test123이라는 가상환경에 django를 설치한다.

장고 프로젝트 만들기

$ django-admin startproject mysite
  • mysite라는 이름의 프로젝트를 만들어준다.

장고 개발 패턴 짚고 넘어가기

  • MVC 아키텍처 패턴
    • Model, View, Controller
  • 장고의 MVT 아키텍처 패턴
    • Model, View, Template
  • MVC와 MVT의 관계에 대해서는 여기에서 확인할 수 있다.

Model

  • 장고와 DB간 통신을 하게 해준다.
  • 장고에서 DB쪽 언어를 사용하지 않고도 간편하게 sql문을 처리할 수 있다.

View

  • 장고의 계산, 작업, 처리 대부분을 담당하는 부분
  • 유저의 요청에 따라 처리한다.

Template

  • UI 부분을 담당
  • 템플릿은 뷰와 연계하여 동적인 처리도 할 수 있다.
  • html에 특수한 기호를 넣어 프로그래밍도 가능하게 한다.

첫 앱 만들기

$ python manage.py startapp accountapp
  • mysite 프로젝트 디렉토리 안의 manage.py를 이용하여 accountapp이라는 앱을 만들어보자.
  • 다음은 프로젝트에서 생성한 accountapp을 등록시켜 사용 가능하도록 해야 한다.
#in mysite/settings.py
#...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accountapp',
]
#...
  • mysite 메인 앱의 settings.py에서 위와 같이 앱의 이름을 써주어 앱을 찾을 수 있도록 해야 한다.

뷰 작성하기

#in accountapp/views.py
from django.http import HttpResponse

def hello_world(request):
	return HttpResponse('Hello World!')
  • 어떤 요청을 받았을 때 간단하게 ‘Hello World!’를 출력하는 기능을 가진 hello_world 뷰를 작성하였다.
  • 이제 url을 뷰와 매핑하여 사용자로부터 요청이 들어왔을 때 이 뷰를 선택하여 처리하도록 해보자.

URL 매핑하기

#in mysite/urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('accountapp.urls'))
]
  • 사용자로부터 도메인/account로 요청이 왔을 때 accountapp 안의 urls.py로 넘겨준다.
  • 그러므로 accountapp/urls.py 파일을 만들어 다음과 같이 작성한다.
#in accountapp/urls.py
from django.urls import path

from accountapp.views import hello_world

app_name = 'accountapp'
urlpatterns = [
    path('hello_world', hello_world, name='hello_world'),
]
  • views.py의 함수(뷰)를 참조해야 하기 때문에 import 시키고, account/hello_world로 요청이 왔을 때 hello_world라는 뷰와 매핑시켜준다.
  • 이 라우팅하는 이름을 name=’hello_world’로 지정해주었다.
  • 앱 이름 또한 accountapp으로 명시해준다.
  • app_name은 네임스페이스를 정하는 공간으로 나중에 ‘127.0.0.1:8000/account/hello_world’ 대신에 ‘accountapp:hello_world’ 이런 식으로 접근이 가능하게 해준다.

서버 구동하여 결과 확인하기

$ python manage.py runserver
  • 서버는 위 명령어로 구동이 가능하다.
  • ‘localhost:8000/account/hello_world’에 접속하면 결과를 확인할 수 있다.

Git 사용하기

  • 여기까지 만들었으면 Git을 통해 버전관리를 해보자.

.gitignore

  • .gitignore는 어떤 디렉토리 안에 이 파일이 있으면 git에서 해당 디렉토리에서 .gitignore 내용에 따라 추적하지 않을 파일을 선택할 수 있다.
  • 일단 프로젝트 루트 디렉토리 안에 만들어 놓자.

setting.py의 SECRET_KEY

  • 프로젝트를 만들면 setting.py에 SECRET_KEY가 랜덤하게 생성되어 평문으로 적혀있는데, 배포할 때 이 키가 보이면 안되므로 숨겨야 한다.
  • 그 외에도 민감한 환경변수들을 분리하여 보안을 높일 수 있다.
  • 이를 위해 다음과 같이 django-environ을 설치하여 숨길 수 있다.
$ pip install django-environ
  • 설치하면 settings.py에 아래와 같은 코드를 넣어준다.
#in mysite/settings.py
import environ
import os

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
  • 분리할 환경변수를 저장할 .env 파일을 프로젝트 루트 디렉토리에 만들고 아래와 같이 작성한다.
DEBUG=on
SECRET_KEY=your-secret-key
DATABASE_URL=psql://user:un-githubbedpassword@127.0.0.1:8458/database
SQLITE_URL=sqlite:///my-local-sqlite.db
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379/1?client_class=django_redis.client.DefaultClient&password=ungithubbed-secret
  • your-secret-key 부분을 지우고 settings.py에 있는 시크릿 키 값을 넣어주면 된다.
  • 여기까지 완료했으면, settings.py 안에 환경변수들을 다음과 같이 숨길 수 있다.
#in mysite/settings.py
# False if not in os.environ because of casting above
DEBUG = env('DEBUG')

# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
  • 애써 숨겼는데 .env 파일이 git에 올라가면 안 될 것이다.
  • .gitignore에 .env를 추가하여 git에서 추적하지 않도록 하자.
  • 여기를 참조하여 첫 커밋을 완료해보자.

배운 내용 정리

  1. 새롭게 배운 것
    • .gitignore에 관하여 알게 되었다.
    • 보안을 위해 배포할 때 환경변수를 어떻게 관리해야 하는지 알게 되었다.
  2. 배운 것 중에 모르겠는 것들
    • 강의에서는 IDE로 pycharm을 쓰기 때문에 .gitignore의 내용이 달랐다.
    • vscode에서는 .gitignore의 내용이 어떻게 다를까?
  3. 모르는 것을 알기 위해 찾아본 것들
    • 검색했더니 자신이 사용하는 OS, IDE, Framework에 따라서 .gitignore를 생성해주는 사이트가 있었다.
    • 거기서 macOS, visual studio code, django, python으로 돌려보았더니 자동으로 내용이 생성되었다.
    • 참고 https://www.toptal.com/developers/gitignore
profile
공부
post-custom-banner

0개의 댓글