[Django] instagram clone 회고(1)

토닉·2021년 5월 7일
0

Django

목록 보기
5/6
post-thumbnail

1. 장고 초기 설정
2. user app 생성
3. signup 기능 구현
4. login 기능 구현

:: 장고 초기 설정

장고 초기 설정은 크게 3부분으로 구분했습니다.

  1. 프로젝트 환경 구성
  2. DB 연결
  3. my_settings 생성 , settings

1. 프로젝트 환경 구성

가상환경: miniconda

  • 파이썬 가상환경 관리 툴로 패키지들의 의존성을 관리하기 쉽게 해줍니다.

언어: python == 3.8

DB: Mysql

  • python package : mysqlclient == 2.0.3
    python과 MySQL을 연결시켜주는 라이브러리

FrameWork: Django == 3.2.1

  • 파이썬 웹 프레임 워크

Packages

  • httpie : http 개발이나 디버깅 용도

  • jwt : Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token

  • bcrypt : 암호 해시 함수 / 레인보우 테이블 공격 방지를 위해 솔트를 통합

설치하는게 생각보다 많고 쓰임도 다양해서 어디부터 해야될 지 고민했습니다.
우선 vscode 대신 linux 명령어와 vim을 사용하면서 아직은 불편하지만 터미널에 친숙해지기 위해 노력했습니다.

가상 환경을 사용하는 이유

개발을 하면서 수많은 프로젝트를 진행하게 됩니다. 프로젝트마다 필요한 패키지, 프레임워크, 언어가 다른 환경으로 개발할 수 있습니다. 그 때마다 모든 환경을 직접 설치하는 과정을 줄이기 위해 가상 환경을 사용하게 됩니다. 가상 환경은 말 그대로 가상의 환경들을 한 컴퓨터에 여러개 저장하여 프로젝트에 맞게 지정하고 사용할 수 있습니다.
연극을 예시로 들어봅시다. 연극에서는 한 컷마다 가구의 위치, 배경, 소품 등이 바뀝니다. 한 컷을 프로젝트, 가구와 배경 소품을 프로젝트에 필요한 패키지, DB, 프레임워크 등이라고 생각하면 됩니다.

2. DB 연결

DB는 MySQL을 사용합니다. python 패키지중 pythonclients를 통해 MySQL에 접근할 수 있습니다.

mysql 서버 접속: mysql -u root -p

my_settings에 입력한 비밀번호로 접속

# DB 생성
sql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;

# DB 생성 확인
sql> show databases; # 내가 입력한 db명이 있으면 생성 완료

Django 에서 DB와 연결해주는 ORM

장고는 models.py의 class 객체를 ORM을 통해 DB의 table로 바꿔줍니다.
ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다.
장점
SQL의 절차적 접근이 아닌 객체적으로 접근할 수 있다.
재사용 및 유지보수의 편리성 증가
프로그램 구조가 데이터 구조에 영향을 덜 받는다.(종속성이 줄어든다)
단점
프로젝트의 복잡성이 높아질 경우 난이도가 올라가고 설계가 어려워진다.

3. my_settings 생성 , settings

django로 프로젝트를 생성하면 자동으로 settings.py가 생성됩니다. 이 파일에는 보안에 관련된 내용들이 있기 때문에 이를 외부에서 볼 수 없게 해야 합니다. 예를 들어 DATABASES, SECRET_KEY가 있습니다.

# my_settings.py

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DATABASE 명', # mysql에서 만들 DB 명
        'USER': 'DB접속 계정명', # root
        'PASSWORD': 'DB접속용 비밀번호', # 10자리 이상 영어,대소문자,특수문자
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

SECRET = '시크릿키' # settings.py 에 있던 키 문자열

DATABASE에는 DB접속 계정, 비밀번호 등 보안에 민감한 내용들이 있기 때문에 위처럼 my_settings.py에 저장한 후 .gitignore를 통해 외부의 접근을 차단합니다.
그리고 settings.py에서 위 파일을 import하여 정보를 숨길 수 있습니다.

# instagram/settings.py

from my_settings import SECRET, DATABASES

SECRET_KEY = SECRET # 보안 키는 my_settings에 저장 후 import

DATABASES = DATABASES # database 접근은 my_settings에 저장 후 import
profile
우아한테크코스 4기 교육생

0개의 댓글