Skip to content

2021-1 클라우드 컴퓨팅 강의 드롭박스 프로젝트 백엔드

Notifications You must be signed in to change notification settings

khu-dev/cloud-computing-dropbox-backend

Repository files navigation

KHU 드롭박스 프로젝트

API Root url: http://api.drive.jinsu.me

편의상 @umi0410(박진수 팀원) 이 운영 중인 도메인 네임을 사용합니다.

https가 아닌 http임을 주의. (기존에는 AWS의 ACM이라는 인증서 서비스를 ALB와 함께 이용해 ALB단에서 SSL Termination이 이루어지게 하려했으나 AWS Educate에서 ACM도 이용이 불가능해서... 편의상 HTTP 서버를 이용해야겠음. Let's encrypt나 certbot을 이용하면 가능은 하지만 관리가 너무 번거로워짐.)

How to deploy

ElasticBeanstalk을 이용하면 편리하게 배포를 자동화할 수 있지만 AWS Educate를 이용하면서는 IAM User key 발급이 지원되지 않고, 교수님께서 설정하신 AWS Educate Classroom 설정으로는 ElasticBeanstalk을 사용할 수 없었습니다. 따라서 직접 EC2에 SSH 접속을 해서 프로세스를 내리고 현재 master를 다운 받은 뒤 프로세스를 새로 올리는 방식으로 배포합니다. 이 과정은 master branch에 push할 경우 자동으로 진행됩니다.

  • 배포 시에는 ./requirements.txt 를 바탕으로 pip dependency를 설치합니다. 따라서 꼭 새로운 패키지를 설치한 경우 꼭 아래 커맨드를 통해 의존성을 반영해주세요.
    $ pip freeze > requirements.txt

How to configure

databases:
  default:
    ENGINE: 'django.db.backends.sqlite3'
    NAME: '../../db.sqlite3'

aws:
  # AWS Educate 특성상 credential을 이용하는 IAM User를 사용할 수 없으므로
  # IAM Role, Instance profile을 이용합니다. 따라서 EC2에서는 credential을 설정할 필요 없습니다.
  # 로컬의 경우 $ aws configure를 통해 설정할 것.
  s3_enabled: false
  region: "us-east-1"
  bucket_name: "storage.drive.jinsu.me"
  default_acl: "public-read"

./config/$DROPBOX_ENVIRONMENT.yaml 파일에 설정을 기입해주세요. ./config/default.yaml 은 Github에 공개되는 file이므로 credential을 포함하지 않게 주의해주세요. default.yaml은 예시 파일 같은 느낌이고, 각자 새로운 .yaml 만들어 사용할 것을 권장합니다.

  • e.g. local 환경에서 개발할 때
    • local 환경에서도 credential을 이용할 수 있으니 ./config/local.yaml 을 정의할 것을 추천합니다. DB는 간단히 SQLite3를, storage는 S3가 아닌 File system을 사용할 것을 권장합니다.
    • DROPBOX_ENVIRONMENT=local로 설정하신 뒤 ./config/local.yaml 에 설정을 기입하시면 됩니다.
  • e.g. dev 환경에 배포할 때
    • EC2에 배포하는 경우이고 /home/ubuntu/dev.yaml 을 자동으로 /home/ubuntu/cloud-computing-dropbox-backend/config/dev.yaml 로 복사해 이용하게 됩니다.
    • DB는 RDS를, storage는 S3를 이용합니다.

로그 보는 방법

$ ./script/logs.sh

EC2 인스턴스에 접속해서 로그를 볼 수 있습니다. 편의상 스크립트를 짜놓았으니 이용 바랍니다.

  • SSH 접속을 해서 로그를 보기 때문에 @umi0410(박진수 팀원)에게 SSH 접속 pem key를 전달 받으세요.

데이터베이스 테이블 관리 방법

  • 로컬에서 개발할 때에는 개개인의 로컬의 sqlite3를 사용합니다.
  • EC2 서버에서는 RDS를 이용합니다.
  • 여러 명이 Concurrent하게 한 DB에 마이그레이션을 하면 오류가 발생할 수 있습니다. migraiton 파일이 crash날 수도 있고, 테이블 정의가 꼬일 수 있습니다. 따라서 그러한 충돌과 오류를 막기 위해 간단한 개발 단계이므로 RDS의 테이블 정의를 수정하는 경우 RDS의 테이블을 모두 지운 뒤 초기 migration을 진행합니다. 이 코드는 ./script/migrate.sh 에 정의되어있습니다.
  • 개발 환경(RDS)에 배포할 때에는 아래 커맨드 이용
    $ ./script/migrate.sh
  • 로컬 환경에 배포할 때에는 직접 makemigrationsmigrate 커맨드를 이용할 것.

API Documentation

1) 사용자 관련

