Django 초기 세팅을 하는 이유는 여러가지가 있겠지만, 난 아래와 같이 생각하고 있다.
프로젝트 마다 별도의 가상 환경을 세팅해줘야 추후 충돌이 일어날 일이 없기에, 한 프로젝트를 시작하고자 할 때 반드시 새로운 가상 환경에서 시작해줘야 한다.
conda create -n "가상환경 이름" python=3.8
conda activate "가상환경 이름"
test1
이라는 이름의 가상환경을 miniconda
를 통해 생성
conda env list
를 통해 test1
서버가 있는 것을 확인했으니 구동
가상환경에서 사용해야하는 데이터베이스를 생성해야한다.
원래 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
라는 이름의 데이터베이스 생성
새로운 가상 환경을 만들때마다 Django를 다시 설치해줘야한다.
$ pip install django
# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient
pip install django
를 이용하여 장고를 재설치
pip install mysqlclient
를 이용해 가상 환경에 장고에서 지원하는 mysqlclient
를 다운받으려 했는데 오류가 떴다.
검색해보니 내 맥은 M1이라서 다른 명령어를 입력하여야 한다.
pip install PyMySQL
이제 test1
가상환경의 장고에서 mysql
을 사용할 수 있게 되었다!
이제 가상환경 안에서 장고를 이용하여 프로젝트를 진행할 수 있다.
$ django-admin startproject <project_name>
$ cd <project-directory>
프로젝트 폴더를 생성하고자 하는 경로로 진입 후, test_project
라는 이름의 프로젝트를 실행
아래를 보면 test_project
이름의 디렉토리가 생성된 것을 알 수 있다
Settings.py
설정누구나 접속가능하게 하기 위해 일단 모든 IP로 하여금 접속 가능하게 설정
ALLOWED_HOSTS = ['*']
지금 단계에선 admin(관리자) 기능과 authorization(로그인, 로그아웃) 기능을 쓰지 않을 예정이므로, APPS
와 MIDDLEWARE
에서 해당 코드를 주석처리
INSTALLED_APPS와 MIDDLEWARE는 서로 연동되는 것이 있어서 INSTALLED_APPS에서 어떤 기능을 끄고자 하면 MIDDLEWARE도 꺼줘야한다.
urls.py
변경아무것도 건들지 않은 상태의 urls.py
파일 모양은 아래와 같다.
그런데 우리는 위에서 admin 기능을 쓰지 않기 위해 주석처리를 하였다.
그러므로 오류를 방지하기 위해 아래와 같이 변경을 해주어야 한다.
my_settings.py
생성우리는 git을 위해 gitHub을 활용할 예정이다.
그런데 모든 데이터를 올려버리면 다른 사람도 우리의 코드를 볼 수 있다는 것이고, 그렇다면 민감한 정보들도 유출될 수 있다는 것이다.
그래서 my_settings.py
를 생성하여 민감한 정보만 따로 빼두고 관리할 것이다!!
정리하자면 아래와 같다.
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.py
↔ my_settings.py
연동setting.py
파일은 gitHub에 올라갈 예정인데, 중요 정보는 my_settings.py
에 빼둔 상태이다.
그렇다고 my_settings.py
에 적은 DATABASES
와 SECRET_KEY
를 삭제하면 장고가 인식을 할 수 없으니 별도로 import
시켜주면 된다.
# settings.py
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
...
DATABASES = DATABASES
SECRET_KEY = SECRET_KEY
원래는 DATABASES
와 SECRET_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
구동이 가능하게 되었다.
아래 명령어를 통해 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',
#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
)
이제 직접 서버를 돌려서 잘 작동하는지 확인해보자.:
python manage.py runserver
정상적으로 서버가 돌아간다!
생성한 장고 프로젝트를 git으로 관리할 수 있도록 초기화하는 작업
git init
명령어로 git 초기화git init
소스를 공유하기 위해 깃을 사용하지만 올리고 싶은것 올리고 싶지 않은것, 올려서는 안되는 것들이 존재하고,
이를 구분하기 위해 깃이 설치된 디렉토리에 .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에 업로드되면 안됩니다.)
git에 변경 내역 업데이트를 해주기 위해 아래와 같이 입력
git add .
git status
git commit -m "Add: Django Project Setting"
git log
git add .
→ 현재 디렉토리 하위에 있는 모든 내용물에 대한 변경사항을 기록git status
→ git add .
를 통해 변경된 내역(status)를 확인git commit -m "Add: Django Project Setting"
→ 변경 내역에 대한 나의 코멘트 입력(git status
아래에 출력되는 내용들이 변경사항)
정상적으로 commit
되었다.
이제 git log
를 입력해보면,
commit의 log를 볼 수 있다.
feature/crud
브랜치를 생성 & 이동
git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동
# 생성과 동시에 이동하는 방법
git checkout -b 브랜치 이름
settings.py
설정 후 app 생성$ python manage.py startapp app_name
products
라는 이름의 app 추가
settings.py
에 installed_apps
추가# settings.py
INSTALLED_APPS = [
...
'products',
app을 추가하였으므로, 이에 대한 내용도 git에 commit 해주자
git add .
git commit -m "Add: products application"
이제 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 시킨 상태이기 때문이다.
해당 코드는 아래와 같다.
아무튼, 이렇게 하면 장고 초기 세팅 끝!
처음엔 그냥 한번 따라해보고, 내가 이해한 것을 바탕으로 두번째 초기 세팅을 진행하면서 위와 같이 블로깅을 했다.
이제 한 세네번 정도 더 진행해보면서 순서에 대한 감을 익혀야 할 것 같다.
나중엔 진짜 수정 사항이 많이 생길텐데, 그럴때마다 push를 시켜주고 버전을 관리하려면 진짜 commit을 잘 적어야할 것 같다.
commit도 깔끔하게 적어야 좋은 개발자라고 하던데.. 갈 길이 멀다.