Skip to content

작품 경매/판매 사이트 서버 구현

Notifications You must be signed in to change notification settings

Arios67/Artipul

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Artipul project (2022.3.17 ~ 2022.4.4)

write by backend 이재후

 목차

   1. 프로젝트 개요 및 사용 기술스택
   2. Flow chart & ERD
   3. Data pipeline
   4. api 개발 및 배포

1. 프로젝트 개요 및 사용 기술스택

  • Artipul은 미대생들을 위한 온라인 작품 경매 플랫폼입니다.

    멀고 험한 예술의 길을 걷고 있는 미대생들에게 작품을 사고 팔 수 있는 플랫폼을 제공함으로써, 학업과 작품활동에 활력을 불어넣어 주는 온라인 공간을 컨셉으로 개발되었습니다. 미대생(작가)들은 작품 장르와 등록 기간 등을 선택해 작품을 판매할 수 있으며, 구매자들은 작품 장르로 원하는 작품들을 검색해 실시간 경매에 참여하거나, 즉시 구매가를 지불하여 작품을 즉시 구매할 수 있습니다. 즉시구매가 이루어지지 않았을 경우, 작가가 설정한 등록 기간이 마감되었을 때 가장 높은 금액으로 입찰한 구매자가 낙찰받게 됩니다.

  • 사용 기술스택

2. Flow chart & ERD

  • Flow chart

    f
    권한분기에 따른 서비스흐름도 입니다.
    오픈 api를 사용하는 소셜로그인의 경우, 최초 1회 핸드폰 번호와 닉네임 등 추가 기입 정보를 입력해 회원가입을 거친 뒤 해당 과정을 거친 계정에 한하여 소셜로그인이 이루어지게 됩니다.

  • ERD

    art ERD (3)
    회원은 작가와 일반 사용자로 나눠지지만 서로 중복되는 요소가 많기 때문에 작가 테이블과 일반 사용자 테이블로 분리시키지 않고 미대생 여부 칼럼으로 둘을 구별하는 방식으로 진행하였습니다.

3. Data pipeline

169240966-b43b0cce-3b1d-4658-8968-b6f343c91c86

4. api 개발 및 배포

  USER Create

  • 휴대폰 번호 인증

    KakaoTalk_20220522_144838178
    NHN Cloude Service를 이용하였습니다. 입력 받은 핸드폰 번호로 6자리 난수 토큰이 발송되며, redis에 저장된 토큰 값과 비교하여 인증을 진행합니다. 인증을 마친 토큰은 ttl이 남아있더라도 삭제됩니다.

  • 비밀번호 해시

    제목 없음
    유저가 입력한 비밀번호는 bcrypt를 사용하여 해시된 형태로 DB에 저장되고, 검증됩니다.

  Login

유저가 입력한 값과 DB에 저장되어 있던 유저의 정보가 일치할 경우, JWT형태의 accessToken과 refreshToken을 발급합니다. 보안을 위해 accessToken은 짧은 만료기간을 가지고 로컬 변수에 저장되며, refreshToken은 http Only Secure 쿠키에 저장됩니다. 이후 각 토큰에 대한 strategy와 guard를 통해 권한을 분기하고, payload 유저 정보를 사용할 수 있습니다.

162326264-91033a2b-c455-42af-9942-1c9127d83cd5

  Logout

Client의 로그아웃 요청 시 요청 헤더에 포함된 accessToken과 refreshToken을 받아 verify함수를 통해 검증한 뒤, redis에 blacklist로 저장합니다. 이 때 저장되는 TTL값은 토큰의 남은 만료기간으로 설정됩니다.

  경매 API

작품 등록 시 설정한 마감 시간이 지나면 작품에 따라 낙찰 또는 유찰 처리되며, 이는 nestJS의 Task Scheduling 기능을 통해 특정 시간마다 DB를 확인하는 방식으로 구현되었습니다.
RDB와 비관계형 In-memory DB의 특성에 따라, Client의 첫 입찰 요청 시 사용자 별 경매 참여 중인 작품 정보는 MySQL에 저장되며 이후 실시간으로 빠르게 변동되는 작품 별 최고입찰가의 경우 redis에 저장되고 갱신 값이 Client에게 실시간으로 노출됩니다.

163166653-25db1000-ef26-4940-8c7f-45fe577059dd


  서버 배포

  • 다음은 GCP를 이용한 서버 배포 구조입니다. 개발 시 수동테스트를 위한 api 테스트 환경 또한 동일합니다.

    1

  • 구글에서 지원하는 SSL 인증서를 이용하여 보안을 강화하고, 서버 부하 분산을 통한 안정성을 높이기 위해
    로드밸런서와 인스턴스 그룹을 연결한 뒤 주기적으로 health-checking 하도록 설정하였습니다.

  • 로드밸런서의 static IP는 DNS를 통해 도메인과 연결되어, 클라이언트로부터 받아오는 트래픽을
    인스턴스 그룹에 부하분산 하도록 설정하였으며 http요청도 https로 리다이렉션됩니다.

About

작품 경매/판매 사이트 서버 구현

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages