-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 #199
Conversation
🪄 Test Coverage Report
|
@@ -11,6 +11,8 @@ | |||
|
|||
public interface GoalRoomQueryRepository { | |||
|
|||
Optional<GoalRoom> findGoalRoomByIdWithPessimisticLock(Long goalRoomId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
final
붙여주세요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵
@@ -290,37 +290,6 @@ class GoalRoomCreateIntegrationTest extends InitIntegrationTest { | |||
); | |||
} | |||
|
|||
@Test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 테스트는 왜 없어진 건가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
골룸과 골룸 펜딩 멤버를 조인하게 되면서, goalRoom.join
메서드 내부에서 모집 중이지 않은 골룸에 대해 참여하려는 경우가 절대 없어요. 그 전에 서비스에서 골룸이 존재하지 않습니다
예외가 터지기 때문에요! (Join 하기 때문에 펜딩 멤버 자체가 없으면 골룸도 조회가 안되더라구요)
그래서 해당 검증(validateStatus
)을 지울까 고민했는데, 비즈니스 로직이 명시적이면 좋겠다 싶어서 그냥 놔두었어요.
대신에 해당 테스트는 발생할 수 없는 경우라서 삭제했어요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨어요 밀리!!!
저는 동시성 문제가 발생할 수 있는 곳이 어딘가 있지 않을까 생각만 했었는데 문제를 스스로 찾아서 해결하신 게 대단하네요 👍
덕분에 낙관적 락, 비관적 락에 대해서 공부하고 동시성 테스트 어떻게 해야 하는지 공부도 해서 재밌는 시간이었습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저번에 공유했던 내용들이라 바로 어프로브 할게요~! 고생하셨어요 밀리!
* [feat/CK-179] 로드맵 카테고리 생성을 구현한다 (#141) * feat: 로드맵 카테고리 생성 인수테스트 작성 * feat: 로드맵 카테고리 생성 서비스 구현 * feat: 로드맵 카테고리 생성 api 구현 * docs: 로드맵 카테고리 생성 docs 작성 * refactor: 인수테스트 카테고리 생성 api로 수정 * feat: 로드맵 카테고리 앞뒤 공백 제거하도록 수정 * [feat/CK-190] 골룸 생성 시 투두리스트를 필수로 입력받는 로직을 제거한다 (#145) * feat: 골룸 생성 시 투두리스트 필수 입력 로직 제거 * refactor: 사용하지 않는 메서드 제거 * [feat/CK-189] 네이버 OAuth 로그인 기능을 구현한다 (#144) * feat: 회원 전화번호, 생년월일 삭제, 이메일 추가 * feat: naver oauth 구현 및 member field 변경 * feat: 네이버 로그인 uri 변경 * docs: 네이버 로그인 API 명세 작성 * feat: NaverOauthService 테스트코드 작성 * test: oauth 기능 테스트 코드 추가 * test: NaverOauthNetworkService 테스트 수정 * chore: git submodule 업데이트 --------- Co-authored-by: ChoiYoungHoon <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * feat: MemberProfile email not null 및 Member salt nullable 설정 * feat: oauth 회원가입 시 아이디에 uuid 붙히도록 수정 * design: 네이버 로그인 버튼 구현 * feat: naver oauth API 통신 구현 * feat: 네이버 로그인 주소 반환 시 응답 코드 200으로 변경 * feat: 네이버 oauth 로그인 시 콜백 변경 및 auth code 받도록 수정 * feat: 네이버 oauth api 수정 * fix: 시작 날짜가 오늘 이전이면서 모집 중인 골룸도 자동으로 시작하도록 수정 * feat: 이미지 파일 get url 요청 시 cloud front로 내려주도록 수정 * fix: 로드맵 태그 여러개일시 데이터 조회 중복 문제 해결 * fix: 파일 경로 생성시 한글과 공백은 인코딩한다 * test: test coverage 수정 * fix: file 확장자 오류를 해결한다 * fix: file이름을 저장할때 uuid로만 저장한다 * feat: 로드맵 태그에 BatchSize 적용 * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * feat: amazon s3 접근 시 credentials 사용하도록 수정 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Jungwoo <[email protected]> Co-authored-by: 부엉이 <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
* feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * [feat/CK-239] Amazon S3 접근 시 credential 정보를 이용하도록 수정한다 (#201) * feat: amazon s3 접근 시 credentials 사용하도록 수정 * test: test application.yml에 credentials 추가 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
* [feat/CK-179] 로드맵 카테고리 생성을 구현한다 (#141) * feat: 로드맵 카테고리 생성 인수테스트 작성 * feat: 로드맵 카테고리 생성 서비스 구현 * feat: 로드맵 카테고리 생성 api 구현 * docs: 로드맵 카테고리 생성 docs 작성 * refactor: 인수테스트 카테고리 생성 api로 수정 * feat: 로드맵 카테고리 앞뒤 공백 제거하도록 수정 * [feat/CK-190] 골룸 생성 시 투두리스트를 필수로 입력받는 로직을 제거한다 (#145) * feat: 골룸 생성 시 투두리스트 필수 입력 로직 제거 * refactor: 사용하지 않는 메서드 제거 * [feat/CK-189] 네이버 OAuth 로그인 기능을 구현한다 (#144) * feat: 회원 전화번호, 생년월일 삭제, 이메일 추가 * feat: naver oauth 구현 및 member field 변경 * feat: 네이버 로그인 uri 변경 * docs: 네이버 로그인 API 명세 작성 * feat: NaverOauthService 테스트코드 작성 * test: oauth 기능 테스트 코드 추가 * test: NaverOauthNetworkService 테스트 수정 * chore: git submodule 업데이트 --------- Co-authored-by: ChoiYoungHoon <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * feat: MemberProfile email not null 및 Member salt nullable 설정 * feat: oauth 회원가입 시 아이디에 uuid 붙히도록 수정 * design: 네이버 로그인 버튼 구현 * feat: naver oauth API 통신 구현 * feat: 네이버 로그인 주소 반환 시 응답 코드 200으로 변경 * feat: 네이버 oauth 로그인 시 콜백 변경 및 auth code 받도록 수정 * feat: 네이버 oauth api 수정 * fix: 시작 날짜가 오늘 이전이면서 모집 중인 골룸도 자동으로 시작하도록 수정 * feat: 이미지 파일 get url 요청 시 cloud front로 내려주도록 수정 * fix: 로드맵 태그 여러개일시 데이터 조회 중복 문제 해결 * fix: 파일 경로 생성시 한글과 공백은 인코딩한다 * test: test coverage 수정 * fix: file 확장자 오류를 해결한다 * fix: file이름을 저장할때 uuid로만 저장한다 * feat: 로드맵 태그에 BatchSize 적용 * [Release] 골룸 대시보드 내의 노드 반환 데이터 추가 및 골룸 목록 조회 시 모든 상태의 골룸을 조회하도록 수정한다. (#188) * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 --------- Co-authored-by: Ohjintaek <[email protected]> * [Release] 동시성 문제 해결 및 캐시를 적용하여 성능 개선을 한다. (#203) * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * [feat/CK-239] Amazon S3 접근 시 credential 정보를 이용하도록 수정한다 (#201) * feat: amazon s3 접근 시 credentials 사용하도록 수정 * test: test application.yml에 credentials 추가 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * chore: properties 버젼 변경 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Jungwoo <[email protected]> Co-authored-by: 부엉이 <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
📌 작업 이슈 번호
CK-237
✨ 작업 내용
💬 리뷰어에게 남길 멘트
🚀 요구사항 분석