Django Project Setting(Server & Database) + Errors

김기현·2022년 2월 10일
1
post-thumbnail

이 포스팅에서 실제 프로젝트의 진행을 위해 필요한 설정 정보(settings.py)와, 데이터베이스(mysql)를 연동하고 Git 을 통해 초기 세팅과 프로젝트를 관리하는 방법을 다루어보겠습니다. (+ runserver error를 해결한 방법)

세팅 방법은 회사마다, 프로젝트마다, 선호하는 방법에 따라 다 다르기 때문에 정답은 없습니다.

Django Project 초기 세팅

가상환경 생성

해당 루트에 가상환경을 생성합니다.

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

데이터베이스 생성

터미널에 mysql을 실행하고 데이터베이스를 만듭니다. utf8mb4은 utf8의 서브셋으로 한글이나 일본어, 이모지 같은 비 라틴계 언어들에 대해서 조금 어색한 정렬 순서들이 존재하기 때문에 utf8mb4_unicode_ci를 사용하는 것을 추천합니다.

$ mysql -u root -p

mysql> create database 이름 character set utf8mb4 collate utf8mb4_general_ci;

mysql> show databases;로 데이터베이스가 잘 생성되었는지 확인합니다.

Python Package 설치

Django package 설치

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

$ pip install mysqlclient
# mysql 설치되어 있는지 먼저 확인!

mysqlclinet 설치

pip install django

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

Django Project 생성

원하는 위치에 다음과 같이 입력합니다.

django-admin startproject config .

cd westarbucks

위의 코드는 config라는 프로젝트를 생성하는데 상위의 config 껍데기 폴더(config 프로젝트를 담는 폴더)를 만들지 않고 프로젝트를 만들라는 의미입니다.

Settings.py 생성

IP 허용

(배포모드 말고 개발모드에서) 모든 ip를 허용합니다.

ALLOWED_HOSTS = ['*']

주석처리

그리고 장고가 기본적으로 제공하는 admin, auth를 사용하지 않기 때문에 다음과 같이 주석처리 합니다.

그리고 해당 위치를 사용하지 않기 때문에 urls.py도 또한 수정합니다.

from django.urls import path

urlpatterns = [
    # path('admin/', admin.site.urls), # 또는 삭제
]

중요한 키 감추기

깃으로 관리를 하게 될텐데 프로젝트의 중요한 값들은 따로 환경변수(env)를 설정해주어서 관리를 해야 합니다. 아니면 눈뜨고 코 베이징~
아래는 별도의 참조용 파이썬 파일(secret.py)을 생성해서, 참조하는 방법입니다.(해당 폴더에서 작업합니다.)

touch secret.py

secret.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 를 사용합니다.

settings.py ↔ my_settings.py 연동

from my_settings import DATABASES, SECRET_KEY

...

DATABASES = DATABASES

SECRET_KEY = SECRET_KEY

M1은 mysql세팅을 위해 다음과 같은 코드를 추가로 입력합니다.

pip install PyMySQL

pymysql package 설치 후 settings.py에 추가

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

import pymysql

pymysql.install_as_MySQLdb()

corsheaders 설치

웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조입니다. Django 로 REST Api 를 만들었는데 Front 연결을 해야할때 설정을 해주지 않으면 CORS 오류가 납니다.

  • corsheaders 설치
pip install django-cors-headers
  • settings.py에 INSTALLD_APPS 추가하기
INSTALLED_APPS = [

...
    'corsheaders'
]
  • middleware 추가
MIDDLEWARE = [

...
'corsheaders.middleware.CorsMiddleware',
]
  • CORS 추가 설정
    settings.py 마지막 단에 추가합니다.
##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에 추가합니다. url 라우터를 작성할 때 / 관련 경고를 무시하도록 합니다.
APPEND_SLASH = False

서버 실행

다음의 코드로 서버를 실행합니다.

python manage.py runserver

가상환경에서 들어간 후 서버가 잘 실행되었다면 다음의 화면이 나옵니다.

서버 실행 오류

하지만 저같은 경우는 서버로 연결할 부분을 찾지 못하고 다음의 에러를 내뱉었는데요🥶

  File "manage.py", line 17
    ) from exc
         ^
SyntaxError: invalid syntax

이같은 오류는 보통 다음의 경우에서 발생합니다.

  1. 가상환경이 실행되지 않았거나
  2. 가상환경에 장고가 설치되어있지 않거나
  3. M1 프로세서를 사용하거나..
    4. conda로 장고를 설치했거나!

따라서 다음과 같이 해결합니다.

  1. 가상환경이 실행되지 않았거나
    --> 가상환경 실행합니다.
conda activate 환경이름
  1. 가상환경에 장고가 설치되어있지 않거나
    --> 가상환경에 장고를 설치합니다.
pip install django
  1. manage.py와 폴더위치가 수평일 때가 아니거나

  2. 그래도 안된다면 아마 M1 프로세서를 사용하거나..?
    --> 특히 M1을 사용할 때 서버를 찾지 못하는 경우가 많습니다. 다음의 과정을 따라오세요.

1) conda 환경에서 pipenv shell을 입력합니다.
사진과 같이 가상환경이 제작됩니다.

pipenv 환경은 conda와 비슷한 환경으로 프로젝트별로 관리하는 '버블'이라고 생각하면 편합니다.

2) pipenv 환경에서 conda 가상환경을 실행합니다.
3) (리눅스 터미널 명령어)ls로 manage.py가 보이는 위치까지 이동합니다.
4) 그리고 pipenv 환경에 conda 가상환경이 실행된 환경에 장고를 설치합니다. 그러면 (pipenv 환경이름) (콘다 환경이름)으로 표시되고 여기서 작업합니다.

이 단계를 잘 따라오면 아마 서버가 잘 실행될거에요.. (안 된다면 댓글 부탁드립니다.)

중요!
컴퓨터 전원을 끄거나, 환경에 나가는 등 프로젝트에서 완전히 나간 상태라면 다시 실행할 때 pipenv shell로 들어와 conda 가상환경을 activate해줍니다!!! 순서를 지켜주세요!

그런데 말입니다....
conda install django 하셨습니까.....?
pip install django를 하니 멀쩡하게 잘 돌아갑니다... 이때까지 conda로 장고를 설치해서 오류가 났고 pipenv를 사용했는데, pip으로 설치해야겠습니다. 아니면 팀프로젝트할 때 팀원들의 installing 항목을 일치시킬수도 없고, 팀원들도 저의 세팅을 맞추기 힘들 수 있습니다...!

pipenv shell 			# pipenv shell 환경에 접근 후

conda activate 환경이름	  # conda 환경에 접근합니다.

데이터베이스 관련 오류

서버를 실행하면 mysql 오류가 나오는 분이 간혹 있었습니다.

1. ERROR 1045 (28000): Access denied for user 'root@'localhost' (using password: NO)

사용자의 비밀번호가 없을 경우 나타나는 오류 문구로, 아래 해결 방법에 있는 명령어들 중 하나를 선택해 입력합니다.

해결방법

  1. mysql -u 사용자
  2. mysql -u 사용자 -p 비밀번호
  3. mysql -u 사용자 -p
    Enter password : 비밀번호 입력

2. ERROR 1045 (28000): Access denied for user 'root@'localhost' (using password: YES)

사용자의 비밀번호가 틀렸을 경우 나타나는 오류 문구, 아래 해결 방법에 나와있는 명령어들을 입력합니다.

해결방법

mysql > use mysql
mysql > update user set password=password('비밀번호') where user='사용자'; // 비밀번호 변경
mysql > flush privileges; // 변경사항 적용

비밀번호 재설정

만약에 비밀번호를 잊어버렸을 경우 아래의 방법대로 진행하면 됩니다.

mysqld --skip-grant // 인증 없이 mysql 진입

위의 유형 2번처럼 비밀번호 재설정으로 완료합니다!

짜잔!

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글