아니 게시글이랑 댓글을 작성하는데 영화 티켓을 준다고? 프로젝트 1일차 정리

원녕·2024년 3월 26일
0

TIL

목록 보기
21/21

❤️ Today I Learned

매일 저녁 공부를 마무리하면서 제출해주세요.

하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)

📕 내용

  • 오늘의 학습 키워드 : 동시성, 캐싱,Sseemiter

브레인스토밍

티켓예매
선착순 할인쿠폰(동시성이슈) : Post방식이여서 read가 아님
-> 관리자가 하루에 한번 게시글 올리는데 (이미지로 제공) 그 글에 올리면 할인쿠폰 지급 == 포인트
(순번에 따라서 동시성 이슈 발생 = 대용량트레픽 까지 같이 잡을수 있을듯)
-> mail로 쿠폰 제공
티켓등록시 이미지(s3)
(캐싱처리된 글) -> 관리자 글
티켓결제 포인트/할인쿠폰
게시글,댓글 crud,포인트 지급
상품 도메인 등록 -> ex) 메가박스 1인 포인트 15000(소모) -> 쿼리최적화 가능
관리자 등록 게시글에만 유저가 댓글달시 포인트 지급 -> 메일로 전달
게시글 댓글 제일 많은 사람 포인트 지급 -> 1등~3등까지 매겨서(랭킹 시스템)
배민 -> 음식목록 -> 세부목록 => 계속계속 불러오는거니까 관리자 글을 캐시에 넣어놓자
관리자 글 게시 , 일반 게시글(?)
board -> 관리자게시글(대량의 포인트),일반게시글(소량의 포인트),관리자공지게시글
관리자 게시글 -> status 2
게시글 제한수 -> scahduler?? -> 제약 게시글이기때문에 유저한테 필드를 주고 ++해야되는데 12시가 되면 하루가
지나서 제한을 풀어줘야함 -> scahdule cron 어노테이션

	-- 게시글 조회 --
	
비동기로 Post -> get {api두개로 나누기}
cash에다가 저장한후 scheduler 
게시물 조회할떄마다 게시물 id하나씩 입력하는 방식 -> db에 데이터가 많이 쌓이는 문제 발생
전체게시물 조회 -> count만 -> dto에 다 담았음
단일 게시물 조회 -> 댓글, 게시물 조회

도메인의 필드에 어떤값이 들어갈지 생각해보기(필요한 부분만).

기능 : 포인트지급, 상품 등록(교환권),
상품 : 영화 티켓 교환권(이미지로된 티켓), 소개글(티켓 info),팝콘 교환권,가격
{상품명,상품이미지,상품소개}
팝콘 교환권은 언제 발급받을수 있는건가요?

-- 이거 할 시간에 다른 기능을 하는게 낫지않나? (보류) --
게시글 작성
유저간 팔로우
게시글 좋아요
랭킹

도메인,연관관계 복잡해짐,기능면에서 시간소요가 커질것같음

그러면
게시글이나 댓글을 몇 개 이상달면 포인트 지급
그것으로 영화 티켓 예매

write -> 동시성
read -> 수정할게 별로 없기때문에 동시성 이슈라고 말하기 어렵다.

Open api 최소 하나정도

동시성 문제 해결 할 주제

변하지않는 정보를 캐시를 사용해서 저장
불러올때 캐시에서 조회

총정리

티켓 예매 시스템 설계

시스템 요구사항

  • 선착순 할인 쿠폰 제공 -> 관리자 게시글에 댓글을 작성한 선착순 10명만
  • 티켓 등록 및 결제 기능 -> point에서 price뺀값으로 추산, 단 point가 price보다 적으면 exception 발생
  • 포인트 지급 및 관리 -> 게시글 작성시 소량의 포인트 지급 (하루 최대 3개로 지정, scheduling을 이용한 자정이 넘으면 초기화되는 시스템 도입)
  • 게시글 및 댓글 기능 -> 게시글을 조회할때 단일조회와 전체조회로 나눠서 전체 게시물 조회할때는 게시물 개수만 나오도록, 단일 조회할때는 게시글과 게시글에 달린 댓글을 조회하도록
  • 상품 등록 및 관리 -> 상품명, 이미지, 소개, 가격 정보를 관리하도록
  • 관리자 게시글 및 일반 게시글 구분 -> 관리자 게시글은 캐시로 관리, 일반 게시글은 데이터베이스로 관리?
  • 게시글 제한 기능 -> 게시글을 매크로를 이용해서 포인트를 벌어들이는 포인트 제도 악용을 방지하기위한 scheduler도입
  • 비동기 처리 -> **아직 미정이지만 조회수로 조회할 경우 GetMapping안에서 PostMapping을 통해서 get으로 처리
  • %% 캐싱 및 스케줄러 활용 %%-> 서버가 꺼지면 redis의 데이터가 사라지는 인메모리 캐시를 이용해서 쿠폰, 토큰,관리자 글 등을 저장하여 관리
    -> 근데 관리자 게시글을 캐싱해서 사용하면 서버가 꺼지면 그 게시글들은 다 사라지지않나요?

trouble : 관리자 글을 캐싱 처리 해버리면 관리자 글에 댓글이 달렸을때 캐시에는 댓글이 달려도 댓글에 관한 부분이
반영되지 않아서 갱신이 어렵다.
solution : 관리자 글을 캐싱처리 부분에서 제외시키고 로그인 부분(토큰)에만 넣기로함.

시스템 설계

1. 티켓 예매

  • 티켓 예매는 포인트사용을 통해 이루어집니다.
  • 관리자는 티켓(할인쿠폰 이미지)을 메일로 발송합니다.
  • 유저는 이메일로 발급된 티켓을 통해서 할인된 가격으로 영화 예매를 할수있다.

2. 포인트 시스템

  • 유저는 게시글 작성 등을 통해 포인트를 얻을 수 있습니다.
  • 관리자 게시글에 선착순으로 댓글을 달면 더 많은 포인트(할인쿠폰)를 얻을 수 있습니다.
  • 게시글 댓글 수에 따라 순위를 매기고 상위권에게 포인트를 지급합니다.

3. 게시글 및 댓글 관리

  • 게시글은 관리자 게시글과 일반 게시글로 구분됩니다.
  • 관리자 게시글은 티켓 예매 및 포인트 지급에 사용됩니다.
  • 일반 게시글은 자유로운 소통 공간으로 활용됩니다.
  • 게시글 제한 기능을 통해 특정 시간 이후에는 게시글 작성을 제한할 수 있습니다.

4. 도메인 및 캐싱

  • 상품 도메인을 등록하여 포인트 소모 및 쿼리 최적화를 수행합니다.
  • 관리자 게시글은 캐싱하여 조회 속도를 높입니다.

5. 비동기 처리 및 스케줄러

  • %% 게시글 조회는 비동기 방식으로 처리합니다. %%
  • 스케줄러를 사용하여 게시글 제한 기능 및 캐싱 업데이트를 자동화합니다.
profile
메타인지하는 개발자

0개의 댓글