/idu-market-server

인덕 중고시장 서버 저장소

Primary LanguageTypeScript

💻 IDU Used Articles Market (IUAM)

인덕대학교 학생들을 위한 중고 마켓 서비스

개발 일자 : 2021.03.01 ~



📺 실제 서비스 사진

image




👨‍💻 기술 스택

FrontEnd

BackEnd

Cloud

Cooperation



  우아한 애자일

회장


박우림

회장

전순구

부회장

프론트엔드 개발자


전민재

프런트 개발 (팀장)

전상준

프런트 개발자

백엔드 개발자


박우림

백엔드 개발 (팀장)

전순구

백엔드 개발자

김지원

백엔드 개발자


📕 기능 구현 목록

  • 기본적인 CRUD 기능 구현
    • AWS S3를 통한 이미지 업로드 포함
  • 인증 기능 구현
    • 회원가입
      • bcrypt를 이용하여 비밀번호 해시암호화
      • salt와 함께 DB에 저장한다. -> salt는 비밀번호 복호화 시에도 사용된다.
    • 로그인
      • JWT 이용
      • HS256 알고리즘 사용
      • 로그인 유효시간 24시간
    • 아이디 찾기
      • 사용자가 입력한 이름 & 이메일을 인증한 후 해당 이메일로 아이디 발송
    • 비밀번호 찾기
      • 사용자가 입력한 아이디 & 이메일을 인증한 후 해당 이메일로 비밀번호 변경 URL 발송
      • 비밀번호 변경 페이지의 URL은 랜덤한 토큰값 사용
        • 토큰 유효시간 24시간
        • 비밀번호가 변경되면 토큰이 삭제된다. -> 동일한 토큰으로 비번 변경은 1회만 가능.
        • URL을 전달받은 회원만 비번 변경이 가능하다.
  • 알림 기능 구현
    • 거래 완료
    • 댓글
    • 대댓글
    • 모든 알림은 이메일을 통해 사용자에게 전송된다.
  • 관심목록, 판매 목록, 구매 목록 구현
  • 프로필 구현
  • 무한 스크롤 구현
  • 댓글(대댓글) 기능 구현
  • 판매중, 예약중, 거래완료 등 상태를 통한 거래 진행 상황 기능 구현


📄 Git Flow

git flow



📄 DB ERD

ERD



📄 커밋 전략

image



📄 협업

  1. 협업 도구: Git, GitHub, Kakao work
    • GitHubEvent(PR, Commit 등) 가 발생하면 kakao work로 알림이 간다.
    • 비대면으로 개발을 할 때에도 서로 어떠한 작업을 하고 있는지 kakao work로 알 수 있도록 하였다.
  2. 협업 방법: 애자일
    • 데일리 스크럼:
      • 주 5일, 매일 오전 10시에 "어제 뭐 했고, 오늘은 무엇을 하겠다" 와 같이 나눈 후 각자 개발에 착수했다.
      • 기능 구현을 시작할 때나 완료하였을 때는 기술 스택은 어떤 것을 사용했고, 왜 사용했는지 등에 대해 구체적으로 나누었으며, 더 좋은 방안은 없는지 팀원들의 피드백을 수렴했다.
    • 스프린트:
      • GitHubIssue를 활용.
      • 개개인이 주도적으로 자신의 개발 프로세스를 선정하고 스프린트(Issue) 를 작성했다.
      • 스프린트 는 프로젝트 칸반보드의 ToDo가 되었으며, 이를 각 팀원이 직접 오늘 할 일을 지정하여 In Progress로 옮겨 작업하였다.
      • 팀원이 미처 발견하지 못한 Issue가 있을 경우에는 회장 박우림이 최종 스프린트를 작성하였다.
    • 기술 공유:
      • 스프린트로 작성된 Issue에 어떻게 구현하였는지 기록함으로써 팀원이 함께 성장할 수 있었으며, 이러한 자료는 후배 기수들에게도 좋은 자료와 모범이 될 수 있었다.
      • 테크톡을 2주에 1번씩 진행하였다.
        • 개개인이 CS지식을 전문가가 될 정도로 공부한 뒤 강의하기 때문에 팀원 모두가 보다 효율적으로 다양한 CS 지식을 습득할 수 있었다.

협업1 협업2



🖼 기술 아키텍처

프로덕트 서버의 기술 아키텍쳐

  • 개발 서버도 아래와 동일하나 MariaDB가 별도로 분리되어있지 않고, 하나의 인스턴스로 운영된다는 것이 다르다.
  • Jenkins와 Docker를 사용하여 배포 자동화를 구현하였다.

image