[django] 초기 setting (feat. mysql)

EMMA·2022년 3월 11일
0
post-thumbnail

드디어 django에 입성...🚀🚀🚀


Tutorial 앞부분까지 어찌어찌 울면서 하고 나서, 하면서 잘 몰라서 헤맸던 부분들을 미약하게나마 기록해둬야 복습 및 습득이 가능할 것 같아 기록한다.

p.s. 미니콘다/mysql 관련해서는 별도로 간단하게 정리 예정

0
How we define 'web framework'

framework란 어플리케이션 표준 구조를 구현하는 클래스와 라이브러리의 모임으로, 웹 개발을 쉽게 하도록 돕는다
django는 파이썬 기반의 프레임워크이며, 웹 서버를 구현하기 위해 사용된다 (코드 재사용, 데이터베이스 연동 등)

1
django setting

conda / mysql / zsh 등은 사전에 깔았고, 항상 가상환경을 먼저 생성해야 한다. (처음에 이에 대한 개념이 잡히지 않아 삽질함. Psj님 블로그 참고)

conda create -n "home_project" python=3.8

그리고 나서 activate 하면, 내가 만든 home_project에 입성하면서 (base)가 (home_project)로 바뀜

conda activate "home_project" 

이제 database를 생성해야 하는데, 자꾸 my sql -n root -p 를 입력하니 에러가 뜨고... 구글링 해보니 비밀번호 문제인데 문제는 어떻게 해도 해결이 안됨. 패스워드 없이 해도 에러, 패스워드 입력해도 에러, 재설정하려고 use mysql 들어가도 에러...(하...)
그러다가 로그인/패스워드 오류는 무시하고 enter 누르면 된다는 을 보고 일단 똑같은 방식으로 무시하기 시전했다.

mysql -u root -p 		#일단 이건 무시하고 아래만 작성
mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci;

그런데 이렇게 해도 결국엔 vs code 작성 단계에서 또 막힘. (ha...)
mysql 세부 명령어들은 Version마다 다르다는 사실을 깨닫고, version 8에 맞춰 다시 검색해서 비번 reset 시도했으나 실패.
stakeoverflow 답변 대로 해봤으나 또 실패.
결국 그 다음날 멘토님께 가서 조언을 구해 받은 링크로 시도해봤지만 또 실패.
링크로 다시 해봤으나 또 실패. 동기가 다른 자료를 추가로 보내줬으나 애초에 로그인을 해야 그 다음 솔루션으로 넘어갈텐데, 로그인이 안되니 현재 내가 주어진 시간 내에선 해결되지 않았다. 그래서 결국 mysql 삭제하고, 다시 install해서 비번 설정하기로.

  • mysql 삭제 방법: 여기
  • mysql은 brew를 통해서 다시 설치하였음

각설하고, 다시 로그인한 후 database를 생성했다.

mysql -u root -p 

#password 입력 후 아래와 같이 작성 
mysql> create database NAME(db명) character set utf8mb4 collate utf8mb4_general_ci;

결과 화면은 아래와 같다.

다음으로는, django 패키지 설치하면 된다.

pip install django
pip install mysqlclient

그 다음엔 django project 생성.

django-admin startproject westarbucks
cd westarbucks

이렇게 하면, 아래와 같이 이동된다.

이제 vs code를 통해 Settings.py를 수정해보자.
(ip 허용 - allowed_hosts = ['*'] / admin, auth,csrf 주석처리)

#ip 허용 
ALLOWED_HOSTS = ['*']

admin 주석처리 했으므로, urls.py에 가서 마찬가지로 admin.site.urls 삭제.

path('admin/', admin.site.urls), 	#삭제하기 

그 다음, 중요한 환경 변수들을 따로 관리하기 위해 home_projcet 디렉토리에 my_settings.py 파일 생성.

cd westarbucks
touch my_settings.py

실행하면, terminal에 아래와 같이 나오고 vs code에서도 my_settings.py이 생성된 것을 확인할 수 있다.

그 다음, my_settings.py에 secret key와 database 정보를 옮기면 된다. (gitignore 등을 통해 별도 관리 가능)

이제 다시 my_settings.py의 내용을 settings.py와 연동시켜야 한다.

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

...

DATABASES = DATABASES
SECRET_KEY = SECRET_KEY

이제 다시 terminal로 가서 corsheaders 를 설치한다.

pip install django-cors-headers

