Django 초기 세팅

jinatra·2021년 8월 13일
2

Django

목록 보기
1/9
post-thumbnail

Django 초기 세팅


Django 초기 세팅을 하는 이유

Django 초기 세팅을 하는 이유는 여러가지가 있겠지만, 난 아래와 같이 생각하고 있다.

  1. 나의 프로젝트 환경에 맞는 Django 세팅 설정
  2. git/gitHub의 원활한 이용을 위함

Django 초기 세팅 순서

가상 환경 세팅

프로젝트 마다 별도의 가상 환경을 세팅해줘야 추후 충돌이 일어날 일이 없기에, 한 프로젝트를 시작하고자 할 때 반드시 새로운 가상 환경에서 시작해줘야 한다.

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

test1 이라는 이름의 가상환경을 miniconda를 통해 생성

conda env list를 통해 test1 서버가 있는 것을 확인했으니 구동


Database 생성

가상환경에서 사용해야하는 데이터베이스를 생성해야한다.
원래 Django에서는 자체적으로 sqlite3를 지원하지만, 우리는 mysql을 사용할 거니까 mysql 설치

mysql -u root -p

mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;

(mysql -u root -p 에서 -u는 user의 의미)

mysql에서 root(superuser) 권한으로 유저 등록
(root는 UNIX/Linux 환경에서 superuser 계정을 지칭)

이후 wedidas 라는 이름의 데이터베이스 생성


Project Python Package 설치

새로운 가상 환경을 만들때마다 Django를 다시 설치해줘야한다.

$ pip install django

# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient

pip install django를 이용하여 장고를 재설치

pip install mysqlclient를 이용해 가상 환경에 장고에서 지원하는 mysqlclient를 다운받으려 했는데 오류가 떴다.

검색해보니 내 맥은 M1이라서 다른 명령어를 입력하여야 한다.

pip install PyMySQL

이제 test1 가상환경의 장고에서 mysql을 사용할 수 있게 되었다!


Django Project 생성

이제 가상환경 안에서 장고를 이용하여 프로젝트를 진행할 수 있다.

$ django-admin startproject <project_name>
$ cd <project-directory>

프로젝트 폴더를 생성하고자 하는 경로로 진입 후, test_project 라는 이름의 프로젝트를 실행

아래를 보면 test_project 이름의 디렉토리가 생성된 것을 알 수 있다


Settings.py 설정

IP 허용

누구나 접속가능하게 하기 위해 일단 모든 IP로 하여금 접속 가능하게 설정

ALLOWED_HOSTS = ['*']

주석 처리

지금 단계에선 admin(관리자) 기능과 authorization(로그인, 로그아웃) 기능을 쓰지 않을 예정이므로, APPSMIDDLEWARE에서 해당 코드를 주석처리

INSTALLED_APPS와 MIDDLEWARE는 서로 연동되는 것이 있어서 INSTALLED_APPS에서 어떤 기능을 끄고자 하면 MIDDLEWARE도 꺼줘야한다.

주석처리로 인한 urls.py 변경

아무것도 건들지 않은 상태의 urls.py 파일 모양은 아래와 같다.

그런데 우리는 위에서 admin 기능을 쓰지 않기 위해 주석처리를 하였다.
그러므로 오류를 방지하기 위해 아래와 같이 변경을 해주어야 한다.


my_settings.py 생성

우리는 git을 위해 gitHub을 활용할 예정이다.
그런데 모든 데이터를 올려버리면 다른 사람도 우리의 코드를 볼 수 있다는 것이고, 그렇다면 민감한 정보들도 유출될 수 있다는 것이다.
그래서 my_settings.py를 생성하여 민감한 정보만 따로 빼두고 관리할 것이다!!

정리하자면 아래와 같다.

  • 장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아니기에 별도의 파일 혹은 환경변수로서 관리하는게 권장된다.
  • settings.py에 바로 저장되는 방식은 가급적 지양해야 한다.

프로젝트 디렉토리에 my_settings.py 생성

이후 아래와 같은 정보들을 적어주어야 한다.

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DATABASE 명',
        'USER': 'DB접속 계정명',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

SECRET_KEY = '시크릿키' #settings.py에 있는 secret_key 를 사용합니다.
  • 'NAME': 'DATABASE 명' : mysql에서 아래와 같이 확인 가능 (wedidas)
  • 'USER': 'DB접속 계정명' : root
  • 'PASSWORD': 'DB접속용 비밀번호' : 실제 비밀번호
  • SECRET_KEY : settings.py에서 확인 가능

최종적으로는 아래와 같이 적으면 된다. (중요 정보는 숨김처리 ㅎㅎ)


settings.pymy_settings.py 연동

setting.py 파일은 gitHub에 올라갈 예정인데, 중요 정보는 my_settings.py에 빼둔 상태이다.
그렇다고 my_settings.py에 적은 DATABASESSECRET_KEY를 삭제하면 장고가 인식을 할 수 없으니 별도로 import 시켜주면 된다.

# settings.py

from pathlib        import Path #기존에 settings.py 에 있는 코드
from my_settings    import DATABASES, SECRET_KEY

...

DATABASES = DATABASES

SECRET_KEY = SECRET_KEY

