프로젝트 초기 설정(Project intial setting for team project)

1
post-thumbnail

Project initial setting

우리가 프로젝트를 하며 협업을 하면서 혹은 개인이 전부 프로젝트를 하더라도 깃허브에 올라가지 말아야 할 파일들이 있다.

프로젝트를 시작하기 위한 초기 셋팅에 대해 알아보자.

🚀 What You Will Learn

✔️ 가상환경 및 패키지 설치 & Django project 생성

✔️ Django project setting

✔️ 모든 설정을 혼자서 처리하고, 깃에 배포 하기.

✔️ Cors 에러를 알아보고, 적용하기.

> 가상환경 및 패키지 설치

가상환경과 파이썬 패키지가 설치되어 있다는 가정하에 알아보자.

필자는 미니콘다라는 가상환경을 설치하엿고, 가상환경 내에서 django, cors-header,DB 관리를 위해 mysql, mysqlclient를 설치해주었다.

1. 가상환경 및 패키지 설치 & Django project 생성

가상환경 및 패키지 설치 & Django project 생성

가상환경 생성 및 활성화

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

conda activate "가상환경이름"

가상환경명은 프로젝트 명으로 통일하는 것이 컨벤션이다.

기타 conda 명령어

# conda 비활성화
conda deactivate

# conda 가상환경 목록 보기
conda env list

# conda 가상환경 삭제
conda env remove -n "가상환경이름"

# 가상환경 익스포트 (배포용 yaml만들기)
conda env export> "가상환경이름.yaml"

# 익스포트한 가상환경 임포트
conda env create -f "가상환경이름.yaml" 

Python package 설치

$ pip install django

$ pip install django-cors-headers


# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient
  **(중요)**[mysql 부터 설치!!]

가상환경과을 설치하였으니 그 안에 패키지를 설치해주자. 프로젝트를 만들 django와 db관리를 위한 mysql, mysqlclient 그리고 cors까지 설치해주자.

CORSCross-origin resource sharing의 줄임말으로써 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다.

Django project setting

프로젝트는 보통 하나의 웹사이트를 말한다.
한 프로젝트(웹사이트) 안에는 다양한 기능들이 있는데, 그 기능을 앱(app)으로 관리한다.

$ django-admin startproject project_test .

project_test/ 
		manage.py
		project_test/
				__init__.py
				settings.py
				urls.py
				asgi.py
				wsgi.py

프로젝트 이름 뒤에 한칸 띄어준후 .을 붙이면 프로젝트 이름의 폴더를 하나만 만들어준다.

### 폴더트리 설명

- outer `mysite` : a container for my project. 이름 마음대로 바꿔도 됨. firstsite 로 바꿈.
    - `manage.py` : Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인의 유틸리티
    - `mysite/` : 프로젝트를 위한 실제 python 패키지들이 저장됨.
        - `__init__.py` :.. **init**... python에게 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일.≠
        - `settings.py` : 현재 Django 프로젝트의 환경 및 구성을 저장함.
        - `urls.py` : 현재 Django project의 URL 선언을 저장. Django로 작성된 사이트의 목차라고도 할 수 있음. settings.py 안에 있는 ROOT_URLCONF에 settings/url.py에 하겠다고 선언해두었기 때문.
        - `asgi.py` : 현재 프로젝트를 지원하기 위한 ASGI 호환 웹 서버의 진입점(entry-point). 뭔지 잘 모르겠음. - (django는 비동기를 지원하지 않았기에, 해당 기능을 사용하고자 할 때 사용)
        - `wsgi.py` : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점.
            - 웹 서버 게이트웨이 인터페이스 (django를 사용하지 않고 파이썬으로 사용하게 되면 직접 설정해줘야 함.
            - 두 파일이 있어야 web server로서 동작할 수 있음.

개발 서버 작동 확인

cd project_test # project_test 디렉토리
python manage.py runserver # ./manage.py runserver도 됨

서버를 활성화한 뒤 브라우저에 http://127.0.0.1:8000/ 입력해서 접속. 서버 작동시 터미널에서 아래와 같이 나오면 성공

혹은 눈으로 확인이 필요하다면, 공식문서 장고 tutorial와 같이 브라우저에 접속했을 때, 아래와 같이 뜨면 성공.

> Django project setting

git 이 무시할 파일인 git ignore 파일을 설정하고 보안을 위해 my settings.py새로 만들어 관리하자 (MY SQL , SECRET KEY etc..)

.gitignore 설정

소스를 공유하기 위해 깃을 사용하지만 올리고 싶은것 올리고 싶지 않은것, 올려서는 안되는 것들이 존재합니다. 그래서 .gitignore파일에 그것들을 넣어서 관리 할 수 잇다. 편하게 만드려면 https://www.gitignore.io/ 여기 사이트에서 해당 환경에서 사용하는 키워드를 입력해주면 자동으로 파일을 정의할 요소를 생성해준다.

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

아래 두가지 추가
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)
*.csv (crwaling한 파일 역시 업로드하지 않습니다.)