사용자 회원가입

dropbox 사용자 회원 가입 api 설명입니다.

Request

URL

POST /users
Host: 

Parameter

Parameter Description
username 사용자 ID
email 사용자 이메일
password 사용자 비밀번호
check_password 비밀번호 체크(password와 check_password가 동일해야 함)
first_name 이름
last_name

Response

{
    "username": "mynameis",
    "email": "mynameis@gmail.com",
    "first_name": "Penguin",
    "last_name": "Park"
}

토큰 발급

dropbox에 로그인한 사용자에게 토큰 발급 api

Request

URL

POST /users/login
Host: 

Parameter

Parameter Description
username 사용자 ID
password 사용자 비밀번호

Response

{
    "refresh": "eydasdsadasdsadasdsadsadMDdmNGVjNzg3OTRlNzZkZDEwMzM3NTEiLCJABC.Tk8hBzQXNIABCf5iLiPUo-Y37eE7Tg9ABCRk",
    "access": "eydasdsadsadasdsadsadsadsaJ0eXAiOiJKV1QiLCABCiJIUzI1NiJ9eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoABCjk2ODQ1LCJqdGkiOiI0MzUyMjQ3MmRmZjI0NGE1OTI3MGVhMTk0ZTllOWZmZCIsInVzZXJfaWQiOjJ9.5ROeABCQiz8Ql8Tp9UF5ZDl6BbgTCaqoAtnGQKgo"
}

토큰 갱신

토큰 갱신 api

Request

URL

POST /users/login/refresh
Host: 

Parameter

Parameter Description
refresh refresh token

Response

{
    "access": "eyJ0edddddddjoiYWNjABCXGkiOiIwN2FlZGRlNjUyNWI0ABC.Y9fWy_YIIF1PB_ru20MifMEGwA1OiiNkDABC"
}

토큰 검증

토큰 검증 api

Request

URL

POST /users/login/verify
Host: 

Parameter

Parameter Description
token access token

Response

{
}

사용자 비밀번호 수정

dropbox 사용자 비밀번호 수정 api 설명입니다.

Request

URL

PUT /users/password/<str:username>
Host: 

Parameter

Parameter Description
password 사용자 새로운 비밀번호
password2 사용자 새로운 비밀번호 체크
old_password 사용자 이전 비밀번호

Response

{
}

사용자 프로필 수정

dropbox 사용자 프로필 수정 api 설명입니다.

Request

URL

PUT /users/profile/<str:username>
Host: 

Parameter

Parameter Description
username 사용자 아이디
first_name 사용자 이름
last_name 사용자 성
email 사용자 이메일

Response

{
    "username": "mynameis",
    "email": "mynameis@gmail.com",
    "first_name": "Penguin",
    "last_name": "Park"
}

사용자 리스트 조회

dropbox 사용자 리스트 조회 api 설명입니다.

Request

URL

GET /users/list/
Host: 

Response

[
    {
     "username": "mynameis",
    "email": "mynameis@gmail.com",
    "first_name": "Penguin",
    "last_name": "Park",
    "date_joined": "2021-05-29T09:00:23.504315Z"
    }
]

파일 업로드

dropbox 파일 업로드에 대한 설명입니다.

