:star2: 서비스 소개
- 'Hands-up 👋' 은 "실시간 경매"와 소통을 통해 자신의 물품을 손쉽게 거래하는 플랫폼입니다.
-
우리는 현존하는 거래 플랫폼에서는 찾을 수 없는 “재미”와 “빠른거래”, “확실한 거래”를 추구합니다.
"더이상 필요치않는 본인의 물품이 집에 남아있으신가요?"
"서로 간 가격흥정의 에너지를 쏟고 계신가요?"
"짧은시간내에 빠르게 본인의 물품을 팔아치우시고 싶으신가요?"
경매라는 시스템을 통하여 판매자는 최소한으로 받고 싶은 상품가격을 먼저 제시함으로써
경매 입찰을 통해 판매자와 구매자의 합의점이 자연스럽게 정해지면서 판매자는 빠르게 판매하고 구매자는 원하는 가격에 구매할 수 있는 플랫폼입니다.
👨👨👧👦 팀원 소개
Gyeung Min Kim
Won Chae Yi
Jun Ho Hyeon
Ki Hoon Kang
Min Su Kim
Sang Hun Son
⛓ 기술 스택
Backend :
Server :
Management :
Database :
⭐️ 주요 기능
회원가입 & 로그인
1인 1계정의 목표!
- 휴대폰 인증
- 제한적인 계정 가입으로 아이디를 남발하지 않도록 하였습니다.
- 친절한 UX UI로 비동기적으로 유효성 검사를 합니다.
경매 리스트
한 눈에 잘 들어오는 경매들!
- 카테고리 & 무한 스크롤을 통해 편의 제공
- 카테고리와 경매 상태를 구분지어 더욱 디테일하게 찾는 기능을 제공합니다.
- 무한 스크롤을 통하여 번거롭게 번호를 클릭하지 않아도 됩니다.
경매 참여
사람들과 소통 & 입찰 경쟁으로 득템하고 재미는 덤!
- 실시간 정보
- 현재 참여 인원이 얼마나 있는지, 누가 있는지 확인할 수 있습니다.
- 입찰, 채팅의 변화를 실시간으로 확인 가능합니다.
- 내역 제공
- 이전의 참여자들이 어떤 대화를 남겼는지 볼 수 있습니다.
- 이전 입찰 내역을 확인하면서 얼마나 치열했는지 볼 수 있습니다.
- 알림 기능을 통해서 여러 경매를 동시에 편하게 참여할 수 있습니다.
1대1 채팅
낙찰 받은자, 거래할 수 있을지어다.
- 오직 낙찰자와의 대화
- 경매의 특성상 낙찰자와 판매자만 1:1 채팅을 할 수 있습니다.
- 다른 대화방의 내용들도 바로바로 갱신됩니다.
평점 및 리뷰
선택에는 책임이 따른다.
- 신뢰도를 측정하는 매너점수, 리뷰
- 경매에 참여의 여부를 판매자의 매너점수로 판단할 수 있습니다.
- 또한 판매자의 리뷰 정보를 통해 판단할 수도 있습니다.
- 리뷰 & 신고를 통한 강력한 제재
- 리뷰의 점수, 횟수, 빈도를 확인하여 비매너 사용자를 걸러냅니다.
- 낙찰 받은 금액으로 거래가 이뤄지는 것을 목표로 정직한 거래자만을 남깁니다.
자유 & 제보게시판
희노애락 게시판!
- 자유 게시판을 통해, 득템 자랑, 재미있는 게시글을 제공, 시청할 수 있습니다.
- 제보 게시판을 통해, 사용자들에게 정보를 제공, 시청할 수 있습니다.
📆 서비스 개발 개요
핵심 목표
- 거래의 확실성을 높이기 위해 1인 1계정을 목표로하고 리뷰 혹은 신고 기능을 도입한다.
- 경매마감의 타임어택을 부여해서 흥미를 유발하고 사이트에 참여도를 높인다.
- 다른 타 물품 거래 플랫폼과 차별성을 둔다.
개발 일정
- 진행 기간: 2022.11.30 ~ 2022.12.19 ( 20일 )
- 피드백 기간: 2022.12.20 ~ 2022.12.23 ( 60개의 피드백 )
- 피드백 반영 기간: 2022.12.24 ~ 2022.12.26 ( 3일 )
- 각종 알림 기능 ( 입찰 경쟁, 경매 시작, 낙찰, 메시지 )
- 경매 기능 추가 ( 입찰 내역, 참여자 정보, 채팅 내역 )
- xss 보안
와이어 프레임 피그마
API
:grey_question: 아키텍쳐
🖼 사용 기술 스택
:hammer:기술 선정 Why ?
Django / DRF
- Serializer, 유저 관리, REST API 등 Django에서 제공하는 다양한 기능들을 사용하기 위해 채용
Django Channels
- 실시간 비동기로 들어오는 ws/wss 프로토콜을 장고에서 대응하기 위해 사용
Django Rest Framework simple-jwt
- 유저 인증을 토큰방식으로 암호화하기 위해 사용
Websocket
- 실시간 채팅 기능 구현에 있어 채팅을 칠 때마다 매번 HTTP 통신을 하는 것은 느리고 비효율적이기 때문에 실시간 비동기 프로토콜을 제공하는 웹소켓 기술을 사용
AWS EC2
- 용량을 줄이거나 늘릴 수 있는 탄력성을 가지고 있고, 보안 및 네트워크 구성, 스토리지 관리에 효과적이며 간단한 프로젝트 배포를 프리티어로 무료로 이용할 수 있다는 점에서 채용
AWS S3
- 서비스에서 이미지를 업로드 할때, EC2에 저장을 하게되면 용량이 부족해지고 파일들을 관리하기가 어렵습니다. 그래서 파일 저장에 최적화 되어있고, 저장용량이 무한대에 가까운 S3를 사용해서 이미지 파일들을 저장하고 관리 했습니다.
Docker
- Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하는데, 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든것이 포함되어 있습니다. 이러한 특징을 가진 Docker를 활용해서 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장하고 규모가 달라져도 안정적으로 저렴하게 애플리케이션을 구축, 제공 및 실행 하기위해 사용했습니다.
Nginx
- event-driven의 비동기 구조인 특징을 가지고 있는 nginx는 채팅기능 때문에 동시접속자 수의 증가에 대응하기에 적합한 방식의 웹서버라고 생각했습니다. 또한 무중단 배포가 가능하여 채팅기능이 있는 웹사이트에서 배포시 중단되지 않는점이 사용자들에게 사용성 및 편의성을 증대시킵니다.
Gunicorn
- 로컬개발환경에서는 django의 runserver를 사용하여 gunicorn이 없어도 유용하게 사용 할 수 있지만, 배포환경에서는 runserver를 사용하지 않도록 django에서도 권장되어있습니다. 그래서 Python WSGI 대표적으로 성능이 검증된 Gunicorn을 활용해서 Nginx로부터 받은 서버사이드 요청을 gunicorn을 활용해서 django로 전달하게끔 했습니다.
Daphne
- Gunicorn이 WSGI HTTP요청을 처리한다면 저희 서비스에 있는 채팅기능은 ASGI WS 요청을 처리해야 합니다. Daphne는 Channels 를 설치하면 자동으로 설치되며 Channels에서 지원하는 서버로 ASGI 프로토콜로 받은 WS요청을 처리하려고 사용했습니다.
PostgreSQL
- PostgreSQL은 MySQL보다 표준에 더 가깝게 구현하는것을 목표로 두고있고, 오픈소스 및 커뮤니티가 이끄는 데이터베이스 입니다. django에서 가장 권장하는 RDBMS가 PostgreSQL이었기 때문에 이를 직접 사용해봄으로써 MySQL과는 어떠한 차이점이 있는지 공부도 하고, 다른 RDBMS를 사용해봄으로써 경험치를 쌓고자 사용했습니다.
⚙ 개발 환경 및 IDE
- django version 4.1.3
- Docker version 20.10.12
- python version 3.10.8
- django restframework version 3.13.0
🌐 Server Description
-
port (nginx)
-
443 |
server default(https) |
80 |
server default(http) (redirect to 443) |
6379 |
redis(ws) |
8080 |
asgi server |
8000 |
wsgi server |
🎞 최종산출물
최종 발표 시연영상
최종 발표 숏츠영상
'Hands-up👋' 최종발표 pdf