Mini Project | westagram Kick off

Hyeonju L.·2020년 12월 6일
1

Project

목록 보기
1/8
post-thumbnail

"westagram" API 시스템 구현


지금까지 Django Web Framework를 사용해 기초 API를 만들어보았다(아래 Django application의 노란색 부분). 이제 미니버전의 인스타그램인 "westagram" 구현을 통해 API개발의 핵심 구조와 개념을 숙지하고 QuerySet API에 익숙해지자!

1. 학습목표

  1. 회원가입 및 로그인 기능 구현을 통해 데이터베이스에 데이터를 저장하고 불러올 수 있다.
  2. 게시물 업로드, 게시물 보여주기, 댓글 달기 및 보여주기를 통해 POST/GET 통신을 처리할 수 있다.
  3. 기본적인 Git flow를 이해하고 GitHub을 통한 코드리뷰 방식을 이해하고 참여한다.
  4. 코딩 컨벤션을 지켜 가동성 높고 협업에 도움이 되는 코드를 작성할 수 있다.

2. Git Flow

git clone 'github 주소'
git branch feature/signup 	# git branch 생성, 앞에 feature를 넣는 이유는 branch는 기능 별로 구현하기 때문에
git checkout feature/signup	# 만든 branch로 이동, 파일 만들거나 코드 수정 시 메인이 아닌 feature branch에만 반영 됨
git add .
git commit -m "메시지"		# 내가 작업한 내용 기입 
git push origin feature/signup	# origin 컴퓨터에 내가 만든 branch 생성 / main으로 push하면 내가 만든 작업물이 버그가 있어도 바로 적용되기 때문에 main으로 push하지 않음.
PR(pull request) 만들어 review 요청 (github site에서 작업)
- 만일 수정이 필요하면 다시 git commit
  • ref.
    merge는 내가 한 작업을 main과 합치는 것(main으로 push)
    origin, remote 등은 GitHub컴퓨터(사이트)를 의미한다고 생각하면 됨

  • git clone은 처음만 하는 거고, 한번 한 이후에는 pull하면 된다

	git pull origin main
  • 내가 branch에서 작업한 내용이 main으로 merge된 경우 다시 pull해야 함
    : 내 컴퓨터에서는 초기 main 내용만 인지하고 있기 때문에 update된 main 상태를 알려줘야 한다.

3. 팀프로젝트를 위한 Django initial setting

1) 가상환경 및 패키지 설치, Django PJT 생성

conda create -n westagram python = 3.8	# 가상환경 생성
conda activate westagram		# 가상환경 활성화

pip install django			# 가상환경에 django 설치
django-admin startproject wecode	# 프로젝트 생성(프로젝트명: 위코드)

2) 기본설정

  • .gitignore 설정
    소스 공유를 위해 git을 이용하지만 올려서는 안되는 것들이 존재한다. 이를 위해 .gitignore파일을 관리해야 한다.
    # 프로젝트 폴더 내 .gitignore 파일 생성

    touch .gitignore
    vi .gitignore

.gitignore에 들어가는 내용은 gitignore.io라는 웹사이트에 접속해서 vscode, Pycharm, Python, Django 등을 선택하고 생성된 내용을 전체 복사해서 붙여넣기 하면 된다.

그리고 하나 더 추가해야할 사항이 있는데, 보안과 관련된 my_settings.py 도 git에 공유되면 안되기 때문에 Django 영역의 하위 부분에 추가할 것!

  • my_settings.py 생성
    장고 설정(기본 settings.py)에 들어있는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아니다. 따라서 별도의 파일로 관리하는 것이 좋다.
   # 프로젝트 폴더 내 my_setting.py 파일 생성 및 내용 작성
   DATABASES = {
   	'default' : {
    	'ENGINE' : 'django.db.backends.mysql',
        'NAME' : 'DATABASE 명',
        'USER': 'DB접속 계정명',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '실제 DB 주소',
        'PORT': '포트번호',
    }
   }

   SECRET = '시크릿키'  		# 시크릿키는 settings.py 에서 가져오기
  • settings.py 수정
# 경로: westagram/settings.py

import my_settings			# my_settings.py 내용 import

SECRET_KEY = my_settings.SECRET		# my_settings.py 내용에 있는 secret key 참조

AllOWED_HOSTS = ['*']

INSTALLED_APPS = [
	# 'django.contrib.admin',
    	# 'django.contrib.auth',	# 필요없는 것 주석처리
        ]

MIDDLEWARE = [
	# 'django.middleware.csrf.CsrfViewMiddleware',
       	# 'django.contrib.auth.middleware.AuthenticationMiddleware',	# 필요없는 것 주석처리
        ]

DATABASES = my_settings.DATABASES	# my_settings.py 내용에 있는 데이터 참조
  • corsheaders
    django-cors-headers는 Cross-Origin Resource Sharing(CORS)에 요청되는 server headers를 다루기 위한 Django app이다. CORS header를 추가하는 것은 다른 도메인으로부터 내 resource에 접속 가능하도록 허용하는 것(Cross domain)

- cors에 대한 처리를 도와줄 플러그인 설치

pip install django-cors-headers		

- settings.py 수정

# INSTALLED_APPS 안에 내용 추가
INSTALLED_APPS = [
	'corsheaders',
    	...
        ]

# MIDDLEWARE 안에도 내용 추가
MIDDLEWARE = [
	'corsheaders.middleware.CorsMiddleware'
    	...
    	]


# 하단에 아래 내용 추가(허용할 값 정의)

#REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False

##CORSsettings.py 
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 생성
    팀프로젝트를 진행한다는 것은 서로 공유되는 코드를 작성한다는 것을 의미한다. 따라서 모두 동일한 환경에서 코드를 작성하기 위해 정보를 전달해야 한다. 이를 위해 필요한 것이 바로 requirements.txt
# pip free의 결과를 requirements.txt에 기록

pip freeze > requirements.txt

3) MySQL 설치 및 Database 생성

mysql server start
mysql -u root -p	# MySQL 서버 접속

# 데이터베이스 생성
mysql > create database westagram(데이터베이스명) character set utf8mb4 collate utf8mbr_general_ci;

# Django, MySQL 연결 확인
python manage.py migrate
profile
What you think, you become. What you feel, you attract. What you imagine, you create.

0개의 댓글