Request
URL
POST /files
Host: 
Parameter
Parameter Description
file_name 파일 이름
file 파일
is_shared 파일이 공유되고 있는지 여부
is_starred 파일의 중요도
Response
{
    "file_name": "dddddddaaaaffddddddddddsdaaaa",
    "register_date": "2021-06-02T08:25:04.211899Z",
    "modified_date": "2021-06-02T08:25:04.212943Z",
    "is_shared": false,
    "is_starred" : false,
    "file": "https://storage.drive.jinsu.me.s3.us-east-1.amazonaws.com/uploaded/files.PNG",
    "user": 1
}

파일 수정

dropbox 파일 수정에 대한 설명입니다.

Request
URL
PUT /myfile/update/<str:file_name>
Host: 
Parameter
Parameter Description
file_name 파일 이름
is_shared 파일 공유 여부
is_starred 파일 여부
Response
{
    "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T15:44:28.428331Z",
    "is_shared": false,
    "is_starred" : false,
    "file": "",
    "user": 2
}

파일 삭제

dropbox 파일 삭제에 대한 설명입니다.

Request
URL
DELETE /myfile/delete/<str:file_name>
Host: 
Response
{
    "Delete file_name"
}

파일 다운로드

dropbox 파일 다운로드에 대한 설명입니다.

Request
URL
GET /{file_name}/download
Host: 
Parameter
Parameter Description
file_name 파일 이름
Response
[
{"file_name":"test1.txt"},
]

파일 리스트 조회

dropbox 사용자별 파일 조회에 대한 설명입니다.

Request
URL
GET /files/
Host: 
Response
{
   "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T11:44:28.428331Z",
    "is_shared": false,
    "file": "",
    "user": 2
}

최근 파일 목록 조회

dropbox 사용자별 파일 조회에 대한 설명입니다.

Request
URL
GET /myfile/recent
Host: 
Response
{
   "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T11:44:28.428331Z",
    "is_shared": false,
    "is_starred": false,
    "file": "",
    "user": 2
}

{
   "file_name": "aaa",
    "register_date": "2021-06-01T10:44:28.428331Z",
    "modified_date": "2021-06-01T10:44:28.428331Z",
    "is_shared": false,
    "is_starred": false,
    "file": "",
    "user": 2
}

중요 파일 목록 조회

dropbox 사용자별 중요 파일 조회에 대한 설명입니다.

Request
URL
GET /myfile/starred
Host: 
Response
{
   "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T11:44:28.428331Z",
    "is_shared": false,
    "is_starred": true,
    "file": "",
    "user": 2
}

{
   "file_name": "aaaaa",
    "register_date": "2021-06-01T10:44:28.428331Z",
    "modified_date": "2021-06-01T10:44:28.428331Z",
    "is_shared": false,
    "is_starred": true,
    "file": "",
    "user": 2
}

공유 문서 조회

dropbox 공유 문서 조회에 대한 설명입니다.

Request
URL
GET /myfile/share
Host: 
Response
{
   "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T11:44:28.428331Z",
    "is_shared": true,
    "is_starred": true,
    "file": "",
    "user": 1
}

{
   "file_name": "aaaaa",
    "register_date": "2021-06-01T10:44:28.428331Z",
    "modified_date": "2021-06-01T10:44:28.428331Z",
    "is_shared": true,
    "is_starred": true,
    "file": "",
    "user": 2
}

휴지통

dropbox 파일을 휴지통에 이동하는 작업에 대한 설명입니다.

Request
URL
POST /trash
Host: 
Parameter
Parameter Description
file_name 파일 이름
Response
{
    “message” : “success trash!”
}

휴지통 파일 리스트 조회

사용자별 휴지통 파일 조회에 대한 설명입니다.

Request
URL
GET /trash
Host: 
Response
{
   "file_name": "aaa",
    "register_date": "2021-06-01T11:44:28.428331Z",
    "modified_date": "2021-06-01T11:44:28.428331Z",
    "is_shared": false,
    "file": "",
    "user": 2
}

About

2021-1 클라우드 컴퓨팅 강의 드롭박스 프로젝트 백엔드

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •