Skip to content

Commit

Permalink
[Test] 비관적 락 테스트 (#219)
Browse files Browse the repository at this point in the history
* [Infra] CI/CD test (#42)

* infra: 빌드 테스트 yml 작성

* infra: DB 정보 추가

* infra: ssh-agent 버전 변경

* infra: known_hosts 추가

* infra: db port 변경

* infra: database test 설정 변경

* infra: DB 환경변수 설정 및 application.yml 생성

* infra: application.yml 동적 생성 스크립트 수정

* infra: 레디스 설정 추가

* infra: redis test 추가

* infra: redis 버전 변경

* infra: redis cli 설치

* infra: application.yml 위치 및 내용 확인

* infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가

* infra: 환경변수 확인 추가

* infra: zip file 만들기 추가, AWS credentials 추가

* infra: 환경변수 이름 변경

- ARN -> AWS_ARN

* infra: s3 bucket에 업로드 추가

* infra: code deploy 추가

* infra: code deploy 수정

* infra: code deploy 수정

* infra: appspec.yml 작성

* infra: application.yml 생성 경로 변경

* infra: application.yml 확인 스크립트 삭제

* infra: application.yml 생성 스크립트 수정

* infra: application-prod.yml 추가

* infra: appspec.yml 수정, 배포를 위한 sh파일 추가

* infra: deploy.yml 이름 변경

- test_deploy -> deploy

* infra: body = null 설정

* infra: develop에 머지되었을 때만 발동하도록 수정

* feat: draw_rank column 이름 수정

* Infra: environment 삭제

* [Infra] CI CD test 3 (#45)

* infra: 빌드 테스트 yml 작성

* infra: DB 정보 추가

* infra: ssh-agent 버전 변경

* infra: known_hosts 추가

* infra: db port 변경

* infra: database test 설정 변경

* infra: DB 환경변수 설정 및 application.yml 생성

* infra: application.yml 동적 생성 스크립트 수정

* infra: 레디스 설정 추가

* infra: redis test 추가

* infra: redis 버전 변경

* infra: redis cli 설치

* infra: application.yml 위치 및 내용 확인

* infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가

* infra: 환경변수 확인 추가

* infra: zip file 만들기 추가, AWS credentials 추가

* infra: 환경변수 이름 변경

- ARN -> AWS_ARN

* infra: s3 bucket에 업로드 추가

* infra: code deploy 추가

* infra: code deploy 수정

* infra: code deploy 수정

* infra: appspec.yml 작성

* infra: application.yml 생성 경로 변경

* infra: application.yml 확인 스크립트 삭제

* infra: application.yml 생성 스크립트 수정

* infra: application-prod.yml 추가

* infra: appspec.yml 수정, 배포를 위한 sh파일 추가

* infra: deploy.yml 이름 변경

- test_deploy -> deploy

* infra: body = null 설정

* infra: develop에 머지되었을 때만 발동하도록 수정

* feat: draw_rank column 이름 수정

* Infra: environment 삭제

* Infra: environment 삭제

* config: jwt 속성을 yml에 설정

* rebase: 원본 develop 브랜치와 병합

* doc: jacoco 파일 생성

* feat: EventLockException 처리 메서드 구현

* fix: url 변경

* refactor: 변수명 변경

* feat: 중복 응모에 대한 처리 구현

* fix: 변수 바인딩 수정

* feat: post 요청에 대한 처리 구현

* feat: swagger 파리미터 안보이도록 설정

* rebase: 원본 repo develop 브랜치와 rebase

* feat: 정적 텍스트 상수 추가

* chore: jacoco 삭제

* feat: 선착순 테스트를 위한 인터페이스 구현

* feat: DB를 사용한 선착순 처리 핸들러 클래스 생성

* feat: 비관적 락을 사용한 선착순 기능 구현

* feat: 선착순 낙관적 락 방식 구현

* refactor: 클래스명 변경

* feat: 선착순 이벤트 기능 여러가지 구현하기

* [Infra] CI/CD test (#42)

* infra: 빌드 테스트 yml 작성

* infra: DB 정보 추가

* infra: ssh-agent 버전 변경

* infra: known_hosts 추가

* infra: db port 변경

* infra: database test 설정 변경

* infra: DB 환경변수 설정 및 application.yml 생성

* infra: application.yml 동적 생성 스크립트 수정

* infra: 레디스 설정 추가

* infra: redis test 추가

* infra: redis 버전 변경

* infra: redis cli 설치

* infra: application.yml 위치 및 내용 확인

* infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가

* infra: 환경변수 확인 추가

* infra: zip file 만들기 추가, AWS credentials 추가

* infra: 환경변수 이름 변경

- ARN -> AWS_ARN

* infra: s3 bucket에 업로드 추가

* infra: code deploy 추가

* infra: code deploy 수정

* infra: code deploy 수정

* infra: appspec.yml 작성

* infra: application.yml 생성 경로 변경

* infra: application.yml 확인 스크립트 삭제

* infra: application.yml 생성 스크립트 수정

* infra: application-prod.yml 추가

* infra: appspec.yml 수정, 배포를 위한 sh파일 추가

* infra: deploy.yml 이름 변경

- test_deploy -> deploy

* infra: body = null 설정

* infra: develop에 머지되었을 때만 발동하도록 수정

* feat: draw_rank column 이름 수정

* Infra: environment 삭제

* [Infra] CI CD test 3 (#45)

* infra: 빌드 테스트 yml 작성

* infra: DB 정보 추가

* infra: ssh-agent 버전 변경

* infra: known_hosts 추가

* infra: db port 변경

* infra: database test 설정 변경

* infra: DB 환경변수 설정 및 application.yml 생성

* infra: application.yml 동적 생성 스크립트 수정

* infra: 레디스 설정 추가

* infra: redis test 추가

* infra: redis 버전 변경

* infra: redis cli 설치

* infra: application.yml 위치 및 내용 확인

* infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가

* infra: 환경변수 확인 추가

* infra: zip file 만들기 추가, AWS credentials 추가

* infra: 환경변수 이름 변경

- ARN -> AWS_ARN

* infra: s3 bucket에 업로드 추가

* infra: code deploy 추가

* infra: code deploy 수정

* infra: code deploy 수정

* infra: appspec.yml 작성

* infra: application.yml 생성 경로 변경

* infra: application.yml 확인 스크립트 삭제

* infra: application.yml 생성 스크립트 수정

* infra: application-prod.yml 추가

* infra: appspec.yml 수정, 배포를 위한 sh파일 추가

* infra: deploy.yml 이름 변경

- test_deploy -> deploy

* infra: body = null 설정

* infra: develop에 머지되었을 때만 발동하도록 수정

* feat: draw_rank column 이름 수정

* Infra: environment 삭제

* Infra: environment 삭제

* config: jwt 속성을 yml에 설정

* rebase: 원본 develop 브랜치와 병합

* doc: jacoco 파일 생성

* feat: EventLockException 처리 메서드 구현

* feat: 중복 응모에 대한 처리 구현

* rebase: 원본 repo develop 브랜치와 rebase

* chore: jacoco 삭제

* feat: 선착순 테스트를 위한 인터페이스 구현

* feat: DB를 사용한 선착순 처리 핸들러 클래스 생성

* feat: 비관적 락을 사용한 선착순 기능 구현

* feat: 선착순 낙관적 락 방식 구현

* refactor: 클래스명 변경

* feat: 선착순 이벤트 기능 여러가지 구현하기

* test: test용

---------

Co-authored-by: DrRivaski <[email protected]>
Co-authored-by: hyeokson <[email protected]>
  • Loading branch information
3 people authored Aug 25, 2024
1 parent d653887 commit d318f65
Show file tree
Hide file tree
Showing 37 changed files with 1,003 additions and 2,337 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ dependencies {

// Redis 설정
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.data:spring-data-redis'

// JWT 설정
implementation 'io.jsonwebtoken:jjwt:0.9.1'
Expand All @@ -89,7 +90,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-aop'

// redisson 설정
implementation 'org.redisson:redisson-spring-boot-starter:3.17.0'
implementation 'org.redisson:redisson:3.16.2'

// cool sms 설정
implementation 'net.nurigo:sdk:4.3.0'
Expand Down
2 changes: 1 addition & 1 deletion scripts/after-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ if [ -f "$JAR_FILE" ]; then
else
echo "JAR file not found: $JAR_FILE"
exit 1
fi
fi
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.softeer.backend.fo_domain.comment.controller;

import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto;
import com.softeer.backend.fo_domain.comment.dto.CommentsResponsePageDto;
import com.softeer.backend.fo_domain.comment.exception.CommentException;
import com.softeer.backend.fo_domain.comment.service.CommentService;
import com.softeer.backend.global.annotation.AuthInfo;
Expand Down Expand Up @@ -39,6 +40,14 @@ ResponseDto<CommentsResponseDto> getComment(@RequestParam(name = "cursor", requi
return ResponseDto.onSuccess(commentsResponseDto);
}

@GetMapping("/comment/page")
ResponseDto<CommentsResponsePageDto> getCommentByPage(@RequestParam(name = "page", defaultValue = "0") Integer page) {

CommentsResponsePageDto commentsResponsePageDto = commentService.getCommentsByPage(page);

return ResponseDto.onSuccess(commentsResponsePageDto);
}

/**
* 기대평을 등록하는 메서드
*/
Expand All @@ -57,4 +66,13 @@ ResponseDto<Void> saveComment(@RequestParam(name = "commentType") Integer commen
return ResponseDto.onSuccess();

}

@PostMapping("/comment/test")
ResponseDto<Void> saveCommentTest(@RequestParam(name = "num") Integer num) {

commentService.saveCommentTest(num);

return ResponseDto.onSuccess();

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.softeer.backend.fo_domain.comment.dto;

import com.softeer.backend.fo_domain.comment.domain.Comment;
import lombok.*;

import java.util.List;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@Builder
@Getter
public class CommentsResponsePageDto {


private int nextPage;

private int totalComments;

private List<CommentPageResponse> comments;

@Getter
@AllArgsConstructor
@Builder
public static class CommentPageResponse {

private Boolean isMine;

private String nickName;

private int commentType;
}

public static CommentsResponsePageDto of(List<Comment> comments, int nextPage) {
List<CommentPageResponse> commentPageResponseList = comments.stream()
.map((comment) -> CommentPageResponse.builder()
.isMine(false)
.nickName(comment.getNickname())
.commentType(comment.getCommentType())
.build())
.toList();

return CommentsResponsePageDto.builder()
.nextPage(nextPage)
.totalComments(comments.size())
.comments(commentPageResponseList)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@
@Repository
public interface CommentRepository extends JpaRepository<Comment, Integer> {

Page<Comment> findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable);
Page<Comment> findAllByIdLessThanEqualOrderByIdDesc(Integer id, Pageable pageable);

Page<Comment> findAllByOrderByIdDesc(Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
import com.softeer.backend.fo_domain.comment.constant.CommentNickname;
import com.softeer.backend.fo_domain.comment.domain.Comment;
import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto;
import com.softeer.backend.fo_domain.comment.dto.CommentsResponsePageDto;
import com.softeer.backend.fo_domain.comment.repository.CommentRepository;
import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Random;

/**
* 기대평 요청을 처리하는 클래스
Expand All @@ -20,9 +23,11 @@
@RequiredArgsConstructor
public class CommentService {
private static final int SCROLL_SIZE = 30;
public static final int LAST_PAGE = -1;

private final CommentRepository commentRepository;


/**
* SCROLL_SIZE 만큼의 기대평을 반환하는 메서드
* <p>
Expand All @@ -40,6 +45,17 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) {
return CommentsResponseDto.of(commentCursor, userId);
}

@Transactional(readOnly = true)
public CommentsResponsePageDto getCommentsByPage(int page) {

Pageable pageable = PageRequest.of(page, SCROLL_SIZE);
Page<Comment> commentPage = commentRepository.findAllByOrderByIdDesc(pageable);

List<Comment> comments = commentPage.getContent();

return CommentsResponsePageDto.of(comments, commentPage.hasNext() ? commentPage.getNumber() + 1 : LAST_PAGE);
}

/**
* 기대평을 저장하는 메서드
* <p>
Expand All @@ -59,4 +75,21 @@ public void saveComment(Integer userId, int commentType) {
.build()
);
}

@Transactional
public void saveCommentTest(int num){

int i=0;
while(i<num){
commentRepository.save(Comment.builder()
.nickname(CommentNickname.getRandomNickname())
.commentType(1 + new Random().nextInt(5))
.userId(null)
.build()
);

i++;
}

}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.softeer.backend.fo_domain.fcfs.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.softeer.backend.fo_domain.fcfs.dto.FcfsHistoryResponseDto;
import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto;
import com.softeer.backend.fo_domain.fcfs.dto.FcfsRequestDto;
Expand Down Expand Up @@ -47,17 +48,24 @@ public ResponseDto<FcfsPageResponseDto> getFcfsTutorialPage() {
return ResponseDto.onSuccess(fcfsPageResponseDto);
}

@PostMapping("/insert")
public ResponseDto<Void> insertFcfsCode(@RequestParam("num") Integer num, @RequestParam("round") Integer round){
fcfsService.insertFcfsCode(num, round);

return ResponseDto.onSuccess();
}

/**
* 선착순 등록을 처리하는 메서드
*/
@PostMapping
public ResponseDto<FcfsResultResponseDto> handleFcfs(@Parameter(hidden = true) HttpServletRequest request,
@Parameter(hidden = true) @AuthInfo Integer userId,
@RequestBody FcfsRequestDto fcfsRequestDto) {
@RequestBody FcfsRequestDto fcfsRequestDto) throws JsonProcessingException {

int round = (Integer) request.getAttribute("round");

FcfsResultResponseDto fcfsResultResponseDto = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto);
FcfsResultResponseDto fcfsResultResponseDto = fcfsService.handleFcfs(userId, round, fcfsRequestDto);

return ResponseDto.onSuccess(fcfsResultResponseDto);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
@AllArgsConstructor
@Getter
@Builder
@EntityListeners(AuditingEntityListener.class)
@Table(name = "fcfs")
public class Fcfs {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.softeer.backend.fo_domain.fcfs.exception.FcfsException;
import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager;
import com.softeer.backend.global.common.code.status.ErrorStatus;
import io.micrometer.core.ipc.http.HttpSender;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
* 선착순 등록 정보 entity repository 클래스
Expand All @@ -24,4 +25,8 @@ public interface FcfsRepository extends JpaRepository<Fcfs, Integer> {

List<Fcfs> findByUserIdOrderByWinningDateAsc(Integer userId);

Optional<Fcfs> findByUserIdAndRound(Integer userId, int round);

Optional<Fcfs> findByCode(String code);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.softeer.backend.fo_domain.fcfs.service.FcfsHandler;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.softeer.backend.fo_domain.fcfs.dto.FcfsRequestDto;
import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto;

public interface FcfsHandler {

public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) throws JsonProcessingException;

}
Loading

0 comments on commit d318f65

Please sign in to comment.