1️⃣ Like 테이블 데이터 정합성 문제다음의 시나리오를 가정해보자.일단 해당 시나리오는 일반적인 상황은 아니고 특정 유저의 악성적인 요청에 해당한다.User1이 1번글에 좋아요 요청을 한다.User1이 첫번째 요청과 거의 동시에 다시 1번 글에 좋아요 요청을 한다.첫번째 요청에 대해 중복체크를 조회한다.첫번째 요청에 대한 좋아요 객체를 저장하기도 전에 두번째 요청에 대한 중복체크 조회가 이루어진다. → 두 요청 모두 통과된다.첫번째 요청, 두번째 요청 모두 좋아요 객체가 저장된다.한명의 사용자는 하나의 답변에 대해 한번만 좋아요를 누를 수 있다.좋아요 갯수에 의해 인기답변이 결정되기 때문에 위 시나리오처럼 한명의 사용자가 하나의 답변에 여러 번 좋아요 누르는 것이 가능해지면 비즈니스에 있어 큰 문제가..
데브코스/실습 & 프로젝트
✅ 좋아요 로직/** * 좋아요 추가 */@Transactionalpublic void addLikeToAnswer(LikeServiceRequest request) { createLike(request); // Like 객체 생성 및 저장 Answer answer = answerRepository.findById(request.targetId()) .orElseThrow(() -> AnswerNotFoundException.EXCEPTION); answer.addLikeCount();// Answer의 likeCount 1증가 // 수정 반영 answerRepository.edit(answer);}먼저 Like 객체를 만들어 Like 테이블에 저장하고 관련..
✅ 기존 방식의 문제점while (!categories.isEmpty()) { // 1. AI가 질문 생성 Map createdQuestions = questionAIService.createQuestions(categories); for (String categoryName : createdQuestions.keySet()) { String question = createdQuestions.get(categoryName); // 2. 질문 중복 검증 if (!questionAIService.isSimilarTextExist(question)) { questionAIService.saveQuestion(categoryName, question); ..
✅ 질문 생성 시나리오1️⃣ 질문 생성 23시 30분에 질문 생성 스케줄링이 시작.(하루에 카테고리 별로 1개씩 총 6개 질문 생성)AI에게 질문 생성을 요청하고 받아온 질문의 중복을 검증.질문 생성은 GPT 4o mini 모델에 의해 이루어짐.검증 과정은 text-embedding-3-large 임베딩 모델과 Redis Vector Database를 통해 이루어짐.통과한 질문들은 데이터베이스에 저장한다. Redis Vector Database엔 질문의 벡터 값, MySQL에는 질문을 저장MySQL의 question 테이블에는 question_status라는 컬럼이 존재하는데 이는 세 가지의 Enum값을 가짐CREATED: 질문이 막 생성된 상태ACTIVATED: 질문이 활성화된 상태INACTIVATED..