Django Project Initial Setting *중요*

Jayson Hwang·2022년 5월 5일
0

Django Basics

목록 보기
2/14
post-thumbnail

Django Project 초기 세팅

:: Django 프로젝트는 아래와 같은 순서로 세팅이 진행됩니다.
:: 매번 다른 프로젝트마다 사용 프로그램 및 버젼이 다를 수 있으므로 확인하고 세팅을 해주어야 합니다.


1.. 가상환경 생성

:: miniconda를 사용하여 가상환경을 생성

# 가상환경 생성
conda create -n "가상환경 이름" python=3.8
conda activate "가상환경 이름"

2.. Database 생성

:: 어떤 종류의 database를 사용할지 정하고, DB를 생성하는 과정

<<mysql을 사용한다면>>

mysql -u root -p
# mysql 접속

create database {NAME} character set utf8mb4 collate utf8mb4_general_ci;
# {NAME}의 이름을 갖는 Database를 생성함
# utf8mb4 :::: 데이터베이스에 이모지, 특수문자를 사용 가능한 문자열을 추가함

::: 📌 mysql 명령어

mysql> show databases;
# database들을 보여주는 명령어

mysql> exit
# mysql 종료하는(서버에서 나가는) 명령어

3.. Project Python Package 설치

:: 원하는 이름의 폴더 생성 및 진입

mkdir django-33
cd django-33

:: Django package 설치(생성한 폴더 안에서)
:: django & mysqlclient 설치

$ pip install django

# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient
(중요) mysql 설치되어 있는지 먼저 확인해주세요
  
$ pip install ipython
# Django Shell을 깔끔하게 사용하기 위한 라이브러리

::: 📌 mysqlclient

  • 추후 장고와 DB가 송신하려면 특정한 커넥션이 만들어져야 하는데,
  • mysqlclient가 이 커넥션을 만들어주는 역할
  • 설치 안하면 장고는 클라이언트 요청은 받지만 데이터베이스와 소통이 불가능

::: 📌 pip freeze

  • 장고 및 기타 원하는 프로그램이 잘 설치되어있는지 확인하기 위한 명령어
  • 만약 잘 설치 되었다면 아래(프로그램 이름과 버젼 목록)와 비슷한 화면 나옴
asgiref==3.5.1
certifi==2021.10.8
Django==4.0.4
sqlparse==0.4.2

4.. Django Project 생성

:: django-admin

django-admin startproject django_crud
  
# 입력하게되면 django_crud라는 이름의 폴더가 생성됨
# 이 폴더 안에는 django_crud라는 파일과, manage.py 파일이 생성됨
여기서 중요한 것은 django_crud/settings.py 이다.

:: 📌 app을 생성하려면?

python manage.py startapp (app name)

5.. Settings.py 설정

5-1.. SECRET_KEY

  • 장고 생성시 기본으로 만들어짐
  • 사용자에게 권한을 주기위한 토큰 생성, 혹은 서버에서만 사용할 수 있는 비밀코드
  • 절대로 외부에 노출되서는 안되며, 노출된다면 회원정보 등 중요한 데이터까지도 노출될 수 있음
  • 추후 다른 장소로 옮겨서 노출되지 않도록 함

5-2.. DEBUG

:: 프로젝트용으로 진행할 것인지 배포용으로 진행할 것인지 확인

  • Ture :: 개발하는 동안 발생하는 모든 에러가 발생하면 바로 확인할 수 있도록 터미널에 출력
  • False :: 배포용이며, 배포할 때는False로 변경해서 배포해야함

5-3.. ALLOWED_HOST = [""]

  • 이 서버에 어떤 IP의 접근을 허용할 것인지 리스트 형태로 저장
  • ['*']을 사용하면 모든 트래픽을 받는다는 설정

5-4.. INSTALLED_APPS

  • 어플리케이션 정리하는 곳
  • pip로 설치한 앱 혹은 본인이 만든 app을 추가
  • 앱을 추가하게되면 INSTALLED_APPS에 꼭 추가를 해줘야함
아래 두가지 주석처리 할 것
  
'django.contrib.admin',
'django.contrib.auth',

5-5.. MIDDLEWARE

  • URL conf 이전에 MIDDLEWARE가 숨겨져 있음
  • 클라이언트의 요청을 가장 앞선에서 막고 방어하는 용도의 설정
  • request와 response 사이의 주요 기능 레이어
  • 크게 신경 안써도 되지만, 인증 및 보안과 관련된 기능을 다루고 있음
