프로젝트/프로젝트 회고

예약 구매 프로젝트 회고

젤리의it 2024. 2. 27. 19:00

1. 예약 구매

  • 사용자간 커뮤니티를 할 수 있는 소셜미디어 서비스를 제공
    • 게시글 작성, 댓글 작성, 좋아요, 팔로우, 뉴스피드 가능
  • 상품을 구매할 수 있는 서비스 제공
    • 일반 상품과 정해진 시간에 상품을 구매할 수 있는 예약 상품 구매 가능

2. 프로젝트 요구사항

  • 소셜미디어 서비스
    • jwt 토큰을 사용해 로그인, 로그아웃
    • 구글 smtp를 사용해 사용자 인증
    • 프로필 이미지를 업로드, 수정
    • 게시글, 댓글, 좋아요, 팔로우 기능
    • 뉴스피드 기능
      • 친구의 소식을 알 수 있음(팔로잉, 팔로워의 소식)
      • 내가 작성한 글의 좋아요, 댓글 알림
  • 예약 구매 서비스
    • 일반 상품과 예약 구매 상품을 구분
      • 예약 상품은 정해진 시간에 판매하는 상품을 지칭
    • 상품을 구매하는 단계
      • 상품에서 주문하기 버튼 - 주문 - 결제하기
      • 주문과 결제 단계에서 구매자의 단순 변심으로 전체의 20%가 취소한다고 가정
    • redis를 사용한 실시간 재고 관리
      • 예약 상품의 판매 시간이 되면 먆은 트래픽이 발생한다고 가정
      • 구매할 예약 상품의 Id와 재고수를 저장

3. ERD 및 프로젝트 아키텍처

소셜미디어 서비스 ERD

예약 구매 서비스 ERD

소셜미디어 서비스 아키텍처

  • UserService는 유저 회원가입, jwt 토큰 발급, 인증, 프로필 정보를 저장
    • 유저의 회원 가입은 이메일 인증 후 가입 정보 저장, 프로필 저장
    • 유저가 로그인시 jwt 토큰 발급
    • 유저가 토큰 사용시 토큰에서 정보를 추출
    • 프로필에 이미지를 저장할 수 있음
  • ActivityService는 게시글, 댓글, 좋아요, 팔로우 정보 저장
    • 게시글 작성, 게시글 좋아요
    • 댓글 작성, 대댓글 작성, 댓글 좋아요
    • 팔로우(친구 맺기)
  • NewsfeedService는 내 친구 소식(팔로우, 팔로잉), 내 소식 정보 저장
    • 뉴스피드(내 친구의 소식)
      • 게시글 작성
      • 게시글 좋아요
      • 댓글 작성
      • 팔로잉
    • 내 소식
      • 내가 작성한 게시글에 좋아요
      • 내가 작성한 게시글에 댓글 작성

예약 구매 서비스 아키텍처

  • ProductService
    • 일반 상품, 예약 상품의 정보를 저장
    • Stock 서비스와 분리
  • OrderService
    • 주문한 상품의 정보를 저장
    • 80%의 주문은 성공하고 20%주문은 구매자의 변심으로 취소했다고 가정
  • PaymentService
    • 결제한 상품의 정보를 저장
    • 80%의 주문은 성공하고 20%주문은 구매자의 변심으로 취소했다고 가정
  • StockService
    • 일반 상품과 예약 상품의 재고 저장
    • 예약 상품의 경우 redis를 사용해 재고 관리
      • 상품 판매 시작 시간이 정해져 있고 트래픽이 많을 것으로 예상

모듈

서비스 이름포트역할

Service Port Description
UserService 8080 유저 정보 저장
ActivityService 8081 유저 활동 저장
NewsfeedService 8082 뉴스피드 저장
GatewayService 8083 게이트웨이
ProductService 8084 상품 정보 저장
OrderService 8085 주문 정보 저장
PaymentService 8086 결제 정보 저장
StockService 8087 재고 정보 저장

4. 프로젝트 사용 기술

java: 17

springboot: 3.2.2

mysql: 8.0

redis

docker

github

git