Framework/Django

[DRF] 회원가입 로그인 기능 구현하기(1)

Jonnie 2022. 3. 26. 16:15

Django REST Framework를 활용한 회원가입 로그인 API를 구현하고자 한다.

우선 첫 번째로는 프로젝트 생성 및 DB 연결과 같은 기본 세팅을 진행하고자 한다.

 

1. 프로젝트 생성 및 env 파일 생성

 

1) 가상환경 생성 (venv, virtualenv)

 

가상환경은 왜 필요할까?

가상환경에서 설치된 외부 라이브러리들은 별도의 개발 환경에서 동작하는 것으로 다른 파이썬 프로그램에 영향을 주지 않을 수 있다.

외부 라이브러리들은 의존성을 지닌 경우가 많은데 이로 인해 버전 등으로 인해 충돌이 일어날 수 있다.

이에 파이썬 라이브러리들이 독립된 가상환경을 통해 충돌을 일으키는 것을 방지하기 위해 가상환경을 사용한다.

 

작업할 폴더를 설치한 뒤, VSCode에서 열어준다.

그 후 터미널을 열고(Ctrl + `)  아래 코드를 입력하여 가상환경을 생성한다. (myvenv는 가상환경 폴더명이므로 변경해도 무관하다)

python -m venv myvenv

Mac의 경우 오류가 날 수 있는데 그럴 때는

python3 -m venv myvenv

이렇게 작성해주면 된다.

 

설치 후에는 가상환경을 켜주면 된다.

source myvenv/Scripts/activate  #Windows
source myvenv/bin/activate  #Mac

가상환경이 정상적으로 켜지면 터미널에서 (myvenv)와 같이 켜졌음을 확인할 수 있다

 

2) Django, DRF 설치

프로젝트를 위해 필요한 Django와 DRF의 패키지를 설치한다.

설치는 아래 코드를 터미널에 입력하여 가능하다.

pip install django
pip install djangorestframework
pip

파이썬으로 작성된 패키지 소프트웨어를 설치 및 관리하는 패키지 관리 시스템이다. (cf. javascript - npm)

 

3) 프로젝트 및 앱 생성

 

프로젝트이름 부분에는 본인의 프로젝트명으로 바꾸어 넣는다.

django-admin startproject 프로젝트이름

프로젝트를 생성하면 동일한 이름으로 이중폴더가 생성되는데 가장 바깥쪽(상위) 폴더의 이름을 변경하는 것을 추천한다. (settings.py, __init__ 있는 폴더 건들면 안 됨) 프로젝트 이름과 헷갈릴 가능성을 줄일 수 있다.

 

cd 프로젝트상위폴더

기존 작업하던 위치에서 프로젝트상위폴더(myvenv와 같은 위치에 있는)로 이동한 뒤 이제 본격적으로 앱을 생성할 수 있다.

python manage.py startapp 앱이름

앱까지 생성을 했으면 이제 Django가 잘 실행되는지 확인해보자.

python manage.py runserver

터미널에 위 코드를 입력한 후 실행하면 아래와 같이 실행됐음이 확인된다.

에러처럼 보이는 빨간색 라인은 지금은 무시해도 괜찮다. 차후 해결할 문제이다.

localhost:8000 또는 http://127.0.0.1:8000/ 으로 접속하여 로켓이 잘 날고 있는지 확인해보자. 아래 창을 만났다면 프로젝트 생성 성공이다.

프로젝트 vs 앱

앱: 블로그 시스템, 공개 기록 데이터베이스 또는 소규모 의견조사 앱과 같은 작업을 수행하는 웹 애플리케이션

프로젝트: 특정 웹 사이트에 대한 구성 및 앱의 모음

한 프로젝트에 여러 개의 앱이 포함될 수 있으며 앱은 여러 프로젝트에 있을 수 있다.

 

 

2. MySQL 연결

1) Database 생성

MySQL을 실행하고

create database 데이터베이스이름 character set utf8mb4 collate utf8mb4_general_ci;

를 통해 Database를 생성해주면 Django과 MySQL 연결을 위한 준비는 끝이다.

 

2) env 파일 생성

SECRET_KEY와 API KEY, 비밀번호 등 외부에 노출되어서는 안 되는 정보들을 담고 있는 파일을 생성한다.

 

환경변수 관리를 돕는 django-environ 패키지로 관리를 해보고자 한다.

pip install django-environ

설치된 후 프로젝트 폴더 아래(settings.py와 같은 위치)에 .env 파일을 생성한다.

아이콘은 개인적으로 설정한거라 다를 수 있다. 신경쓰지 말자

그리고 .env 파일 내에 아래 코드를 작성한다.

SECRET_KEY=시크릿키
DATABASE_URL=mysql://root:비밀번호@localhost:3306/데이터베이스이름

 

시크릿키에는 settings.py 파일의 SECRET_KEY = '시크릿키' 부분을 찾아 시크릿키를 넣어주면 되고,

DB에는 root 비밀번호와 사용할 DB 이름을 넣어주면 된다.

 

3) setting.py 수정

settings.py를 수정하여 env 파일의 내용을 가져올 수 있도록 한다.

# env 환경설정 (새롭게 추가)
import environ 

env =  environ.Env(
    DEBUG=(bool, True)
)
environ.Env.read_env()

# 기존 코드 수정
SECRET_KEY = env("SECRET_KEY")

DATABASES = {
    'default': env.db()
}

 

4) migration

Django에서는 기본적으로 Group, User, Admin과 같은 테이블을 제공한다.

Django는 ORM을 사용하기 때문에 models.py와 클래스로 DB를 관리하는데 이러한 모델의 변경 내역을 DB 스키마에 적용시키는 방법이 바로 'migration'이다.

migration을 위해선 두 가지 과정이 필수적으로 이루어져야 하는데 세트처럼 외워두는 것이 좋다.

 

1. python manage.py makemigrations

- 마이그레이션을 생성한다. 뒤에 앱 이름을 붙여 특정 앱에 대해서만 실행하도록 지정할 수 있다.

 

2. python manage.py migrate

- migration을 적용한다. 실제 DB에 변경사항을 적용하는 과정이다.

 

python manage.py makemigrations
python manage.py migrate

를 터미널에 실행한 후 MySQL에서 DB를 확인해보면

이렇게 제공되는 테이블들이 DB 안에 적용된 것을 확인할 수 있다.