-
Notifications
You must be signed in to change notification settings - Fork 0
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
refactor: 매칭 API 엔드포인트 구조 개선 #240
Conversation
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가 무조건 죽을 것 같다는 준수의 의견이 있었습니다.
val result = | ||
matchedDao.findMatchResultByUserIdAndTeamId(userId, meetingTeamId) | ||
?: throw UnauthorizedTeamAccessException() | ||
@Cacheable( |
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.
Cacheable의 동작 원리와 데이터 처리량, 처리 속도 등에 대해 알고 계신채로 사용하신 걸까요?
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.
@Cacheable
이 Spring AOP 기반으로 동작하여 동일 서비스 내부에서 직접 호출할 경우 캐싱이 동작하지 않는다는 점을 놓치고 있었습니다. 이 문제를 해결하기 위해 MatchingService
의 캐시 적용 메서드를 외부에서 호출하도록 개선했습니다.
) | ||
fun getMatchResult(userId: Long, teamType: TeamType, season: Int): MatchResultResponse { | ||
// 미팅 참여 여부 확인 | ||
val participation = getUserMeetingParticipation(userId, season) |
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 커넥션이 많아서 Match Layer는 커넥션을 줄이는데 초점을 둬야할 것 같습니다
4317dea
to
86b37ab
Compare
- /matches/{matchId}/result -> /matches/result로 변경 - 요청 파라미터를 teamId에서 teamType으로 변경
- 파라미터 teamType으로 변경 - 캐시 키 형식 변경
- 책임 분리를 위해 새로운 DTO 생성 - ArrayList 변환 로직에서 preference 변환 제거
- Entity의 Lazy Loading된 interest 컬렉션을 DTO 변환 시 즉시 초기화하도록 수정
86b37ab
to
4433b14
Compare
🔍️ 이 PR을 통해 해결하려는 문제가 무엇인가요?
기존 API 구조(#219)에서는 매칭된 상대방 정보를 조회하기 위해 세 번의 API 호출이 필요했습니다:
/me/participations
로 시대팅 신청 내역을 조회/teams/{teamId}/result
로 매칭 결과 조회/{matchId}/partner
로 상대방 정보 조회기존 API 구조의 문제점은 다음과 같습니다:
✨ 이 PR에서 핵심적으로 변경된 사항은 무엇일까요?
API 엔드포인트 통합
/{teamType}/info
: 매칭 정보 조회 (성공 여부 및 상대방 정보)파라미터 변경
관련 서비스 로직 개선
캐시 웜업 기능 구현
/api/admin/cache/warmup
)에러 처리 개선
INVALID_INPUT_VALUE
로 일관된 에러 응답 처리🔖 핵심 변경 사항 외에 추가적으로 변경된 부분이 있나요?
🙏 Reviewer 분들이 이런 부분을 신경써서 봐 주시면 좋겠어요
🩺 이 PR에서 테스트 혹은 검증이 필요한 부분이 있을까요?
📌 PR 진행 시 이러한 점들을 참고해 주세요
📝 Assignee를 위한 CheckList