Skip to content

f-lab-edu/daily-us

Repository files navigation

DailyUs

DailyUs는 Daily + Us(Auth)의 의미를 담은 자기계발 인증 기반 SNS 프로젝트입니다.
사용자는 운동, 독서, 공부, 글쓰기와 같은 일상적인 자기계발 활동을 포스팅하고, 다른 사용자와 팔로우 관계를 맺거나 그룹에 참여하여 서로의 인증 활동을 공유하고 동기를 얻을 수 있습니다.

🛠️ 시스템 설계

🎯 1. 문제 정의

사용자가 게시글을 작성하고 조회하고 수정, 삭제할 수 있는 SNS 서비스를 설계한다.

이 서비스는 다수의 사용자가 텍스트나 이미지 기반 콘텐츠를 업로드하고, 이를 다른 사용자가 피드 형태로 조회할 수 있는 소셜 플랫폼이다.

사용자가 쉽고 빠르게 콘텐츠를 생성하고 소비할 수 있도록 하면서도, 대규모 트래픽 상황에서도 안정적으로 게시글을 저장하고 조회할 수 있도록 한다.


✅ 2. 기능적 요구사항

회원

  • 사용자는 회원가입을 할 수 있다.
  • 사용자는 로그인/로그아웃을 할 수 있다.
  • 사용자는 자신의 정보를 조회할 수 있다.
  • 사용자는 자신의 정보를 수정할 수 있다.
  • 사용자는 회원 탈퇴를 할 수 있다.
  • 사용자는 본인이 작성한 게시물을 조회할 수 있다.
  • 사용자는 본인의 월별 활동 내역을 조회할 수 있다.
  • 사용자는 본인이 속한 그룹을 조회할 수 있다.
  • 사용자는 다른 사람의 프로필을 조회할 수 있다.
  • 사용자는 다른 사람을 팔로우/언팔로우 할 수 있다.

게시물

  • 사용자는 게시물을 작성할 수 있다.
  • 사용자는 게시물을 좋아요를 할 수 있다.
  • 사용자는 본인이 작성한 게시물을 수정할 수 있다.
  • 사용자는 본인이 작성한 게시물을 삭제할 수 있다.
  • 사용자는 본인이 팔로우 혹은 속한 그룹 사람들의 게시물 목록을 조회할 수 있다.
  • 사용자는 게시물을 상세조회할 수 있다.

댓글

  • 사용자는 게시물에 댓글을 작성할 수 있다.
  • 사용자는 게시물의 댓글을 조회할 수 있다.
  • 사용자는 본인이 작성한 댓글을 삭제할 수 있다.
  • 사용자는 본인이 작성한 댓글을 수정할 수 있다.
  • 사용자는 댓글을 좋아요 할 수 있다.
  • 사용자는 댓글에 답글을 작성할 수 있다.

그룹

  • 사용자는 그룹에 참여할 수 있다.
  • 사용자는 그룹을 생성할 수 있다.
  • 사용자는 그룹 목록을 조회할 수 있다.
  • 사용자는 그룹을 탈퇴할 수 있다.
  • 사용자는 본인이 만든 그룹을 해체할 수 있다.
  • 사용자는 본인이 속한 그룹의 랭킹을 조회할 수 있다.
  • 사용자는 그룹의 그룹원을 조회할 수 있다.

⚙️ 3. 비기능적 요구사항

  • 사용자는 게시글 작성, 수정, 삭제 요청에 대해 빠른 응답을 받을 수 있어야 한다.
  • 사용자는 피드 조회 시 짧은 시간 안에 게시글 목록을 받아볼 수 있어야 한다.
  • 사용자는 그룹원 랭킹 조회 시 빠르게 조회할 수 있어야 한다.
  • 일부 서버 혹은 인스턴스에 장애가 발생하더라도 전체 서비스는 계속 동작할 수 있어야 한다.
  • 사용자가 자신의 게시글 혹은 댓글을 수정하거나 삭제한 경우, 이후 조회 시 결과가 올바르게 반영되어야 한다.
  • 장애 시 빠르게 복구 되어야 하며, 사용자는 가능한 서비스 중단을 적게 느껴야 한다.
  • 피드 조회에서 일부 지연은 허용되지만, 최종적으로 저장된 데이터와 일치해야 한다.
  • 사용자는 게시글이나 댓글에 좋아요를 누르거나 취소 시 즉각적인 반응을 확인할 수 있어야 한다.