vs code를 다시 열고, settings.py에서 corsheaders를 추가한다.

INSTALLED_APPS = [

...
    'corsheaders'
]

middleware도 추가 :)

MIDDLEWARE = [

...
'corsheaders.middleware.CorsMiddleware',
...
]

아래와 같이 추가 설정도 잊지 않기.

##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',
)

마지막으로, / 관련 에러 제거까지 settings.py에 추가해 준다.

APPEND_SLASH = False

이제 가상환경에서, 아래와 같이 실행하면 서버 연결 완료

python manage.py runserver

결과 화면은 아래와 같다.

중요한 point는, 어떤 프로그램을 설치하건 서버에 연결하건, 맞는 path에서 실행하고 있는가? 를 잘 생각해야 한다. 이거 때문에 생각지 못한 오류가 나고, 나 같은 경우도 home_practice 라는 가상환경에서 westarbucks 디렉토리를 잘 만들어놓고 엉뚱한데서 python manage.py runserver를 돌렸다가 다시 수포로 돌아간 줄 알고 가슴이 철렁했다...
(pwd로 현재 내 위치 수시로 확인하기!!!)

2
github push & pull

가상환경 > westarbucks에서 (manage.py가 있는 곳) git을 초기화 한다.

git init

이제 아까 생성했던 my_settgins.pygitignore 처리한다. 보안 관련 파일들은 github에 올라가면 안되기에. database 정보와 환경변수 들어간 my_settings.py는
https://www.toptal.com/developers/gitignore 로 가서 해당 키워드를 추가한 후, .gitignore 파일에 넣을 내용을 create 한다.

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

create되면, 다시 Terminal로 돌아와서 .gitignore 를 만든다.

cd westarbucks (프로젝트 폴더명)
touch .gitignore
vi .gitignore

그러면 .gitignore 에서 create한 내용 등을 추가한다.

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

# 가장 하단 my_settings.py 추가하기
my_settings.py

add & commit을 마저 실행한다.

git add .
git commit -m "Add: Django Project Setting_home practice"

3
branch & application 생성

아래와 같이 branch를 생성한다.

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

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

아래는 실행 결과.

이제 products라는 application을 추가해 보자.
westarbucks 디렉토리에 가서, 아래와 같이 적는다.

python manage.py startapp products

settings.py에 가서 application이 추가 되었음을 알린다.

# settings.py

INSTALLED_APPS = [
...
    'products', 
]

여기까지 완료되었으면, github에 push 하면 된다.
먼저 github에 new repository를 생성하고, 해당 주소를 받아 둔다.

그리고 terminal에서 다시 products 라는 app을 더한 것을 add & commit 한다.

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

이제 git-github을 연결하고 동기화 작업하면 끝.

git remote add origin https://github.com/mquat/django_assignment.git
git push origin "home_practice" (위에서 생성한 branch 이름) 

아래는 최종 github 화면 결과.

4
Appendix: wsgi & asgi (feat. 동기 vs 비동기)

user < web server < web application < database 가 일반적인 process 이나, 보통의 웹사이트는 python으로 이뤄져 있지 않기 때문에 django와 web server를 연결하려면 또 하나의 절차가 필요하다. 그것이 wsgi와 asgi.

  • wsgi: web server gateway interface
  • asgi: asynchronous server gateway interface

wsgi 는 Http의 request-response 형태에 맞춰져 있고, asgi는 여기에서 더 나아가 send-receive 형태에 맞춰져 있다. 그래서 보통 asgi는 비동기적으로 이벤트 처리를 할 수 있다고 말하는데, 동기/비동기란:

  • 동기적(synchronous): 요청과 결과가 동시에 발생
    • 노드 A - 노드 B 간 transanction을 동시에 맞춘다
    • response를 받을 때까지 다른 작업 불가능
    • e.g. A가 B의 계좌로 1백만원 송금하기
      (A와 B의 계좌는 request-response를 처리한 후, 동시에 1백만원의 증가와 차감이 각각 발생함)
  • 비동기적(asynchronous): 요청과 결과가 동시에 발생하지 x
    • transaction을 동시에 맞추지 않아도 됨
      (순차적으로 진행될 필요 없으므로, 당연히 동시에 종료될 필요도 없다)
    • receive까지 다른 작업을 할 수 있음 (효율성 up)
    • e.g. Javasript에서 setTimeout() 함수
      https://jindev-t.tistory.com/90
profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글