Django-Wanted-Internship-3-Team / repo1_feed-service

소셜 미디어 통합 Feed 서비스 (원티드 팀 과제 1)
https://bow-hair-db3.notion.site/Feed-938175f1165b470e90462d1f1d52fd78
MIT License
2 stars 0 forks source link
black django djangorestframework djangorestframework-simplejwt drf-yasg flake8 isort python

소셜미디어 통합 Feed 서비스


Table of Contents

기술스택

Backend


Why? Django ``` 1. 간단한 설정 및 빠른 개발 https://docs.djangoproject.com/ko/4.2/misc/design-philosophies/ 장고의 철학 중 하나인 신속한 개발이 포함. 해당 과제를 수행으로 빠른 기능 구현을 위해 사용 2. 강력한 ORM 길어질 수 있는 SQL쿼리를 직접 작성하지 않고 데이터베이스를 조작하기 위해 ORM 을 사용 가능하기에 사용 3. 커뮤니티 활성화 파이썬 프레임워크 커뮤니티 중 가장 거대하고 활성화가 되어있고 자료 검색 용이를 위해 사용 ``` DRF(Django Rest Framework) ``` 1. RESTfrul API 지원 DRF에서 RESTful API구축하는데 필요한 모든 도구와 기능을 제공 (시리얼라이저, URL, 테스트 API 뷰 등등) 2. 직렬화 및 역질렬화 데이터 모델을 JSON 또는 다른 형식의 데이터로 변환하고 그 역도 가능하도록 도와주는 강력한 직렬화 및 역직렬화 기능을 제공 3. 인증 및 권한 관리 DRF는 사용자 인증 및 권한 관리를 위한 다양한 방법을 제공 ``` Docker & Docker-compose ``` 배포를 위해서가 아니라 github actions와 데이터베이스(Postgres)를 사용 어느 동일한 개발 환경을 테스트를 위해 격리된 환경을 제공하고 환경 설정할 수 있기에 사용 docker-compose의 경우 두개 이상의 컨테이너가 존재하기에 yaml파일을 정의해서 간단하게 사용 가능하기에 사용 ```


DB

Why? 데이터베이스 변경 이슈 해당 과제에 간단한 CRUD만 된다고 생각하여 기본으로 제공하는 SQLite를 사용하기로 했습니다. 하지만 아래의 문제점, 원인으로 인하여 PostgreSQL를 사용했습니다. 문제점: 통계 API 작성 중에서 날짜 집계 함수를 사용하려고 했습니다. TruncDay라는 함수가 있는데 django.db.utils.OperationalError: user- defined function raised exception가 발생= 원인: SQLite에서 datetime을 지원하지 않아 함수 사용이 불가 Postgres ```json 1. Djang는 PostgreSQL에서만 작동하는 다양한 데이터 유형을 제공 2. Django에는 PostgreSQL에서 데이터베이스 작업을 수행하기 위한 django.contrib.postgres가 있음 ``` - Django공식문서 Postgres [PostgreSQL 관련 집계 함수](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/aggregates/) [PostgreSQL 관련 데이터베이스 제약 조건](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/constraints/) [PostgreSQL 관련 양식 필드 및 위젯](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/forms/) [PostgreSQL 관련 데이터베이스 기능](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/functions/) [PostgreSQL 관련 모델 인덱스](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/indexes/) [PostgreSQL 관련 조회](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/lookups/) [데이터베이스 마이그레이션 작업](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/operations/) [전체 텍스트 검색](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/search/) [인덱스](https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/validators/)


Managements

Why? Git & Github ```json 1. 버전관리 소스 코드를 효과적으로 버전 관리할 수 있는 도구로, 개발자들은 변경 내용을 추적하고 이전 버전으로 되돌릴 수 있음 이를 통해 협업 중 코드 충돌을 방지하고 안정적인 코드베이스를 유지 2. GitHub Git 저장소를 호스팅하고 협업을 간편하게 할 수 있게 해주는 플랫폼 여러 개발자가 동시에 작업하고 변경 사항을 추적하며 코드 검토 및 이슈 관리를 쉽게 할 수 있음 ``` Github Actions ```json 팀 내의 코드 컨벤션, 테스트 코드 작성, 이를 바탕으로 CI를 적용하기 위해서 깃 허브에서 간단한 설정 및 연동이 가능한 github actions를 사용 ```


설치

docker-compose로 django(어플리케이션)과 postgre(데이터베이스)를 구성합니다.

docker compose up # running server to http://127.0.0.1:8000


테스트

docker compose run django poetry run python3 src/manage.py test src/

test


APIs

기능 URL Method Parameter Return
users 회원 가입 /users/confirm/ POST {email, username, password} {email, username, confirmcode}
가입 승인 /users/login/ POST {username, password, code} {username, isConfirmed}
로그인 /users/signup/ POST {username, password} {username, token{refresh, access}}
token 재발급 /users/token/refresh POST {refresh_token} {access_token}
posts 게시물 리스트 조회 /posts/ GET {limit, offset, type, search, ordering, hastag} PostList{contentId, postType, title, content, viewCount, likeCount, shareCount, createdAt, updatedAt, hashtag, user}
게시물 상세 조회 /posts/{id} GET {content_id} PostDetail{contentId, postType, title, content, viewCount, likeCount, shareCount, createdAt, updatedAt, hashtag, user}
통계 정보 조회 /posts/statistics GET {type, start, end, hashtag, value} {datetime, count}
최근 많이 사용된 해시태그 조회 /posts/hashtag/recommend GET {hashtag_id, hashtag_name}
likes 게시물에 좋아요 /likes/{id} POST {content_id}
shares 게시물 공유 /shares/{id} POST {content_id}


팀원 및 회고

| name | title | profile link | email | review | |------|-------|--------------|-------|--------| | 윤성원 | 팀장 | [@lfoyh6591](https://github.com/lfoyh6591) | lfoyh6591@naver.com | https://determined-chamomile-42b.notion.site/835d8c6783a2477499438c07e1a7c125?pvs=4 | 사재혁 | 팀원 | [@saJaeHyukc](https://github.com/saJaeHyukc) | wogur981208@gmail.com | https://determined-chamomile-42b.notion.site/f86b007c44954ab6947dbf2a445ee67f?pvs=4 | 박대준 | 팀원 | [@Chestnut90](https://github.com/Chestnut90) | cowzon90@gmail.com | https://determined-chamomile-42b.notion.site/09b567f9f59747ee86d4074659211a3a?pvs=4 | 이슬기 | 팀원 | [@simseulnyang](https://github.com/simseulnyang) | happysseul627@gmail.com | https://determined-chamomile-42b.notion.site/5491797e84834a26a32a0f8ce58e51d8?pvs=4