보안을 위한 my_settings.py생성

장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아닙니다. 별도의 파일 혹은 환경변수로서 관리하는게 좋습니다. 즉, 기본 프로젝트 내의 settings.py를 그대로 이용하고 거기에 기록되는 것은 지양해야 한다는 것이다. 그러면 따로 관리할 세팅 파일을 만들어보자 아래의 예시처럼 setting.py를 따로 만들어관리 할 수 있다.

cd '생성한 프로젝트 폴더명'
touch my_settings.py


DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DATABASE 명',
        'USER': 'DB접속 계정명',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '실제 DB 주소',
        'PORT': '포트번호',
    }
}

SECRET = '시크릿키'

위와 같이 입력하여 시크릿키와 db를 따로 분리하여 공유가 되지 않도록 해준다.

그 다음으로cors에 대한 처리를 원할하게 도와줄 django-cors-headers 플러그인을 설치한다.

pip install django-cors-headers
# settting.py내에서 app을 넣어준다.
INSTALLED_APPS = [
...
		'corsheaders'
]
# MIDDLEWARE 에도 추가
MIDDLEWARE = [
	...
		'corsheaders.middleware.CorsMiddleware',
	...
]

마지막으로 허용할 값을 정의해준다.

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

Admin을 쓸 때는 내둬도 되지만 현재는 쓰지 않을 예정이므로 사용 하지 않는 요소에 대해서는 주석처리를 해주자.

![스크린샷 2020-12-13 오후 2.02.10](/Users/byul/Desktop/스크린샷 2020-12-13 오후 2.02.10.png)

my_settings.py DATABASE 설정을 settings.py에 적용해주자.

import my_settings
DATABASES = my_settings.DATABASES

깃에도 공유하지 않을 예정이므로 .git ignore 파일에도 등록할 것

requirements.txt 생성

팀 프로젝트를 하면서 코드를 공유 받는 팀원도 동일한 환경을 구성할 수 있도록 정보를 주기 위해 requirements.txt를 생성한다. 현재 로컬 환경에 설치된 파이선 모듈 정보를 담아서 파일을 생성해주자 .

pip freeze > requirements.txt

> DB연동하기

아래 명령어를 사용시 mysql server가 컴퓨터 재부팅과 상관없이 서버가 켜져있도록 설정 할 수 있다.

brew services start mysql

데이터 베이스 생성

$ mysql.server start <-- 서버 키기

$ mysql -u root -p <-- -u 옵션 접속할 사용자 아아디 명시(root사용자)/ -p 비밀번호 직접 입력 옵션

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

<= 데이터 베이스 생성

데이터 베이스를 생성했다면 아까 my_settings.py에 들어가서 만든 데이터베이스명을 넣어주고 연동을 시켜주자.

mysql포트번호는 일반적으로는 3306이다. host에는 DB주소를 적으니 우리는 로컬에서 작업 할거니 127.0.0.1 이런 식으러 적어줘도 무방하다.

profile
문과생 개발자되다

1개의 댓글

comment-user-thumbnail
2020년 12월 13일

한별님 한달 수고하셨고, 1차 프로젝트 화이팅하세요!! :)

답글 달기