Skip to content

사용자는 본 서비스에 접속하여, 게시물을 업로드 하거나 다른 사람의 게시물을 확인하고, 좋아요를 누를 수 있습니다. Docker를 이용해 AWS EC2에 배포

License

Notifications You must be signed in to change notification settings

blueknarr/05_SNS_Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

4주차 - sns_backend



목차

⌛ 개발 기간

2022/07/20 ~ 2022/07/27

💻 프로젝트

프로젝트 설명 및 분석

  • 사용자는 본 서비스에 접속하여, 게시물을 업로드 하거나 다른 사람의 게시물을 확인하고, 좋아요를 누를 수 있습니다.
    • DRF를 통한 RESTful API 서버 개발
    • JTW 토큰 발급 - 사용자 인증과 게시글 등록, 수정, 삭제, 복원 요청에 사용
      • Permission을 이용하여 권한 부여
    • 게시글 목록 - Ordering (= Sorting, 정렬), Searching (= 검색), Filtering (= 필터링), Pagination (= 페이지 기능)
    • Soft Delete 사용
      • 게시글을 삭제 요청 시 DB에서 바로 삭제하지 않고 임시로 삭제된 상태로 변경
      • Soft Delete 게시글 복원 기능
    • EC2에 Docker-Compose로 Django + Nginx + gunicorn, MySql을 배포


아키텍처 다이어그램



Docker


ERD

  • tb_user: 회원 정보
  • tb_post: 게시글
  • tb_post_hashtag: 게시글 해시태그
  • tb_post_like: 게시글 좋아요



API 명세서

METHOD URI 기능
POST /api/register/ 회원 가입
POST /api/login/ 로그인
POST /api/token/refresh/ 토큰 재발급
DELETE /api/users/ 회원 탈퇴
GET /api/posts/ 게시글 목록 조회
GET /api/posts/<int: id>/ 게시글 상세 조회
POST /api/posts/ 게시글 생성
PATCH /api/posts/ 게시글 수정
DELETE /api/posts/ 게시글 삭제
POST /api/<int: id>/like 좋아요
GET /api/restore/ soft delete 게시글 목록 조회
PATCH /api/restore/<int: id>/ soft delete 게시글 복원


API

API 사용법을 안내합니다.

회원가입

회원가입을 합니다. 이메일, 패스워드, 유저네임을 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
POST /api/register/ HTTP/1.1
Host: 127.0.0.1:8000
Parameter
Name Type Description Required
email String 이메일 O
user_name String 유저 네임 O
password String 패스워드 O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
  "message": "회원가입이 완료되었습니다."
}
Response:실패
{
  "message": "failed"
}

로그인

로그인을 합니다. email, password, access_token을 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
POST /api/login/ HTTP/1.1
Host: 127.0.0.1:8000
Parameter
Name Type Description Required
email String 이메일 O
password String 패스워드 O

Response

Name Type Description
result String 등록 결과 메세지
access_token String access token
refresh_token String refresh token

Result

Response:성공
{
    "message": "Login 성공",
    "token": {
        "access_token": "access_token",
        "refresh_token": "refresh_token"
    }
}
Response:실패
{
    "message": "email 또는 password를 확인해주세요."
}

토큰 재발급

refresh_token으로 access_token을 재발급 합니다. refresh_token을 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
POST /api/token/refresh/ HTTP/1.1
Host: 127.0.0.1:8000
Parameter
Name Type Description Required
refresh String refresh token O

Response

Name Type Description
access_token String access token

Result

Response:성공
{
    "access_token": "access_token"
}
Response:실패
{
    "refresh": "이 필드는 필수 항목입니다."
}

회원 탈퇴

회원 탈퇴를 합니다. email을 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
GET /api/users/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
    "message": "회원 탈퇴가 완료되었습니다."
}
Response:실패
{
    "message": "해당하는 유저가 없습니다."
}

게시글 목록 조회

게시글 목록을 조회합니다. 로그인 상태에서 access_token을 GET으로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
GET /api/posts/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
    "게시글 목록": [
        {
            "게시글 번호": 1,
            "제목": "성수동 맛집 리스트",
            "작성자": "test",
            "해시태그": ["#소바", "#에비카츠"],
            "좋아요": 10,
            "조회수": 100,
            "작성일": "2022-07-20 18:00:00",
      }
    ]
}
Response:실패
{
    "message": "게시글 목록을 가져올 수 없습니다."
}

게시글 상세 조회