원래는 DATABASESSECRET_KEY 정보가 settings.py에 적혀있었지만, 변수처리를 해주고 my_settings.py에서 import 해왔으므로 gitHub에 업로드해도 정보가 새어나갈 일은 없는 것이다.
(my_settings.py는 gitHub에 안올리고 따로 관리할거니까!)


pymysql package 설치 후 settings.py에 추가

위에서 mysqlclient를 설치하려고 pip install mysqlclient를 쳤을 때 오류가 났고,
나는 M1 사용자라서 pip install PyMySQL를 이용해 입력해야 했다.

생각을 해보자.
나는 새로운 패키지를 깔았으니, 당연히 적용을 해야할 것 아닌가?

그러니 빨리 setting.py를 열고 아래와 같이 추가해주자.

# settings.py

from pathlib        import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY

import pymysql

pymysql.install_as_MySQLdb()

이제 해당 프로젝트에서 mysql 구동이 가능하게 되었다.


corsheaders

아래 명령어를 통해 cors-headers를 설치

pip install django-cors-headers

뭔가를 설치했으니 당연히 setting.py에 아래와 같이 추가

# settings.py

INSTALLED_APPS = [
...
		'corsheaders'
]

MIDDLEWARE = [
	...
		'corsheaders.middleware.CorsMiddleware',
	...
]

그리고 최하단에 아래와 같은 내용들도 추가시켜줘야 한다.

# settings.py

#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',
		#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
)

Project 서버 실행

서버 동작(Runserver)을 통한 오류 검증

이제 직접 서버를 돌려서 잘 작동하는지 확인해보자.:

python manage.py runserver

정상적으로 서버가 돌아간다!


Git & Github

git 초기화

생성한 장고 프로젝트를 git으로 관리할 수 있도록 초기화하는 작업

  1. manage.py 가 위치한 곳으로 이동
  2. git init 명령어로 git 초기화
git init


.gitignore 생성

소스를 공유하기 위해 깃을 사용하지만 올리고 싶은것 올리고 싶지 않은것, 올려서는 안되는 것들이 존재하고,
이를 구분하기 위해 깃이 설치된 디렉토리에 .gitignore 파일을 생성해서 관리해야 한다.

https://www.toptal.com/developers/gitignore

위 사이트에 들어가 아래 키워드를 추가 후 생성

> python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh

이후.gitignore 파일을 생성 후 내용 모두를 복붙

cd '프로젝트 폴더명'
touch .gitignore
vi .gitignore

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

# 가장 하단 my_settings.py 추가하기
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)


add & commit

git에 변경 내역 업데이트를 해주기 위해 아래와 같이 입력

git add .
git status
git commit -m "Add: Django Project Setting"
git log
  • git add . → 현재 디렉토리 하위에 있는 모든 내용물에 대한 변경사항을 기록
  • git statusgit add . 를 통해 변경된 내역(status)를 확인
  • git commit -m "Add: Django Project Setting" → 변경 내역에 대한 나의 코멘트 입력

(git status 아래에 출력되는 내용들이 변경사항)

정상적으로 commit 되었다.

이제 git log를 입력해보면,

commit의 log를 볼 수 있다.


Branch

Branch 생성

feature/crud 브랜치를 생성 & 이동

git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동 

# 생성과 동시에 이동하는 방법
git checkout -b 브랜치 이름


Application 생성

settings.py 설정 후 app 생성

$ python manage.py startapp app_name

products 라는 이름의 app 추가


settings.pyinstalled_apps 추가

# settings.py

INSTALLED_APPS = [
	...
	'products', 


Github Push

git add & commit

app을 추가하였으므로, 이에 대한 내용도 git에 commit 해주자

git add .
git commit -m "Add: products application"


Github repository branch push

이제 Github에서 repository를 생성한 다음 push할 수 있는 주소를 받아오면 된다.

이를 아래와 같은 명령어를 이용해서 적용시키면 된다.

git push origin "브랜치 이름"

생소한 코드가 좀 보이는데, 뜻은 아래와 같다.

  • git branch -M main - 저장소의 기본 브랜치(a.k.a. 마스터 브랜치)의 이름을 main 으로 변경
    (이유가 신기한데, master 라는 단어가 노예 제도를 연상시켜서라고 한다.)
  • git push -u origin main - main 브랜치를 Github에 push

그러면 위와 같이 Github의 내가 만든 repository에 push 된 것을 볼 수 있다.

위 사진이 완벽한 상태는 아니다. 내가 이미 아래와 같이 feature/crud 브랜치를 만든 후 beverages라는 appliaction을 생성 후 merge 시킨 상태이기 때문이다.

해당 코드는 아래와 같다.

아무튼, 이렇게 하면 장고 초기 세팅 끝!





Take Away

꾸준한 반복

처음엔 그냥 한번 따라해보고, 내가 이해한 것을 바탕으로 두번째 초기 세팅을 진행하면서 위와 같이 블로깅을 했다.
이제 한 세네번 정도 더 진행해보면서 순서에 대한 감을 익혀야 할 것 같다.


나중에..?

나중엔 진짜 수정 사항이 많이 생길텐데, 그럴때마다 push를 시켜주고 버전을 관리하려면 진짜 commit을 잘 적어야할 것 같다.
commit도 깔끔하게 적어야 좋은 개발자라고 하던데.. 갈 길이 멀다.





참고
https://forums.htmlhelp.com/index.php?showtopic=11390

profile
으악

0개의 댓글