-
Notifications
You must be signed in to change notification settings - Fork 8
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
[BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) #604
Conversation
6cab08a
to
22ab3aa
Compare
Test Results 52 files 52 suites 9s ⏱️ Results for commit 228c331. ♻️ This comment has been updated with latest results. |
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.
뽀로로
말한거나 의도대로면 바로 상태를 바꿔서 명확하게 동작이 될 거 같아요.
다만, 이를 테스트 하기 어려운게 문제겠네요 🥲🥲
도커에 데이터를 세팅하고
로컬에서 포트 다르게 두개의 서버를 열고 태스크를 어떻게 차지하는지 확인하면 될 거 같긴한데 어렵겠죠..?🥲
@ServiceTest | ||
@Import(TestAsyncConfig.class) | ||
class AutomaticMatchingExecutorTest { | ||
class AutomaticMatchingExecutorTest extends MatchingTest { |
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.
extend 한 이유가 있나요?
단순 데이터를 미리 세팅할 이유라면
이전 ContextInitializer
처럼 관리 포인트가 늘어나거나 잘못 사용될 의도는 없을까 걱정되서 물어봅니당
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.
extend 로 둔 이유가 너무 많은 세팅이 필요한 거였다면,
차라리 이 세팅 데이터를 한 시나리오 픽스쳐로 빼는건 어떠신가요?
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.
시나리오 fixture
로 분리하더라도
조이썬이 지적한 것처럼 ContextInitializer
와 같은 관리 포인트가 늘어난다는 점에서는 동일하지 않을까요? 🤔
확실히 지금까지 테스트 작성하면서 ContextInitializer
나 Datainitializer
처럼
테스트들을 위해 세팅된... 어떤 값들을 관리하는 게 진짜 빡세더라고용...
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.
상속받은 추상 클래스는 데이터 세팅보다는 Mock 객체를 통해 테스트 환경에서 사용할 결과만 설정하는 역할을 합니다.
실제 테스트 로직에서는 Mocking된 값을 반환해준다라는 흐름만 제공하여 딱히 데이터를 관리할 부분은 없다고 생각들어
기존 DataInitialzier나 ContextInitializer와는 다른 느낌이긴 합니다만 아무튼 의견 받았으니 수정할게요~! 👍
@@ -7,7 +7,6 @@ | |||
import org.junit.jupiter.params.provider.CsvSource; |
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.
submodule 쪽에 의견을 남길수 없어서 여기 남깁니다.
config push 한 내용을 제거할 수 있으면 제거해주세요
( 최신 버전에서 10월 4일 cfed68 로 변경된거 같아요 )
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.
확인이요~! 수정합니당~
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public interface AutomaticMatchingRepository extends JpaRepository<AutomaticMatching, Long> { | ||
|
||
Optional<AutomaticMatching> findByRoomId(long roomId); | ||
@Lock(LockModeType.PESSIMISTIC_WRITE) |
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.
여기서 의미하는 낙관적 락이
실제 DB 에 락을 걸어서 다른 서버의 트랜잭션에서 접근하지 못하게 막는다는 뜻 맞나요?
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.
비관적 락이고 PERSSIMISTIC_WRITE 이기 때문에 베타적 잠금으로 동작할 것 같습니다.
그렇다고 하면 락을 획득한 쓰레드 외엔 락올 놓기 전까지 update, delete, insert 가 막히겠군요!
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.
실제 DB 에 락을 걸어서 다른 서버의 트랜잭션에서 접근하지 못하게 막는다는 뜻 맞나요?
넵 맞습니다. @Lock
을 사용하면 실제 DB단에 락을 걸어 다른 서버 간 동시성도 막을 수 있습니다.
private final AutomaticMatchingRepository automaticMatchingRepository; | ||
|
||
@Async | ||
@Transactional |
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.
�automatic 을 분리한 부분도 좋고, 메서드 레벨로 비동기를 내려 범위를 최소한으로 한 부분도 좋은 것 같습니다!
다만, 조이썬 리뷰와 마찬가지로 테스트할 수 있는 수단이 있으면 좋겠다는 생각이 들어요.
비동기다보니 코드만으론 행동을 유추하기 어렵다는 점이 있어서 그런 거 같아요..
서브모듈 커밋이 돌아간 것 때문에 RC 드립니다.
다른 부분은 의견 제시이니 편하게 생각하시면 될 것 같습니다!
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public interface AutomaticMatchingRepository extends JpaRepository<AutomaticMatching, Long> { | ||
|
||
Optional<AutomaticMatching> findByRoomId(long roomId); | ||
@Lock(LockModeType.PESSIMISTIC_WRITE) |
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.
비관적 락이고 PERSSIMISTIC_WRITE 이기 때문에 베타적 잠금으로 동작할 것 같습니다.
그렇다고 하면 락을 획득한 쓰레드 외엔 락올 놓기 전까지 update, delete, insert 가 막히겠군요!
@@ -7,7 +7,6 @@ | |||
import org.junit.jupiter.params.provider.CsvSource; |
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.
그러게요 예전 커밋으로 돌아갔네요
확인 부탁드려요!!
@ServiceTest | ||
@Import(TestAsyncConfig.class) | ||
class AutomaticMatchingExecutorTest { | ||
class AutomaticMatchingExecutorTest extends MatchingTest { |
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.
extend 로 둔 이유가 너무 많은 세팅이 필요한 거였다면,
차라리 이 세팅 데이터를 한 시나리오 픽스쳐로 빼는건 어떠신가요?
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.
PR 잘 적혀 있어서 이해하기 쉬웠네용!
도움되는 링크까지 있어 정말 좋았습니다~~ 👍
간단한 질문만 한 가지 남겨뒀어용. ㅇ.ㅇ 고생하셨습니다~~!
|
||
matchingService.match(roomId, pullRequestInfo); | ||
} | ||
|
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.
@Async | ||
@Transactional | ||
public void match(long roomId) { | ||
//TODO: 트랜잭션 분리 |
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.
트랜잭션 분리라는 게 정확히 어떤 태스크를 뜻하는 건가요? ㅇ.ㅇ
이번 PR에서 수행된 TODO인가요?
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.
제가 적어둔 "트랜잭션 분리" TODO는 매칭 실패 시 예외가 발생했을 때 데이터를 저장하기 위해 명시적으로 트랜잭션을 선언한 부분입니다.
현재는 코드에서 직접 TransactionTemplate을 사용해 트랜잭션을 관리하고 있지만, 이를 더 효율적으로 관리하기 위해 트랜잭션 전파 속성을 활용해 별도의 클래스로 분리할 계획입니다.
@ServiceTest | ||
@Import(TestAsyncConfig.class) | ||
class AutomaticMatchingExecutorTest { | ||
class AutomaticMatchingExecutorTest extends MatchingTest { |
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.
시나리오 fixture
로 분리하더라도
조이썬이 지적한 것처럼 ContextInitializer
와 같은 관리 포인트가 늘어난다는 점에서는 동일하지 않을까요? 🤔
확실히 지금까지 테스트 작성하면서 ContextInitializer
나 Datainitializer
처럼
테스트들을 위해 세팅된... 어떤 값들을 관리하는 게 진짜 빡세더라고용...
일단 하나의 서버로 여러 쓰레드에서 동시에 작업을 동작하도록 테스트했을 때는 문제가 없었고, |
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> * [FE] FallbackImage 잘 안 뜨는 문제 해결하기(#631) (#633) * fix: 로딩 전에 src 먼저 빈 문자열인지 판별 * fix: useState 초깃값으로 src 넣어주기 --------- Co-authored-by: jinsil <[email protected]> * [FE] 콜리네 서비스 제공 후 받은 피드백 반영하기 (#628) (#630) * feat: 평가 옵션의 텍스트를 아쉬움과 만족만 표시하도록 수정 * design: 피드백 모아보기 페이지의 피드백카드 디테일 수정 * feat: 피드백 모아보기 페이지의 피드백카드에 textarea 추가 * feat: 피드백 모아보기 페이지에서 키워드가 없을 때 처리 * design: 피드백 폼의 갭 수정 * design: 피드백 카드 컴포넌트에 textarea를 사용하면서 불필요한 디자인 속성 삭제 * fix: 보안 관련 경고를 해결하기 위해 target="_blank"를 사용하는 곳에 rel="noreferrer" 추가 * fix: 모달 문구 방 생성과 수정 다르게 렌더링 * refactor: EllipsisText라는 공통 컴포넌트 만들어서 텍스트가 온전히 보이지 않는 문제 해결 * design: Icons 사이즈 조정 및 단위 통일 * feat: 방카드모달에서 키워드 없을 때 처리 * design: 리뷰어, 리뷰이 테이블 아이디 가운데 정렬 * feat: 리뷰어/리뷰이 피드백 작성 모달 확인시 textarea로 보여주기 * feat: 리뷰어/리뷰이 피드백 모달 내에 키워드 없을 때 처리 * design: 키워드 정렬 수정 * design: 코드리뷰완료 버튼 색 수정 * design: 리뷰어/리뷰이 피드백 모달에 gap 조정 * feat: 코드 추천 항목은 비공개임을 명시 * refactor: HoverStyledLink를 이용해서 가이드페이지 제외 모든 컨텐츠 링크 스타일링 통일 * refactor: HoverStyledLinkForGuide를 이용해서 가이드페이지 내부 링크 스타일링 통일 * fix: MemoryRouter를 이용해 테스트 환경에 라우터 컨텍스트 제공 * feat: 놓친 EllipsisText 추가 * fix: Textarea의 글자수표시영역이 div에 같이 안 잡히는 에러 해결 * refactor: 피드백모달의 view모드일 때 분기를 Textarea 내부에서 하기 --------- Co-authored-by: 00kang <[email protected]> * [FE] 모달페이지 웹 접근성 추가(#618) (#641) * feat: 선언적으로 지정된 요소에만 Tab키 선택이 가능하도록 하는 FocusTrap 컴포넌트 추가 * fix: 버튼이 disabled 인 경우 tab으로 선택이 안되도록 수정 * feat: dropdown의 경우 open되면 해당 옵션만 tab으로 선택 가능하도록 추가 * feat: Modal 에 FocusTrap 추가 * style: OptionSelect 컴포넌트가 focus 시 outline이 보이지 않는 문제 수정 * fix: 룸카드 컴포넌트를 버튼으로 만들어 tab으로 접근 및 보이스오버에서 한 번에 읽을 수 있도록 변경 * fix: 헤더의 요소를 클릭 가능하도록 변경 및 시멘틱 태그 추가 * chore: 피드백 프로세스 버튼을 tab으로 선택이 가능하도록 태그를 변경 및 애니메이션 추가 * feat: 피드백 모아보기 페이지에 tab키로 사용 가능하도록 추가 * fix: 타입명과 컴포넌트명이 일치한 문제 해결 * fix: a 링크에 noreferrer 추가 * style: RoomCard의 요소를 button -> div 로 롤백 * feat: 프로필 드롭다운시 해당 요소만 포커싱이 되도록 추가 * feat: 피드백 모달에서 탭키로 사용이 가능하도록 추가 * refactor: 이전요소 포커싱 함수 리팩토링 * chore: 헤더에 불필요한 주석 제거 --------- Co-authored-by: Lee sang Yeop <[email protected]> Co-authored-by: 최진실 <[email protected]> * [BE] 리뷰 서비스 리팩토링(#615) (#636) * refactor: 리뷰 클라이언트 패키지 이동 및 리팩토링 * refactor: 리뷰 서비스 리팩토링 * fix: 충돌 해결 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 수정 시, 현재 인원 초기화 + 방 삭제 / 수정 시 오픈 상태일때만 수정하게 변경(#637) (#639) * refactor: 리뷰 클라이언트 패키지 이동 및 리팩토링 * refactor: 리뷰 서비스 리팩토링 * fix: 충돌 해결 * chore: ExceptionType 명확하게 변경 * fix: 잘못된 매개변수 변경 * refactor: reader,writer 통해 기능 분리 * refactor:피드백 반영 * test: 테스트 예제 추가 * fix: 방 상태를 그대로 가지게 변경 --------- Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
📌 관련 이슈
✨ PR 세부 내용
지금 PR에서는 두 가지 작업을 했습니다.
하나씩 차례로 설명드릴게요!
기존 코드에서는 만약 무중단 배포나 서버 성능을 위해 여러 대의 WAS가 동작할 때 등록된 스케줄 작업이 중복으로 실행되게 합니다.
저희 서비스를 예로 들면, 매칭이 여러번 된다거나 사용자 프로필을 여러번 업데이트 한다거나 하는 치명적인 오류를 범할 수 있습니다.
이 문제를 해결하기 위해 먼저 PENDING 상태의 스케줄 작업을 찾습니다.
이때 MySql의 Lock을 사용하여 동시에 등록된 스케줄 작업을 찾고 수행하는 것을 막아주었습니다.
(여긴 -> 동시성 처리 방법에 대해 설명해준 블로그인데 도움이 정말 많이 되었습니다.
한번 시간 되실 때 꼭 읽어보세요~)
하지만 Lock을 사용할 때 발생할 수 있는 문제는
Lock 범위 안에 스케줄 작업(예: 매칭, 업데이트)이 포함되면, Lock을 점유하는 시간이 길어진다는 점입니다.
이로 인해 다른 트랜잭션들이 Lock을 기다리게 되고, 교착 상태에 빠질 위험이 있습니다.
이를 해결하기 위해 실제 스케줄 작업은 비동기로 별도의 쓰레드에서 처리하도록 하였습니다.
코드에 나와있는 UpdateExecutor의 update(roomId) 메서드는 비동기로 되어있습니다.
이를 통해 Lock 범위 내에서는 비동기 작업이 처리되도록 요청만 보내고, 스케줄 상태를 PENDING에서 DONE으로 업데이트합니다.
이렇게 하여 Lock을 잡는 시간은 짧아지고, 실제 작업은 별도의 비동기 쓰레드에서 처리될 수 있었습니다.
P5: 클래스명
현재 클래스명인 UpdateExecutor, MatchingExecutor 등 스케줄 관련 작업을 하는 클래스들의 이름이 가독성이 좋다 생각하지 않아요.
다만, 조이썬이 리팩토링 하고 있는 작업과 겹치는 부분이 있어 충돌 걱정 때문에 수정하지 않고 그대로 두었습니다.
클래스명에 대한 피드백은 넘어가주셔도 좋을듯해요~