Skip to content

depromeet/baton-user-api

Repository files navigation

baton-user-api

Google Play에서 바통 다운로드

banner standard-readme compliant

디프만 11기 6조 바통의 API Gateway & 인증서버, 마이페이지 API

baton-user-api는 django projects로 구성되며 기능은 아래와 같다.

  1. auth-server: api-gateway, 인증(로그인/회원가입/토큰) API
  2. user-api: 마이페이지 API

Table of Contents

Background

Architecture and API flow

인프라 및 API flow

Database Schema

DBSchema_light

CI/CD

CICD

Install

  1. 레포지토리 파일을 다운로드
$ git clone https://github.com/depromeet/baton-user-api.git

Usage

docker 및 docker-compose가 설치된 Linux 환경에서만 실행 가능

Local environment

  • 환경변수 파일로 .env.local 사용

  • django runserver로 서버 구동

실행 방법

  1. 프로젝트 디렉토리에 .env.local 파일 생성. (xxxx는 사용자 로컬 환경에 맞추어 입력)
SECRET_KEY=xxxx

DATABASES_NAME=xxxx
DATABASES_USER=xxxx
DATABASES_PASSWORD=xxxx
DATABASES_HOST=host.docker.internal
DATABASES_PORT=xxxx

KAKAO_REST_API_KEY=xxxx

AWS_S3_ACCESS_KEY_ID=xxxx
AWS_S3_SECRET_ACCESS_KEY=xxxx
  1. docker-compose 실행
$ docker-compose -f docker-compose.local.yml up

Production environment

  • 환경변수 파일로 .env.prod 사용

  • gunicorn을 wsgi 서버로 사용

실행 방법

  1. 프로젝트 디렉토리에 .env.prod 파일 생성. (xxxx는 사용자 배포 환경에 맞추어 입력)
SECRET_KEY=xxxx

DATABASES_NAME=xxxx
DATABASES_USER=xxxx
DATABASES_PASSWORD=xxxx
DATABASES_HOST=xxxx
DATABASES_PORT=xxxx

KAKAO_REST_API_KEY=xxxx

AWS_S3_ACCESS_KEY_ID=xxxx
AWS_S3_SECRET_ACCESS_KEY=xxxx
  1. docker-compose 실행
$ docker-compose -f docker-compose.prod.yml up

Upload static files in production environment (optional)

  1. .env.prod를 각 앱 디렉토리로 복사
$ cp .env.prod auth-server/
$ cp .env.prod user-api/
  1. docker-compose 실행
$ docker-compose -f docker-compose.prod.yml up
  1. static 파일을 AWS S3 버킷에 저장 (새로운 터미널에서 명령어 입력)
$ docker exec -it user-api /bin/bash
/app# python manage.py collectstatic --settings=config.settings.prod --noinput
$ docker exec -it auth-server /bin/bash
/app# python manage.py collectstatic --settings=config.settings.prod --noinput

API endpoints

swagger로 API 명세 제공

Features

  • RESTful API
  • Extensible - Oauth provider 추가 용이 등
  • auth-server와 user-api 사이의 종속성 제거

Technology Stack

OAuth2.0 JWT
Django Django REST framework MySQL
Python Gunicorn Swagger
Docker GitHub Actions Amazon S3

Python packages

Common

  • Python 3.9
  • Django 4.0.3
  • Django REST framework - Django 기반의 RESTful API 제작
  • mysqlclient - DBMS로 MySQL 사용
  • gunicorn - 배포 환경에서의 wsgi 서버
  • drf-yasg - DRF 코드를 바탕으로 swagger API 명세 생성
  • django-environ - .env 파일로 환경변수 관리
  • django-request-logging - 로컬 및 배포 환경에서 log 출력 형식을 꾸밈

auth-server app

  • Simple JWT - JWT기반의 사용자 인증 구현
  • djproxy - reverse-proxy 서버 제작

user-api App

  • boto3, djang-storages - AWS S3에 이미지 파일 업로드
  • (linux package) gdal-bin - MySQL 환경에서 GeoDjango를 사용하기 위한 기초 라이브러리

CI/CD

  • Dockerfile - django project 별로 docker image를 정의
  • Docker Compose - 로컬 개발 환경에서 두 컨테이너를 통합하여 실행
  • github action - 배포 작업(.env.prod 작성, docker image를 build하여 AWS ECR에 push)을 자동화, secrets를 효율적으로 관리

See more

Download at

QR코드