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