아래 두가지 주석처리할 것
  
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',

5-6.. ROOT_URLCONF

:: 여러개 파일이 있을 수 있는데 어떤걸 root로 할것인가?

  • ROOT_URLCONF = 'django_crud.urls'
    ☛ django_crud 폴더 안에 urls.pyroot urlconf로 하겠다.

5-7.. TEMPLATES

  • 이제는 클라이언트단에서만 html관리하고 서버사이드에서는 데이터 관련된 요청만 처리함으로,
    템플릿을 사용하는 경우는 이제 거의 없다.
  • django template 관련 설정, 실제 뷰(html, 변수)

5-8.. WSGI_APPLICATION

  • 추후에 설명

5-9.. DATABASES

  • 장고 프로젝트에서 어떤 Database를 쓸것인가 정하는 것
  • ENGINE이 어떤 DB를 쓸 것인지를 나타내는 것
    ex)'ENGINE': 'django.db.backends.mysql'
DATABASES = {
    'default': {
        'ENGINE' : 'django.db.backends.mysql',
        # 어떤 DB를 쓸 것인지
        
        'NAME' : '33_instagram',
        # 만들어놓은 DB 이름
        
        'USER' : 'root',
        # mysql 서버 접속할 때 사용하는 
        
        'PASSWORD' : 'password',
        # 접속할 때 사용하는 비밀번호
      
        'HOST' : '127.0.0.1',
        # DB가 실행되고 있는 서버의 주소를 적는다.
        # ex) 127.0.0.1 :::Local server
        
        'PORT' : '3306'
        # IP만 적어놓으면 장고가 길을 잃음
        # 택배 받을 때 생각하면, 아파트 주소를 정확히 써줘야하는 것과 마찬가지
        # 맥북에서 돌아가는 여러 애플리케이션 중에 PORT를 통해서 정상적으로 요청을 보내고 받고가 가능
    }
}

:: 📌 corsheaders

  • pip install django-cors-headers

  • 간단하게 보안용도로 사용하는 라이브러리

  • 링크 확인해서 더 공부할 것 (https://blog.thereis.xyz/41)

  • 설치 후에는
    settings.py 안에 INSTALLED_APPSMIDDLEWARE에 추가해줘야함

INSTALLED_APPS = [

...
    'corsheaders'
]


MIDDLEWARE = [

...
'corsheaders.middleware.CorsMiddleware',
...
]
  • CORS 추가 설정도 밑에 붙여줘야함
#REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False

##CORS
CORS_ORIGIN_ALLOW_ALL  =True
CORS_ALLOW_CREDENTIALS = True
    
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)
    
CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',    		
)

6.. 프로젝트 서버 실행

  • 모든 것이 정확하게 설치되었는지 pip freeze를 통해서 확인
    ex) 이번 프로젝트 같은경우, mdjango-cors-headers가 추가되었을 것이다.

  • urls.py에 admin 지우기

from django.urls import path

urlpatterns = [
]
  • python manage.py runserver 통해서 작동하는지 확인 (작동하면 아래와 같은 결과)
System check identified no issues (0 silenced).
May 04, 2022 - 08:40:05
Django version 4.0.4, using settings 'django_crud.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

7.. health_check

:: 서버가 살았는지 죽었는지 확인하기 위한 기능 추가

  • python manage.py startapp health_check 로 생성
  • ls, ll, tree를 통해서 확인
  • settings.py의 INSTALLED_APPS에 health_check 추가
  • health_check 내부의 views.py에 아래 코드 추가
from django.http import HttpResponse

def ping(request):
    print(f"client's request {request}")
    return HttpResponse("pong")
  • 그리고 django_crud의 urls.py에서 아래와 같이 추가
from django.urls import path

from health_check.views import ping

urlpatterns = [
    # 127.0.0.1:8000/ping요청 들어왔을 떄 Veiw.py의 코드가 실행된다.
    path("ping", ping)

]
  • python manage.py runserver 실행하고,
    ip 주소 http://127.0.0.1:8000/ping 입력해서 사이트 뜨는 거 확인하고, 개발자 도구 들어가서 network탭에서 ping에 대한 headers의 정보 확인

8.. 민감한 정보 관리(SECRET_KEY, DATABASES)

  • touch my_settings.py로 새로운 파일 만들어주고,
    그 안에 settings.py에 있던 민감한 정보들 secretkey와 database같은 것들을 옮긴다.

  • 그 후, settings.py에 from my_settings import DATABASES, SECRET_KEY로 연결해준다.
    그리고 밑에 SECRET_KEY = SECRET_KEY DATABASES = DATABASES 로 settings.py에서 더 이상 민감한 정보를 볼 수 없도록 만들어준다.

  • 그리고나서 잘 동작하는지 다시 확인 python manage.py runserver


9.. Git & Github

9-1.. git 초기화

  • 생성한 장고 프로젝트를 git으로 관리할 수 있도록 초기화
  • manage.py가 위치한 곳으로 이동
  • 명령어로 git 초기화
git init

9-2.. ".gitignore" 생성

  • 소스 공유를 위해 깃을 사용하지만, 올리고 싶은것 올리면 안되는것을 구분해야함
    예를 들면 아까 my_settings.py에 따로 작성해서 빼준 시크릿키 등의 파일들은 깃허브에 올라가면 안되기 때문에 .gitignore파일을 생성해서 관리해줘야한다.
  • gitignore.io 로 접속해서 해당하는 키워드를 선택 후 모두 카피 페이스해서 새로 생성한 .gitignore 파일에 아래와같이 붙여넣기 한다.
    (visualstudiocode, pycharm. python, vim, django, etc.)
cd '프로젝트 폴더명'
touch .gitignore
vi .gitignore

############################
# gitignore.io 결과 전체 복사 #
############################

# 가장 하단 my_settings.py 추가하기
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)
  • 그후 "git status" 명령어를 통해서 폴더에서 작업한 내용들이 보여진다.

9-3. add & commit

  • "git add ." 명령어를 통해서 add 해주고,
  • "git commit -m "Add: Django Project Setting"" 명령어를 통해 commit까지 한다.

:: 여기까지 진행하면 깃 관련 설정은 모두 끝난다.

9-4.. GitHub 접속

  • 홈에 들어가서

  • your repositories 로 들어간 후, new를 통해서 새로운 repository를 생성

  • 안에 repository 이름과 여러 설정들을 정한 후 create

  • 그러면 아래 이미지 같은 화면이 나옴

  • 그러면 아래 이미지에 해당하는 명령어를 iterm2에 입력하여 생성한 Repository와 로컬에 있는 저장소를 연동시킨다. 그 후 깃헙을 새로고침하면 깃헙에 올라간 내 파일들이 보인다.

  • 📌 당연히 .gitignore을 통해서 업로드하지 않길 원했던 파일들은 저장되지 않는다.

9-5.. Git & GitHub 과정 정리


10.. Branch & Application

  • 초기 셋팅을 마치면 GitHub의 insight 탭의 network 탭에 main branch가 하나 있음

10-1.. 작업브랜치 생성

  • 초기 세팅만 메인브랜치에서 진행해야함
    새로운 기능개발이나 에러픽스는 절대 메인브랜치에서 하면안됨
  • 나만의 새로운 작업공간을 따서 해야함
    git branch feature/signup 등을 통해서 생성하고
    git checkout feature/signup 을 통해서 이동

:::: 📌 "git branch" 명령어를 통해서 내가 지금 어떤 브랜치에 있는지 알수 있다.

  • 이후 "python manage.py startapp users" 명령어를 통해 users라는 앱을 만들어 주고,
    아까와 동일하게 django_crud/settings.py에 Installed apps에 'users' 앱 추가 후,
    users 폴더의 views.py에 코드 내용을 작성한다.

  • 그 후 "git status" 명령어를 입력하면 작업내용이 또 나옴

  • 그러면 그 내용을 다시 add("git add.") 해준 후 commit("git commit -m "Add: Sign up function"")

  • 이후 "git log" 명령어를 통해 제대로 commit되었는지 확인 후,
    push("git push origin feature/signup")한다.

:::: 📌 이때도 주의해야할 것이 feature/signup의 local에서 개발했다고 하면, push 할때도 동일한 Local에서 push해야함

10-2.. Merge 방법

  • 깃헙에서 pull requestscompare and pull request 버튼 누르고,
  • base: main ◀︎ compare:feature/signup 이 진행된다.
  • creat pull request 버튼을 누르고, merge 버튼을 누르게 되면 merged 되었다고 뜸.

그렇게되면 결과적으로 code탭으로 가면 users폴더가 추가된 것을 볼 수 있으며, 네트워크 탭으로 가면 더 가시적으로 확인가능하다.

profile
"Your goals, Minus your doubts, Equal your reality"

0개의 댓글