게시글 목록을 조회합니다. 다. 로그인 상태에서 access_token과 게시글 id를 이용해 GET으로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
GET /api/posts/<int:id>/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O
Parameter: Path
Name Type Description Required
id int 게시글 번호 O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
  "message": "{post_id}번 게시글을 불러왔습니다.",
  "post": [
      {
          "게시글 번호": 1,
          "제목": "성수동 맛집 리스트",
          "작성자": "test",
          "본문": "성수동에서 에비카츠로 제일 맛있는 식당",
          "해시태그": ["#소바", "#에비카츠"],
          "좋아요": 10,
          "조회수": 100,      
          "작성일": "2022-07-20 18:00:00",
          "수정일": "2022-07-20 19:00:00",
          "삭제 유무": "False",
      }
}
Response:실패
{
    "message": "{post_id}번 게시글이 없습니다."
}

게시글 생성

게시글을 생성합니다. 제목, 내용, 해시태그를 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
POST /api/posts/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O
Parameter
Name Type Description Required
title String 제목 O
content String 내용 O
hash_tag String 해시태크 O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
    "message": "게시글을 등록했습니다."
}
Response:실패
{
    "message": "게시글 등록을 실패했습니다.",
}

게시글 수정

게시글을 수정합니다. 제목, 내용, 해시태그를 PATCH로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
PATCH /api/posts/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O
Parameter: Path
Name Type Description Required
id int 게시글 번호 O
Parameter
Name Type Description Required
title String 제목 X
content String 내용 X
hash_tag String 해시태크 X

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
  "message": "게시글을 수정했습니다."
}
Response:실패
{
    "message": "게시글 수정을 실패했습니다.",
}

게시글 삭제

게시글을 삭제합니다. 게시글 번호를 DELETE로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
DELETE /api/posts/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O
Parameter: Path
Name Type Description Required
id int 게시글 번호 O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
  "message": "{post_id}번 게시글을 삭제했습니다."
}
Response:실패
{
    "message": "{post_id}번 게시글을 삭제할 수 없습니다.",
}

게시글 좋아요

게시글의 좋아요 기능입니다. 게시글 번호, sel을 POST로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
DELETE /api/posts/<int:id>/like HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O
Parameter: Path
Name Type Description Required
id int 게시글 번호 O
Parameter
Name Type Description Required
sel String like: 좋아요, dislike: 좋아요 취소 O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
  "message": "{post_id}번 게시글의 좋아요를 눌렸습니다."
}
Response:실패
{
    "message": "{post_id}번 게시글의 좋아요를 눌렸습니다."
}

Soft Delete 게시글 목록 조회

Soft Delete 게시글 목록을 조회합니다. 로그인 상태에서 access_token을 GET으로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
GET /api/resotre/ HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
    "message": "{user_name}의 휴지통에 있는 게시글 목록을 가져왔습니다.",
    "data": [
        {
           "게시글 번호": 1,
           "제목": "성수동 맛집 리스트",
           "작성자": "test",
           "본문": "성수동에서 에비카츠로 제일 맛있는 식당",
           "해시태그": ["#소바", "#에비카츠"],
           "좋아요": 10,
           "조회수": 100,      
           "작성일": "2022-07-20 18:00:00",
           "수정일": "2022-07-20 19:00:00",
           "삭제 유무": "True",
      }
    ]
}
Response:실패
{
    "message": "{user_name}의 휴지통에 있는 게시글 목록을 가져오지 못했습니다."
}

Soft Delete 게시글 복원

Soft Delete 게시글을 복원합니다. 로그인 상태에서 access_token과 게시글 번호를 PATCH로 요청하고, 성공 시 응답 바디에 JSON 객체로 성공 메세지를 받습니다. 실패 시 에러 코드를 받습니다.

Request

URL
PATCH /api/resotre/<int:id> HTTP/1.1
Host: 127.0.0.1:8000
Header
Name Type Description Required
Authorization String 액세스 토큰
Bearer ${ACCESS_TOKEN} 형식으로 전달
O

Response

Name Type Description
result String 등록 결과 메세지

Result

Response:성공
{
    "message": "{post_id}번 게시글을 복원했습니다.",
    "data": [
        {
           "게시글 번호": 1,
           "제목": "성수동 맛집 리스트",
           "작성자": "test",
           "본문": "성수동에서 에비카츠로 제일 맛있는 식당",
           "해시태그": ["#소바", "#에비카츠"],
           "좋아요": 10,
           "조회수": 100,      
           "작성일": "2022-07-20 18:00:00",
           "수정일": "2022-07-20 19:00:00",
      }
    ]
}
Response:실패
{
    "message": "{post_id}번 게시글을 복원 할 수 없습니다."
}

About

사용자는 본 서비스에 접속하여, 게시물을 업로드 하거나 다른 사람의 게시물을 확인하고, 좋아요를 누를 수 있습니다. Docker를 이용해 AWS EC2에 배포

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published