그룹프로젝트를 위해 백엔드 기본적인 세팅을 했다.
협업할 때 자주사용하는 git에 올려서는 안되는 내용이 올라가는걸 막아주는 파일이다. .gitignore
라는 파일 안에 무엇을 생략하고 올려면 좋을지 적으면된다.
그런데 뭘 올리면 안될지 모르겠으면 http://gitignore.io/ 이 사이트에서 자기가 쓰는 os환경, 프로그래밍언어 등을 작성하면 자동으로 무시할 리스트를 쫙 뽑아준다.
나는 장고를 통해서 프로젝트를 할 것이며, manage.py가 있는 디렉토리에 my_setting.py라는 파일을 생성해서 중요한 내용을 적을 것이니 .gitignore에 추가해줘야한다.
이미 이전에도 했던 사안이지만, 지금 내가 사용하지 않는 기능들을 주석처리해놓자.
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
APPS의 admin과 auth, MIDDLEWARE의 csrf, auth를 주석처리해놨다. (사용해야되는 사람들은 주석처리를 풀어야한다.)
admin기능을 주석처리했다면 이제 urls.py에 있는 admin 관련 코드들도 주석처리해주자.
#from django.contrib import admin
from django.urls import path
urlpatterns = [
# path('admin/', admin.site.urls),
]
장고 설정을 할 때 외부에서 내 서버에 접속할 때 CORS 에러가 발생할 수 있다.
장고에서의 CORS에 대한 설명은 아래 블로그들에 잘 설명되있다.
Django - 내 로컬 서버에서 외부접속 허용하기(corsheaders)
Django CORS 설정과 API 연동
먼저 장고에서 제공하는 CORS를 해결하기위한 패키지를 설치해야한다.
pip install django-cors-headers
설치가 완료되면 settings.py에도 정보를 추가해야한다. 앱이 설치되었으니 장고에게 알려줘야하고, 입출력제어를 해줄 수 있게 미들웨어에도 등록해줘야한다.
INSTALLED_APPS = [
...
'corsheaders',
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
]
마지막으로 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',
#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
)
requirements.txt
에는 해당 프로젝트가 어떤 프로그램이 몇 버젼의 프로그램으로 만들어졌는지 공유할 수 있다.
보통 프로젝트마다 가상환경을 따로 파서 하다보니 pip freeze 로 해당 가상환경에 설치된 프로그램들을 알 수 있는데, 여기에 pip freeze > requirements.txt
라는 명령어를 입력하면 해당 가상환경에 설치된 라이브러리 및 버젼을 기록한 requirements.txt
파일을 자동으로 생성해준다.
장고의 경우 위치는 manage.py가 있는곳에서 만들면 된다.
$ pip install -r requirements.txt
위의 코드로 requirements.txt에 저장되있는 pip 리스트를 인스톨 시킬 수 있다.
원래 settings.py에 장고가 제공해주는 데이터베이스와 sercet키가 있다. 하지만 settings.py은 git에 업로드되므로 비밀내용들은 따로 파일에 작성해줘야한다.
my_settings.py
라는 새로운 파일을 manage.py가 있는곳에서 만든다음에 감춰야될 정보를 적어주자
# my_setting.py
SECRET = {
'secret' : '시크릿키'
}
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': '데이터베이스명',
'USER': '데이터베이스 접속 계정명',
'PASSWORD': '데이터베이스 접속 패스워드',
'HOST': '데이터베이스 주소',
'PORT': '포트 번호',
'OPTIONS': {'charset': 'utf8mb4'},
'TEST': {
'CHARSET': 'utf8mb4',
'COLLATION': 'utf8_general_ci'
}
}
}
이런식으로 my_settings.py
에 따로 정보를 작성해놓으면 된다. 당연히 해당 파일은 .gitignore로 git에 올라가지않게 해줘야한다!
그리고 저 감춰둔 정보를 사용할 때는 settings.py
에서 import 하는 형식으로 사용한다.
# settings.py
import my_settings
SECRET_KEY = my_settings.SECRET['secret']
DATABASES = my_settings.DATABASES
원래 있던 DATABASES나 SECRET_KEY는 삭제할건 삭제하고 주석처리할건 주석처리하면 된다.