악의적인 요청, 개인정보 법과 관련된 사항은 고려하지 않는다.


📈 4. 트래픽 산정

  • DAU는 1,000만 명으로 가정한다.
  • 1일 계산은 편의상 100,000초로 근사
  • 피크 QPS는 평균 QPS의 3배로 가정
  • 사용자는 하루 평균 10회 피드를 조회한다고 가정한다.
  • 사용자는 하루 평균 2회의 자기계발 기록을 작성한다고 가정한다.
  • 사용자는 하루 평균 5회의 좋아요 요청을 보낸다고 가정한다.

피드 조회

  • 평균 QPS = (10,000,000 * 10) / 100,000 = 1000
  • 피크 QPS = 평균 QPS * 3 = 3000

기록 작성

  • 평균 QPS = (10,000,000 * 2) / 100,000 = 200
  • 피크 QPS = 평균 QPS * 3 = 600

좋아요

  • 평균 QPS = (10,000,000 * 5) / 100,000 = 500
  • 피크 QPS = 평균 QPS * 3 = 1500

📋 5. API Signature

자원 기능 Method URI
회원 회원가입 POST /api/v1/auth/signup
회원 로그인 POST /api/v1/auth/signin
회원 로그아웃 POST /api/v1/auth/logout
회원 본인 정보 조회 GET /api/v1/users/me
회원 본인 프로필 수정 PATCH /api/v1/users/me
회원 회원탈퇴 DELETE /api/v1/users/me
회원 본인 게시물 조회 GET /api/v1/users/me/posts
회원 본인 활동 내역 조회 GET /api/v1/users/me/activities
회원 본인 그룹 조회 GET /api/v1/users/me/groups
회원 다른 사용자 프로필 조회 GET /api/v1/users/:userId
회원 팔로우 POST /api/v1/users/:userId/follow
회원 언팔로우 DELETE /api/v1/users/:userId/follow
게시물 게시글 목록 조회 GET /api/v1/posts
게시물 게시글 상세 조회 GET /api/v1/posts/:postId
게시물 게시글 작성 POST /api/v1/posts
게시물 게시글 수정 PATCH /api/v1/posts/:postId
게시물 게시글 삭제 DELETE /api/v1/posts/:postId
게시물 게시글 좋아요 POST /api/v1/posts/:postId/like
게시물 게시글 좋아요 취소 DELETE /api/v1/posts/:postId/like
댓글 댓글 조회 GET /api/v1/posts/:postId/comments
댓글 댓글 작성(답글 포함) POST /api/v1/posts/:postId/comments
댓글 댓글 수정 PATCH /api/v1/comments/:commentId
댓글 댓글 삭제 DELETE /api/v1/comments/:commentId
댓글 댓글 좋아요 POST /api/v1/comments/:commentId/like
댓글 댓글 좋아요 취소 DELETE /api/v1/comments/:commentId/like
그룹 그룹 목록 조회 GET /api/v1/groups
그룹 그룹 상세 조회 GET /api/v1/groups/:groupId
그룹 그룹 생성 POST /api/v1/groups
그룹 그룹 삭제 DELETE /api/v1/groups/:groupId
그룹 그룹 참여 POST /api/v1/groups/:groupId/join
그룹 그룹 나가기 DELETE /api/v1/groups/:groupId/leave
그룹 그룹원 조회 GET /api/v1/groups/:groupId/members
그룹 그룹 내 랭킹 조회 GET /api/v1/groups/:groupId/rank

📁 6. ERD

ERD


🖼️ Prototype

Prototype

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages