Skip to content

Conversation

@whqtker
Copy link
Member

@whqtker whqtker commented Oct 25, 2025

관련 이슈

작업 내용

  • 중간에 요구사항이 변경되었기에 커밋 순으로 보시면 복잡하실 수 있습니다. 전체 파일 변경에서 보시는 게 나을 수 있습니다 !

/rooms/{room-id} 에서 응답의 senderId 는 mentorId 가 아니라 chat_participant 테이블의 id 이다. [참고]

  • 응답의 senderIdmentorId 또는 siteUserId 가 되어야 합니다.
  • 기존에는 chatParticipantId 로 설정되어 있었고(chatMessagesenderIdchatParticipantId 임), 이에 senderIdchatParticipant 를 조회한 후, 다시 siteUser 를 배치로 찾는 로직을 작성했습니다.
  • 92655d6

{{URL}}/mentor/mentorings?size={{default-size}}&page={{default-page}} 에서 응답으로 mentoringId 말고 roomId 를 포함하도록 [참고]

  • 기존에 구현된 mapMentoringIdToChatRoomIdWithBatchQuery 를 사용하여 구현했습니다.
  • 51158ff

rooms/{room-id}/partner 응답의 partnerId 가 siteUserId 가 아니라 mentorId 가 되도록 [참고]

응답에서 사용자 관련 id는 siteUserId로 통일한다. [참고]

특이 사항

  • 필요하다고 생각한 부분에 주석 추가했습니다 ! 개인적으로 제가 헷갈려서요 ..

리뷰 요구사항 (선택)

  • 더 좋은 구현 방법이 있다면 말씀해주세요 !

@coderabbitai
Copy link

coderabbitai bot commented Oct 25, 2025

Walkthrough

  1. ChatService에서 채팅 메시지 송신자 매핑 로직이 추가되어, 메시지 송신자 ID(senderId) 대신 채팅 참여자(ChatParticipant)의 siteUserId를 외부 발신자 ID(externalSenderId)로 사용해 ChatMessageResponse를 생성하도록 변경되었습니다.
  2. MentorRepository가 주입되고 생성자 시그니처가 MentorRepository를 받도록 업데이트되었습니다.
  3. ChatService에 buildParticipantIdToParticipantMap와 buildChatMessageResponses 같은 private 헬퍼 메서드가 추가되어, 메시지 목록을 한 번에 조회한 참여자 매핑으로 변환하고 응답 리스트를 생성합니다.
  4. MentoringForMentorResponse 레코드의 첫 컴포넌트명이 mentoringId(long)에서 roomId(Long)로 변경되고, 정적 팩토리 메서드 시그니처에 roomId 파라미터가 추가되었습니다.
  5. MentorRepository에 siteUserId 집합으로 멘토를 일괄 조회하는 findAllBySiteUserIdIn(Set) 메서드가 추가되었습니다.
  6. MentoringQueryService에 멘토링 ID와 채팅룸 ID를 일괄 조회해 매핑하는 private 헬퍼(mapMentoringIdToChatRoomIdWithBatchQuery)가 추가되고, 이를 사용해 응답에 chatRoomId를 포함하도록 변경되었습니다.
  7. MentoringQueryServiceTest가 응답 구조 변경(verifyStatus 및 roomId 포함, 일부 항목에서 nickname 검증) 사항에 맞춰 어서션과 테스트 픽스처를 업데이트했습니다.
  8. ChatMessage, ChatParticipantResponse, ChatMessageResponse 등 몇몇 클래스의 필드에 주석이 추가되었으며, 공개 API 서명에는 변화가 없습니다.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50분

  • ChatService의 멘토 매핑 로직과 생성자 시그니처 변경으로 인한 DI 및 사용 지점 검토.
  • toChatMessageResponse 시그니처 변경과 이를 호출하는 모든 호출부 전파 확인.
  • MentoringForMentorResponse 레코드 구성 변경에 따른 호출부(팩토리 메서드 포함) 영향 점검.
  • mapMentoringIdToChatRoomIdWithBatchQuery의 쿼리 패턴(N+1 가능성) 및 성능 영향 검토.
  • 테스트 업데이트가 도메인 기대 동작을 올바르게 검증하는지 확인.

Suggested reviewers

  • wibaek
  • lsy1307
  • Gyuhyeok99
  • nayonsoso

Pre-merge checks and finishing touches

✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed 제목은 '멘토 및 채팅 관련 API 응답 수정'으로 변경 사항의 주요 내용(API 응답 리팩토링)을 명확하게 요약하고 있습니다.
Description check ✅ Passed PR 설명은 템플릿의 필수 섹션(관련 이슈, 작업 내용, 특이 사항)을 모두 포함하며, 각 변경 사항을 기능 단위로 상세히 설명하고 있습니다.
Linked Issues check ✅ Passed PR의 변경 사항들이 이슈 #536의 세 가지 주요 요구사항(senderId 수정, mentoringId→roomId 교체, partnerId 정정)을 모두 구현하고 있습니다.
Out of Scope Changes check ✅ Passed 모든 변경 사항이 이슈 #536의 범위 내에서 이루어졌으며, 멘토 및 채팅 관련 API 응답 리팩토링에만 집중하고 있습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/main/java/com/example/solidconnection/chat/service/ChatService.java (1)

189-207: WebSocket와 REST 응답의 senderId 의미 불일치 - 통일 필요

메시지 조회(GET)는 externalSenderId(멘토면 mentorId, 아니면 siteUserId)를 반환하는 반면, 실시간 WebSocket 송신은 ChatMessageSendResponse.from(chatMessage)로 내부 participantId 기반의 senderId를 보냅니다. 동일 화면에서 과거 메시지와 실시간 메시지의 senderId가 다른 의미를 가지면 클라이언트 파싱이 깨집니다.

다음 두 가지 중 하나로 정렬하세요:

  1. WebSocket도 동일 포맷 사용 (권장)
  • 송신 시 externalSenderId를 계산한 후 ChatMessageResponse를 그대로 송신
  • 영향 범위: 라인 235, 263 및 유사 구간
  1. 또는 ChatMessageSendResponse에 externalSenderId 추가
  • ChatMessageSendResponse에 externalSenderId(및 senderType) 필드 추가
  • from() 메서드에서 조회 로직 추가

클라이언트가 두 타입 모두 일관되게 파싱할 수 있도록 수정해야 합니다.

♻️ Duplicate comments (1)
src/main/java/com/example/solidconnection/chat/service/ChatService.java (1)

139-141: MentorRepository 반환형 수정 필요(중복 지적).

  • 이 위치의 .stream()은 Repository가 List를 반환한다고 가정합니다.
  • MentorRepository 코멘트에서 지적한 대로 반환형을 List로 바꾸지 않으면 컴파일되지 않습니다.
🧹 Nitpick comments (4)
src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java (1)

31-31: 주석 보강은 적절합니다. 용어 일관성만 유지해 주세요.

  • 내부 필드 senderId는 chat_participant의 PK라는 점이 명확해졌습니다.
  • 외부 응답에서 멘토/사용자 ID로 매핑되는 값과 혼동을 줄이기 위해, 추후 리팩터링 시 필드명을 senderParticipantId로 바꾸는 것도 고려해 볼 만합니다.
src/main/java/com/example/solidconnection/chat/dto/ChatParticipantResponse.java (1)

4-11: 식별자 혼합 사용에 대한 타입 정보 노출을 권장합니다.

  • 현재 partnerId는 멘티면 siteUserId, 멘토면 mentorId입니다.
  • 클라이언트 측 혼선을 줄이려면, 다음 중 하나를 추가해 주세요.
    1. partnerType(MENTOR|MENTEE) 또는 isMentor(boolean) 필드.
    2. 혹은 명시적 필드 분리(mentorId/siteUserId) 중 하나만 세팅.

가능한 최소 변경 예시(필드 1개 추가):

-public record ChatParticipantResponse(
-        long partnerId, // 멘티는 siteUserId, 멘토는 mentorId
-        String nickname,
-        String profileUrl
-) {
+public record ChatParticipantResponse(
+        long partnerId,             // 멘티는 siteUserId, 멘토는 mentorId
+        String partnerType,         // "MENTOR" | "MENTEE"
+        String nickname,
+        String profileUrl
+) {
-    public static ChatParticipantResponse of(long partnerId, String nickname, String profileUrl) {
-        return new ChatParticipantResponse(partnerId, nickname, profileUrl);
+    public static ChatParticipantResponse of(long partnerId, String nickname, String profileUrl) {
+        // partnerType은 호출부에서 결정되도록 오버로드 추가 또는 기존 호출부 보강 필요
+        return new ChatParticipantResponse(partnerId, "MENTEE", nickname, profileUrl);
     }
 }

클라이언트가 partnerId의 타입이 바뀐 사실을 이미 인지/처리하고 있는지 확인 부탁드립니다.

src/main/java/com/example/solidconnection/chat/service/ChatService.java (1)

190-206: 첨부 조회 N+1 가능성 있습니다.

  • ChatAttachment가 LAZY라면 메시지 목록 페이징 시 첨부 조회가 N+1이 됩니다.
  • 엔티티 그래프/배치 페치/전용 리포지토리 메서드(fetch join)로 한 번에 가져오는 것을 권장합니다.

예시(리포지토리):

@Query("select distinct m from ChatMessage m left join fetch m.chatAttachments where m.chatRoom.id = :roomId")
Slice<ChatMessage> findByRoomIdWithPagingAndAttachments(@Param("roomId") long roomId, Pageable pageable);
src/main/java/com/example/solidconnection/mentor/service/MentoringQueryService.java (1)

164-173: toMap 중복 키에 대한 방어를 추가해 주세요.

  • 이론상 멘토링:채팅방은 1:1이지만, 데이터 이상 시 Collectors.toMap에서 IllegalStateException이 발생할 수 있습니다.

안전 머지 함수 추가:

-        return chatRooms.stream()
-                .collect(Collectors.toMap(ChatRoom::getMentoringId, ChatRoom::getId));
+        return chatRooms.stream()
+                .collect(Collectors.toMap(
+                        ChatRoom::getMentoringId,
+                        ChatRoom::getId,
+                        (left, right) -> left   // 중복 시 최초값 유지
+                ));
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e4ff858 and 92655d6.

📒 Files selected for processing (7)
  • src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java (1 hunks)
  • src/main/java/com/example/solidconnection/chat/dto/ChatParticipantResponse.java (1 hunks)
  • src/main/java/com/example/solidconnection/chat/service/ChatService.java (8 hunks)
  • src/main/java/com/example/solidconnection/mentor/dto/MentoringForMentorResponse.java (1 hunks)
  • src/main/java/com/example/solidconnection/mentor/repository/MentorRepository.java (2 hunks)
  • src/main/java/com/example/solidconnection/mentor/service/MentoringQueryService.java (2 hunks)
  • src/test/java/com/example/solidconnection/mentor/service/MentoringQueryServiceTest.java (2 hunks)
🔇 Additional comments (7)
src/main/java/com/example/solidconnection/chat/service/ChatService.java (2)

111-118: 채팅방 목록 파트너 ID 정책을 확인해 주세요.

  • 목록 응답(ChatRoomResponse)에서는 partnerId로 siteUserId를 내려주고 있습니다.
  • 본 PR 목표는 /rooms/{room-id}/partner만 mentorId로 바꾸는 것으로 이해했으며, 목록 API는 그대로라면 OK입니다.
  • 다만 API 스펙 문서에 “목록: siteUserId, 파트너 API: mentorId/ siteUserId 혼합”을 명시해 혼선을 방지해 주세요.

286-301: 검증 결과: 지적된 문제가 없습니다.

현재 코드는 이미 올바르게 구현되어 있습니다. 호출 지점(MentoringCommandService.java:54)에서 mentor.getSiteUserId()mentoring.getMenteeId()를 전달하고 있으며, 두 값 모두 ChatParticipant 생성자가 기대하는 siteUserId입니다.

  1. mentorId 매개변수: mentor.getSiteUserId()를 통해 이미 siteUserId를 수신 중입니다.
  2. menteeId 매개변수: Mentoring.menteeIdlong 원시형이며, 테스트에서 menteeUser.getId()(SiteUser ID)와 비교되고 있어 siteUserId를 저장하고 있습니다.

혼동 방지를 위해 매개변수명을 mentorSiteUserId, menteeSiteUserId로 명확히 하는 것은 선택사항의 개선입니다.

Likely an incorrect or invalid review comment.

src/main/java/com/example/solidconnection/mentor/service/MentoringQueryService.java (1)

132-141: roomId 누락(null) 가능성에 대한 응답 계약을 확인해 주세요.

  • 아직 채팅방이 생성되지 않은 멘토링의 경우 mentoringIdToChatRoomId.get(...)이 null을 반환할 수 있습니다.
  • 클라이언트가 null roomId를 허용/처리하는지 스펙 확인이 필요합니다.
src/main/java/com/example/solidconnection/mentor/dto/MentoringForMentorResponse.java (1)

9-9: API 응답 구조 변경이 올바르게 반영되었습니다.

변경 사항을 정리하면:

  1. 필드명 변경: mentoringIdroomId로 변경하여 API 응답이 실제 채팅방 식별자를 반환하도록 개선
  2. 타입 변경: longLong으로 변경하여 채팅방이 없는 경우(대기중/거절된 멘토링)를 null로 표현 가능
  3. 팩토리 메서드: roomId를 외부에서 주입받도록 시그니처 수정 (배치 조회 지원)

이 설계는 승인된 멘토링만 채팅방을 가지는 비즈니스 규칙을 타입 레벨에서 명확히 표현하고 있습니다.

참고: 이는 breaking change이므로, API를 사용하는 클라이언트에서도 mentoringIdroomId 필드명 변경에 대응해야 합니다.

Also applies to: 17-19

src/test/java/com/example/solidconnection/mentor/service/MentoringQueryServiceTest.java (3)

100-101: 승인된 멘토링에 대한 채팅방 픽스처 추가가 적절합니다.

테스트 시나리오를 완성하기 위해 필요한 설정입니다. 승인된 멘토링(mentoring2)에 대응하는 채팅방을 생성하여, 이후 roomId 검증이 가능하도록 구성했습니다.


106-112: roomId 검증 로직이 비즈니스 규칙을 정확히 반영합니다.

변경된 검증 내용:

  1. PENDING 상태: roomId가 null - 대기중인 멘토링은 채팅방 미생성
  2. APPROVED 상태: roomId가 chatRoom2.getId() - 승인된 멘토링만 채팅방 존재
  3. REJECTED 상태: roomId가 null - 거절된 멘토링은 채팅방 불필요

이 assertion은 "승인된 멘토링만 채팅방을 가진다"는 비즈니스 로직을 명확히 검증하고 있습니다.


143-147: 테스트 검증 항목 변경의 의도를 확인해주세요.

이 테스트의 주제는 "멘토링 확인 여부 포함"인데, 검증 필드가 변경되었습니다:

  • 이전: mentoringIdisChecked 추출
  • 현재: nicknameisChecked 추출

변경 후에도 isChecked 값은 올바르게 검증되고 있지만, mentoringId 대신 nickname으로 각 멘토링을 구분하는 방식으로 개선된 것으로 보입니다.

이 변경이 의도된 테스트 개선인지, 아니면 실수로 범위가 확장된 것인지 확인 부탁드립니다. 만약 의도된 개선이라면 문제없으나, roomId 리팩터링과는 직접적인 관련이 없어 보입니다.

Copy link
Contributor

@Gyuhyeok99 Gyuhyeok99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다~ 코멘트 남겨놨습니다!


public record ChatParticipantResponse(
long partnerId,
long partnerId, // 멘티는 siteUserId, 멘토는 mentorId
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 왜 그냥 멘토멘티 상관없이 siteUserId로 안하고 구분하는건가요??
제가 히스토리가 기억이 안나는 것일 수도 있습니다...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이 부분에 대해서 암묵적으로 결정했는지, 정하고 넘어갔는지는 기억이 잘 나지 않네요 ...
다만 이 상황에서 partnerId 를 모두 siteUserId 를 넘겨주면 멘토의 경우 추가 DB 접근이 필요하긴 할 거 같습니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정해진 게 없다면.... 만욱님과 한 번 이야기해보고 결정하는 건 어떤가요? 프론트에서 헷갈리지 않을까 싶어서요!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

채팅 쪽에서는 하나의 ID(siteUserId)로 통일해 주시는 편이 더 사용성이 좋을 것 같습니다!
라는 쪽으로 결론이 나서 해당 작업만 완료되면 바로 Approve하겠습니다~

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/main/java/com/example/solidconnection/mentor/repository/MentorRepository.java (1)

28-29: 메서드 시그니처가 올바르게 수정되었습니다.

이전 리뷰에서 제기된 반환 타입 및 파라미터 타입 문제가 모두 해결되었습니다.

다만, 새로 추가된 공개 API 메서드에 대한 단위 테스트가 없습니다. 다음 사항을 검증하는 테스트 추가를 권장합니다:

  1. 여러 siteUserId로 조회 시 해당하는 모든 Mentor 반환
  2. 존재하지 않는 siteUserId 조회 시 빈 리스트 반환
  3. 빈 Set 전달 시 동작

테스트 코드 생성을 원하시면 말씀해 주세요.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 92655d6 and fedc72b.

📒 Files selected for processing (2)
  • src/main/java/com/example/solidconnection/chat/service/ChatService.java (8 hunks)
  • src/main/java/com/example/solidconnection/mentor/repository/MentorRepository.java (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
src/main/java/com/example/solidconnection/chat/service/ChatService.java (5)

18-18: 필요한 import가 올바르게 추가되었습니다.

추가된 모든 import 문이 코드에서 실제로 사용되며, 멘토 ID 해결 및 스트림 처리 로직에 필요합니다.

Also applies to: 27-28, 33-36


52-52: MentorRepository 의존성 주입이 올바르게 구현되었습니다.

표준 Spring 생성자 주입 패턴을 따르며, 기존 코드 스타일과 일관성이 있습니다.

Also applies to: 61-61, 68-68


126-154: 멘토 ID 해결 로직이 올바르게 구현되었습니다.

변경 사항이 PR 목표와 정확히 일치합니다:

  1. 배치 쿼리를 통해 N+1 문제 방지
  2. NPE 방어 로직 추가 (Line 145-147)
  3. externalSenderId 해결: 멘토인 경우 mentorId, 아닌 경우 siteUserId 반환
  4. 주석을 통한 코드 이해도 향상

쿼리 효율성도 적절합니다. 페이지당 3번의 배치 쿼리(메시지, 참가자, 멘토)가 실행되며, 각각 단일 쿼리로 다건 조회를 수행합니다.


167-172: 파트너 ID 해결 로직이 올바르게 구현되었습니다.

PR 목표에 맞게 partnerId가 다음과 같이 반환됩니다:

  1. 파트너가 멘토인 경우: mentorId 반환
  2. 파트너가 멘티인 경우: siteUserId 반환

Optional 처리 패턴이 적절하며, 주석을 통해 로직이 명확하게 설명되어 있습니다.


192-192: 메서드 시그니처 변경이 올바르게 적용되었습니다.

toChatMessageResponse 메서드가 externalSenderId 파라미터를 받도록 수정되어, 해결된 멘토 ID 또는 사이트 사용자 ID를 응답에 포함할 수 있게 되었습니다.

private 메서드이므로 공개 API에 영향을 주지 않으며, 호출부(Line 152)에서 올바르게 전달하고 있습니다.

Also applies to: 206-206

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fedc72b and 08d2ff7.

📒 Files selected for processing (3)
  • src/main/java/com/example/solidconnection/chat/dto/ChatMessageResponse.java (1 hunks)
  • src/main/java/com/example/solidconnection/chat/dto/ChatParticipantResponse.java (1 hunks)
  • src/main/java/com/example/solidconnection/chat/service/ChatService.java (7 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/main/java/com/example/solidconnection/chat/dto/ChatMessageResponse.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
src/main/java/com/example/solidconnection/chat/dto/ChatParticipantResponse.java (1)

4-4: 명확한 주석 추가, 좋습니다!

partnerIdsiteUserId임을 명시하는 주석이 추가되어 코드 가독성이 향상되었습니다. 이전 리뷰 논의에서 채팅 관련 ID를 siteUserId로 통일하기로 한 결정과도 일치합니다.

src/main/java/com/example/solidconnection/chat/service/ChatService.java (4)

125-126: 메서드 분리로 가독성이 향상되었습니다.

채팅 메시지 응답 생성 로직을 헬퍼 메서드로 분리하여 getChatMessages 메서드의 복잡도가 감소하고 가독성이 개선되었습니다.


131-139: 배치 조회를 통한 N+1 문제 방지, 잘 구현되었습니다.

변경 사항:

  1. 메시지들의 senderId를 수집하여 한 번에 참여자 정보를 조회합니다.
  2. chatParticipantId를 키로 하는 Map을 생성하여 효율적인 조회가 가능합니다.
  3. 주석으로 메서드의 목적을 명확히 설명하고 있습니다.

141-155: NPE 방어 로직이 추가되었고, 응답 생성 로직이 명확해졌습니다.

변경 사항:

  1. Line 148-150: 이전 리뷰에서 지적된 NPE 위험에 대한 방어 로직이 추가되어, 참여자를 찾을 수 없는 경우 명확한 예외를 발생시킵니다.
  2. Line 151: senderParticipantsiteUserIdexternalSenderId로 사용합니다.
  3. Line 152: 추출된 externalSenderId를 사용하여 응답을 생성합니다.

확인이 필요한 사항:

현재 구현에서는 모든 발신자에 대해 siteUserId를 반환하고 있습니다. 그런데 PR 목표에는 "senderId가 mentorId 또는 siteUserId가 되도록 수정"이라고 명시되어 있습니다. 이전 리뷰 논의에서 채팅 ID를 siteUserId로 통일하기로 결정되었다면 현재 구현이 맞지만, 멘토의 경우 mentorId를 반환해야 한다면 추가 매핑 로직이 필요합니다.

최종 요구사항을 확인해 주세요.


185-203: toChatMessageResponse 메서드 시그니처가 개선되었습니다.

변경 사항:

  1. Line 185: 메서드가 이제 externalSenderId를 파라미터로 받아, 호출자가 발신자 ID 매핑 로직을 제어할 수 있습니다.
  2. Line 199: 전달받은 externalSenderId를 응답에 사용합니다.

이 변경으로 발신자 ID 결정 로직이 상위 메서드로 이동하여 책임이 명확해졌습니다.

import com.example.solidconnection.common.dto.SliceResponse;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.chat.dto.ChatRoomData;
import com.example.solidconnection.mentor.repository.MentorRepository;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

사용되지 않는 MentorRepository 의존성이 주입되었습니다.

MentorRepository가 추가되었지만 코드 어디에서도 실제로 사용되지 않고 있습니다. PR 목표에서는 senderId가 멘토의 경우 mentorId, 멘티의 경우 siteUserId를 반환해야 한다고 명시되어 있는데, 현재 구현에서는 모든 경우에 siteUserId만 사용하고 있습니다(Line 151 참조).

다음 중 하나를 확인해 주세요:

  1. 이전 리뷰 논의에 따라 요구사항이 변경되어 모두 siteUserId를 사용하는 것이 맞다면, 사용하지 않는 MentorRepository 의존성을 제거해야 합니다.
  2. 멘토의 경우 mentorId를 반환해야 한다면, buildChatMessageResponses 메서드에서 mentorRepository를 활용하여 siteUserIdmentorId로 매핑하는 로직을 추가해야 합니다.

다음 스크립트를 실행하여 MentorRepository가 다른 곳에서 사용되는지 확인해 보세요:

Also applies to: 51-51, 60-60, 67-67


🏁 Script executed:

#!/bin/bash
# ChatService에서 mentorRepository 사용 여부 확인
rg -n "mentorRepository\." --type=java src/main/java/com/example/solidconnection/chat/service/ChatService.java

Length of output: 0


검증을 계속 진행하겠습니다. 현재 ChatService의 구현 내용을 확인하여 멘토레포지토리가 정말 사용되지 않는지, 그리고 요구사항이 실제로 변경되었는지 확인하겠습니다.




🏁 Script executed:

#!/bin/bash
# ChatService 전체 내용 확인 - 특히 buildChatMessageResponses 메서드와 Line 151 주변 코드
fd -n "ChatService.java" --type f | xargs cat

Length of output: 230


🏁 Script executed:

#!/bin/bash
# Line 51, 60, 67 확인 - mentorRepository 필드 및 생성자
fd -n "ChatService.java" --type f | xargs sed -n '45,75p'

Length of output: 230


구문 오류를 수정하겠습니다. ChatService.java 파일을 올바르게 조회하겠습니다.


---

🏁 Script executed:

```shell
#!/bin/bash
# ChatService.java 찾기 및 전체 내용 표시
find . -name "ChatService.java" -type f | head -1 | xargs cat

Length of output: 13813


사용되지 않는 MentorRepository 의존성을 제거하거나 실제로 구현해야 합니다.

전체 코드를 검토한 결과, MentorRepository는 주입(Line 27, 51, 60, 67)만 되어 있고 어디에서도 실제로 사용되지 않고 있습니다.
buildChatMessageResponses 메서드(Line 141-157)에서도 senderParticipant.getSiteUserId()만 사용하고 있습니다.

다음 중 하나를 선택해 주세요:

  1. 요구사항이 변경되어 모든 경우 siteUserId를 사용하기로 결정되었다면
    MentorRepository import, 필드 선언, 생성자 파라미터 및 할당을 모두 제거하세요.

  2. 멘토의 경우 mentorId를 반환해야 한다면
    buildChatMessageResponses 메서드에서 senderParticipant 또는 역할 정보를 확인하여 mentorRepository를 활용해 siteUserIdmentorId로 매핑하는 로직을 추가하세요.

🤖 Prompt for AI Agents
In src/main/java/com/example/solidconnection/chat/service/ChatService.java
around lines 27, 51, 60, 67 and in buildChatMessageResponses (lines 141-157):
the MentorRepository is injected but never used; either remove the unused
MentorRepository import, field, constructor parameter and assignment (if
siteUserId is now always used), or implement the mentor-mapping path: add logic
in buildChatMessageResponses to detect mentor participants (via role or
senderParticipant), call mentorRepository to resolve siteUserId to mentorId, and
return mentorId for mentor messages; update imports and constructor to keep
mentorRepository only if you choose the mapping route.

Copy link
Contributor

@Hexeong Hexeong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 pending으로만 올려뒀었네요;; 확인했습니다~


Map<Long, Long> siteUserIdToMentorId = mentorRepository.findAllBySiteUserIdIn(siteUserIds.stream().toList()).stream()
.collect(Collectors.toMap(Mentor::getSiteUserId, Mentor::getId));

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작성된 의도로 보아 mentorRepository.findAllBySiteUserIdIn() 메서드가 List<Mentor>를 호출하게 하려는 것으로 보입니다! 하지만 MentorRepository에서 정의된 반환타입은 Optional<Mentor>여서 이 부분 한번 확인해주시면 좋을 것 같습니다!

@whqtker whqtker merged commit 6b9fb2b into solid-connection:develop Nov 13, 2025
2 checks passed
whqtker added a commit that referenced this pull request Jan 19, 2026
* fix: yml 들여쓰기 수정 (#555)

* fix: yml 들여쓰기 수정

* fix: jdk 변경

* refactor: 멘토 및 채팅 관련 API 응답 수정 (#537)

* refactor: 멘토의 멘토링 조회 응답에서 mentoringId가 아니라 roomId를 포함하도록

* refactor: 파트너가 멘토인 경우 partnerId는 mentorId로

- AS IS: 멘토/멘티 모두 partnerId가 siteUserId
- TO BE: 멘티: siteUserId, 멘토: mentorId

* refactor: 응답의 senderId가 mentorId/siteUserId가 되도록

* refactor: senderId에 해당하는 chatParticipant가 없을 경우 예외 처리하는 로직 추가

* refactor: 메서드명에 맞게 시그니처 변경

* refactor: getChatMessages 메서드에서 응답으로 siteUserId를 넘겨주도록

- AS IS: mentorId(mentor) / siteUserId(mentee)
- TO BE: siteUserId(all)

* refactor: 헬퍼 메서드로 메서드 복잡성을 분산한다

* refactor: getChatPartner 메서드의 응답으로 siteUserId를 넘겨주도록

- AS IS: mentorId(mentor) / siteUserId(mentee)
- TO BE: siteUserId(all)

* refactor: CD 성능 개선 (#552)

* fix: deprecated된 base image를 eclipse-temurin:17-jdk로 변경

* refactor: scp 파일 전송하는 방식에서 GHCR로 push/pull하도록 변경

* fix: GHCR image 제거시 Org의 GITHUB_TOKEN 사용하도록 변경

* refactor : scp 파일 전송하는 방식에서 GHCR로 push/pull하도록 prod-cd.yml과 docker-compose.prod.yml 변경

* fix: prod 인스턴스 old image 이름 통일

* fix: prod-cd.yml StrictHostKeyChecking 옵션 문법 오류 수정

* fix: prod-cd.yml StrictHostKeyChecking 옵션 문법 오류 수정

* fix: dev-cd.yml Old images 정리 작업 중 이미지 이름 불일치 문제 해결

* chore: 마지막 줄 개행 추가

* chore: 마지막 줄 개행 추가

* feat: stage 인스턴스에 대한 최신 이미지 5개 유지 기능 및 old 이미지 제거 기능 추가

* chore: 중복된 환경변수 지정 제거

* chore: 중복된 pem키 생성 로직 제거

* fix: 잘못된 pem키 이름 수정

* refactor: 원격 호스트에서 pull할 경우, 최소 권한으로 실행하도록 Github App으로 임시토큰 발급하도록 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 (#565)

* fix: GitHub app token permission 문제 해결 (#566)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: GitHub app token permission 문제 오류 해결 (#567)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: GitHub app token permission이 repo 레벨에서 부여되는 문제 해결 (#568)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: GitHub app token permission 권한 오류 해결 (#569)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* test: fork repo의 작업 branch에서 해당 workflows가 실행되도록 임시 수정

* refactor: test용 설정 제거

* feat: claude.md 파일 추가 (#560)

* fix : 동일 멘토 멘티 중복 신청 불가능하도록 수정 (#563)

* fix : 동일 멘토 멘티 중복 신청 불가능하도록 수정
- UK 제약조건 추가
- flyway script 추가
- CustomException 추가
- Service 로직 수정
- Test code 추가

* fix : column명 오류 수정
- column명 camelCase -> snake_case로 변경

* fix : column명 오류 수정
- column명 name으로 명시

* fix: GitHub app token permission 권한 오류 해결 (#570)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* test: fork repo의 작업 branch에서 해당 workflows가 실행되도록 임시 수정

* refactor: test용 설정 제거

* fix: docker login username 불일치 문제

* refactor: 최소권한 원칙 적용을 위한 Action Job 분리

* refactor: 필요없는 주석 제거

* fix: GHCR 정리 권한 PAT로 해결 (#573)

* feat: 지원서가 APPROVED 인 유저의 멘토 생성 기능 추가 (#562)

* feat: 지원서가 APPROVED 인 유저의 멘토 생성 기능 추가

* refactor: submitMentorApplication 메서드의 멘토 지원 유효 검증 부분을 메서드로 추출

* refactor: MentorMyPage 생성, 수정 부분의 channel 생성, 업데이트 부분 중복 제거

* test: Mentor 생성 관련 테스트 추가

* fix: 코드래빗 리뷰 적용

* refactor: 멘토 생성 시 channelRequest가 null 일 떄 예외 처리

* feat: MentorApplicationRequest 필드에 유효성 어노테이션 추가

* test: 채널 검색 시 siteUserId로 조회하는 문제 해결

* fix: 리뷰 수정사항 적용

* fix: 파일 끝에 개행 추가

* refactor: 멘토 생성 메서드에서 siteUser의 검증 제외

* refactor: dto 단에서 채널 리스트 null 검증

* feat: MentorApplication에 termId 추가 flyway 스크립트 추가

* fix: flyway 버전 충돌 해결

* feat: 어드민 멘토 승격 요청 페이징 조회 기능 추가 (#576)

* feat: 어드민 멘토 지원서 페이징 조회 기능 추가

* feat: mentor/repository 패키지에 custom 패키지 추가

- custom 패키지에 페이징 조회를 책임지는 MentorApplicationFilterRepository 추가

- MentorApplicationSearchCondition 에서 넘긴 keyword 기반으로 닉네임, 권역, 나라, 학교명으로 필터링 검색 기능 추가

- MentorApplicationSearchCondition 에서 넘긴 mentorApplicationStatus 기반으로 승인, 거절, 진행중 으로 필터링 기능 추가

* test: 어드민 멘토 지원서 페이징 조회 테스트 추가

* feat: MentorApplication 엔티티에 approved_at 필드 추가 flyway 스크립트 작성

* fix: 파일 끝에 개행 추가

* refactor: 페이징 조회 시 count 쿼리에 불필요한 조인 막기

* fix: 코드래빗 리뷰 적용

* fix: flyway V39 스크립트 파일명 수정

* test: 테스트 코드 오류 수정, 검증 추가  

* test: 기대하는 값이랑 다른 테스트 응답을 수정합니다

* feat: 어드민 멘토 승격 지원서 승인/거절 기능, 상태 별 지원서 개수 조회 기능 추가 (#577)

* feat: 어드민 멘토 승격 지원서 승인/거절 기능 추가

* test: 어드민 멘토 지원서 승인/거절 테스트 추가

* feat: 멘토 지원서 상태별 개수 조회 기능 추가

* test: 멘토 지원서 상태별 개수 조회 테스트 추가

* fix: 대학이 선택되지 않은 멘토 지원서 승인 시 예외 발생하도록 수정

* refactor: 리뷰 내용 반영

* refactor: MENTOR_APPLICATION_ALREADY_CONFIRM -> MENTOR_APPLICATION_ALREADY_CONFIRMED 로 수정

* refactor: 멘토 지원서 거절 사유 관련하여 기획에 명시되지 않은 길이 제한 제거

* refactor: 리뷰 적용

* refactor: 변수명, 필드명 일관성 맞추기

* test: assertAll 적용

* feat: region 관련 관리 기능 추가 (#561)

* feat: 지역 생성 기능 구현 (AdminRegion)

지역을 생성하는 기능을 구현했습니다:
- AdminRegionCreateRequest: 지역 생성 요청 DTO
- AdminRegionResponse: 지역 응답 DTO
- AdminRegionService.createRegion(): 중복 검사를 포함한 지역 생성 로직
- AdminRegionController.createRegion(): HTTP POST 엔드포인트

중복 검사:
- 지역 코드 중복 확인
- 한글명 중복 확인

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: 지역 수정/삭제/조회 기능 구현 및 테스트 추가 (AdminRegion)

지역 관리 기능을 완성했습니다:

구현 기능:
- AdminRegionUpdateRequest: 지역 수정 요청 DTO
- AdminRegionService.updateRegion(): 한글명 중복 검사를 포함한 지역 수정
- AdminRegionService.deleteRegion(): 지역 삭제
- AdminRegionService.getAllRegions(): 전체 지역 조회
- AdminRegionController: 수정/삭제/조회 HTTP 엔드포인트

테스트 코드 (AdminRegionServiceTest):
- CREATE: 정상 생성, 코드 중복, 한글명 중복 테스트
- UPDATE: 정상 수정, NOT_FOUND, 중복 한글명, 동일 한글명 테스트
- DELETE: 정상 삭제, NOT_FOUND 테스트
- READ: 빈 목록, 전체 조회 테스트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: 지역 관리 관련 에러코드 추가 (ErrorCode)

지역 관리 기능에 필요한 에러코드를 추가했습니다:
- REGION_NOT_FOUND: 존재하지 않는 지역
- REGION_ALREADY_EXISTS: 이미 존재하는 지역

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: jpa 오류 수정

* refactor: 코드리뷰 반영

---------

Co-authored-by: Claude <noreply@anthropic.com>

* fix: config.alloy 파일 경로 불일치 문제 해결 (#586)

* fix: config.alloy 파일 경로 불일치 문제 해결

* refactor: docker-compose를 수정하는게 아닌 cd.yml의 경로를 수정하여 해결

* feat: 소셜 로그인 사용자는 비밀번호 변경을 할 수 없다. (#582)

* feat: 소셜 로그인 사용자는 비밀번호 변경을 할 수 없도록

* test: 소셜 로그인 사용자 비밀번호 변경 관련 테스트 코드 작성

* chore: 컨벤션에 맞게 메서드명 변경

- ~~ 예외가 발생한다

* chore: 충돌 해결

* fix: Upgrade 헤더 유무에 따라 Connection 헤더의 값을 동적으로 설정하도록 (#581)

* fix: Upgrade 헤더 유무에 따라 Connection 헤더의 값을 동적으로 설정하도록

- Upgrade 헤더가 존재하면(e.g. WebSocket) upgrade로 설정
- Upgrade 헤더가 존재하지 않으면 keep-alive로 설정

* chore: 서브모듈 업데이트

* feat: 멘토 지원서 대학교 매핑 기능, 대학 선택 상태 페이징 조건 추가 (#583)

* feat: 멘토 지원서 검색 조건에 UniversitySelectType 추가

* feat: 어드민 멘토 지원서 페이징 조회 응답에 UniversitySelectType 추가

* test: 멘토 지원서 조회 테스트 추가

- test: UniversitySelectType 기반 페이징 조회 테스트 추가

* feat: 멘토 지원서에 대학 매핑 기능 추가

* test: 멘토 지원서 대학 매핑 테스트 추가

* refactor: 의미 없는 import 제거

* refactor: 리뷰 내용 반영

* refactor: 개행 및 공백 추가

* refactor: pathVariable 네이밍을 kebab-case 로 통일

* refactor: Service 레이어의 검증 로직을 도메인으로 이동

* refactor: PENDING 상태 및 OTHER 타입 검증을 도메인 메서드로 관리

* refactor: assignUniversity() 호출 전 검증 책임을 도메인 엔티티에 위임

* test : assertAll 로 검증 그룹화

* refactor: 스프링 부트 앱 외의 사이드 인프라 배포 과정을 분리 (#592)

* refactor: dev 환경에서의 side-infra 배포 과정 분리

* refactor: prod 환경에서의 side-infra 배포 과정 분리

* refactor: docker-compose 가 실행되고 있지 않아도 스크립트가 실패하지 않게 변경

* fix: docker compose up 시에 사용할 환경변수 중 누락된 변수를 추가

* fix: S3 이름 불일치 문제 해결 (#594)

* fix: s3 이름 불일치 문제 해결

* fix: s3와의 연동된 cloudfront URL로 수정

* refactor: 분리한 사이드 인프라에 대해서 필요없는 파일 정리 (#596)

* test: flyway 스크립트를 검증하는 테스트 코드 작성 (#588)

* test: flyway 스크립트를 검증하는 테스트 코드 작성

* fix: DirtiesContext 어노테이션을 통해 기존 컨텍스트를 폐기하도록

- 새로운 MySQL 환경에서 마이그레이션이 이루어지도록 수정

* fix: flyway 검증용의 별도의 MySQL 컨테이너를 사용하도록

* chore: 테스트 의도를 쉽게 이해할 수 있도록 주석 추가

* chore: 명시적으로 컨테이너를 시작하도록

- 또한 MySQLTestContainer 코드와 유사한 컨벤션을 가지도록 수정

* refactor: 게시글 조회 응답에 댓글 deprecated 여부 포함하도록 (#599)

* feat: 유저의 멘토 지원서 신청 이력 조회 기능 추가 (#603)

* feat: 유저의 멘토 지원 이력 조회 기능 추가

* refactor: 매개변수 타입 통일

* refactor: long 타입을 Long 으로 수정

* test: 멘토 지원서 이력 조회 테스트 추가

* test: MentorApplicationFixtureBuilder 에 rejectedReason 필드 및 빌더 메서드 추가

* refactor: 리뷰 사항 적용

* test: 멘토 지원서 이력 조회 에서 user와 university 재사용

* refactor: 긴 uri 를 짧게 수정

* refactor: 서브모듈 해시값 되돌리기

* refactor: 개행 지우기

* refactor: applicationOrder 자료형을 long 으로 수정

* fix: applicationOrder 를 int 자료형으로 처리하도록 복구

- 순서를 나타내고, 해당 값이 21억을 넘길 수 없다 판단하여 더 적합한 int 자료형으로 복구

* test: long type 을 기대하던 테스트 에러 해결

* fix: 탈퇴한 사용자가 물리적 삭제가 되지 않았던 문제를 해결한다 (#574)

* refactor: FK에 ON DELETE CASCADE 옵션 추가

* refactor: 삭제 메서드로 사용자 연관 데이터를 삭제하도록

* feat: 어드민 유저 차단 기능 추가 (#604)

* feat: 어드민 차단 기능

* test: 어드민 차단 기능

* feat: API 성능 로깅, 쿼리 별 메트릭 전송 추가 (#602)

* feat: HTTP 요청/응답 로깅 필터 구현

- traceId 기반 요청 추적
- 요청/응답 로깅
- CustomExceptionHandler와 중복 로깅 방지
- Actuator 엔드포인트 로깅 제외

* feat: ExceptionHandler에 중복 로깅 방지 플래그 및 userId 로깅 추가

* feat: API 수행시간 로깅 인터셉터 추가

* feat: ApiPerf 인터셉터, Logging 필터 빈 등록

* refactor: logback 설정 변경

- info, warn, error, api_perf 로 로그 파일 분리해서 관리

* feat: 쿼리 별 수행시간 메트릭 모니터링 추가

* feat: 데이터소스 프록시 의존성 및 config 파일 추가

* feat: 데이터 소스 프록시가 metric을 찍을 수 있도록 listener 클래스 추가

* feat: 요청 시 method, uri 정보를 listener에서 활용하기 위해 RequestContext 및 관련 interceptor 추가

* refactor: 비효율적인 Time 빌더 생성 개선

- Time.builder 를 사용하면 매번 빌더를 생성하여 비효율적인 문제를 meterRegistry.timer 방식으로 해결

* feat: 로깅을 위해 HttpServeletRequest 속성에 userId 추가

* refactor: logback 설정 중 local은 console만 찍도록 수정

* refactor: FILE_PATTERN -> LOG_PATTERN 으로 수정

* test: TokenAuthenticationFilter에서 request에 userId 설정 검증 추가

- principal 조회 예외를 막기 위해 siteUserDetailsService given 추가

* refacotr: 코드 래빗 리뷰사항 반영

* test: 중복되는 테스트 제거

* refactor: 사용하지 않는 필드 제거

* refactor: 리뷰 내용 반영

* refactor: ApiPerformanceInterceptor에서 uri 정규화 관련 코드 제거

* refactor: ApiPerformanceInterceptor에서 if-return 문을 if-else 문으로 수정

* refactor: 추가한 interceptor 의 설정에 actuator 경로 무시하도록 셋팅

* refactor: 중복되는 의존성 제거

* refactor: 로깅 시 민감한 쿼리 파라미터 마스킹

- EXCLUDE_QUERIES 에 해당하는 쿼리 파라미터 KEY 값의 VALUE 를 masking 값으로 치환

* refactor: 예외 처리 후에도 Response 로그 찍도록 수정

* refactor: CustomExceptionHandler 원상복구

- Response 로그를 통해 user를 추적할 수 있으므로 로그에 userId 를 추가하지 않습니다

* refactor: 리뷰 사항 반영

* refactor: RequestContext 빌더 제거

* refactor: RequestContextInterceptor import 수정

* refactor: logback yml 파일에서 timestamp 서버 시간과 동일한 규격으로 수정

* refactor: ApiPerformanceInterceptor 에서 동일 내용 로그 중복으로 찍는 문제 수정

* fix: decode를 두 번 하는 문제 수정

* test: 로깅 관련 filter, interceptor 테스트 추가

* refactor: 코드래빗 리뷰사항 반영

* test: contains 로 비교하던 검증 로직을 isEqualTo 로 수정

* test: preHandle 테스트 에서 result 값을 항상 검증

* refactor: 단위테스트에 TestContainer 어노테이션 제거

* fix: conflict 해결

* fix: docker-compose 충돌 해결 (#610)

* chore: release github action 임의 실행 추가

* refactor: 기본 추천 대학 후보 추가 (#161)

* fix: config.alloy 경로 수정

* hotfix: 모의지원 현황 어드민 권한 제거

* hotfix: import 제거

* chore: 서브모듈 해시 업데이트 (#611)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: 멘토 및 채팅 관련 API 응답 수정

3 participants