디프만 11기 6조 바통의 API Gateway & 인증서버, 마이페이지 API
baton-user-api는 django projects로 구성되며 기능은 아래와 같다.
- auth-server: api-gateway, 인증(로그인/회원가입/토큰) API
- user-api: 마이페이지 API
- 레포지토리 파일을 다운로드
$ git clone https://github.com/depromeet/baton-user-api.git
docker 및 docker-compose가 설치된 Linux 환경에서만 실행 가능
-
환경변수 파일로 .env.local 사용
-
django runserver로 서버 구동
- 프로젝트 디렉토리에
.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
- docker-compose 실행
$ docker-compose -f docker-compose.local.yml up
-
환경변수 파일로 .env.prod 사용
-
gunicorn을 wsgi 서버로 사용
- 프로젝트 디렉토리에
.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
- docker-compose 실행
$ docker-compose -f docker-compose.prod.yml up
.env.prod
를 각 앱 디렉토리로 복사
$ cp .env.prod auth-server/
$ cp .env.prod user-api/
- docker-compose 실행
$ docker-compose -f docker-compose.prod.yml up
- 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
swagger로 API 명세 제공
- RESTful API
- Extensible - Oauth provider 추가 용이 등
- auth-server와 user-api 사이의 종속성 제거
- 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 출력 형식을 꾸밈
- Simple JWT - JWT기반의 사용자 인증 구현
- djproxy - reverse-proxy 서버 제작
- boto3, djang-storages - AWS S3에 이미지 파일 업로드
- (linux package) gdal-bin - MySQL 환경에서 GeoDjango를 사용하기 위한 기초 라이브러리
- Dockerfile - django project 별로 docker image를 정의
- Docker Compose - 로컬 개발 환경에서 두 컨테이너를 통합하여 실행
- github action - 배포 작업(
.env.prod
작성, docker image를 build하여 AWS ECR에 push)을 자동화, secrets를 효율적으로 관리
- Baton (Android)
- baton-search-api
- baton-chat-server
- baton-infra