Skip to content

Conversation

@coldsunn
Copy link
Collaborator

@coldsunn coldsunn commented Jan 27, 2026

📝 요약(Summary)

  1. 친구 관계 관리
  • 닉네임으로 친구 요청 보내기
  • 받은 친구 요청 목록 조회
  • 친구 요청 수락/거절/취소
  • 친구 삭제
  • 친구 목록 조회 (최신순 정렬, 탈퇴 유저 포함)
  1. 유저 검색
  • 닉네임 부분 매칭 검색 (완전일치 > 시작매칭 > 부분매칭 순 정렬)
  • 커서 기반 페이지네이션 (페이지당 30개)
  • 받은 친구 요청 우선 표시
  • 탈퇴 유저 자동 제외
  1. 검색 기록 관리
  • 최근 검색한 유저 5명 조회
  • 검색 기록 저장 (프로필 조회 시)
  • 검색 기록 개별/전체 삭제
  1. 특징
  • JOIN FETCH 사용: 친구 목록 조회 시 User 엔티티도 함께 로드하여 지연 로딩 시 발생하는 N+1 쿼리 문제 방지
  • 검색의 경우 리포트 검색과 비슷하나 받은 요청은 첫 페이지에서만 조회하여 pendingRequests로 응답, 다음 페이지부터는 빈 리스트
  • 커서 기반 페이지네이션으로 구현하였고 nickname을 커서로 사용
  • Friendship 엔티티에서 user1, user2 순서를 ID 오름차순으로 고정하여 중복 체크하지 않도록 함
  • 검색 기록 저장은 실패하더라도 204 반환하도록 구현

🔗 Related Issue

💬 공유사항

  • 기존 user 테이블에서 nickname에 유니크 제약 조건이 없어 추가하였습니다.
  • 새로 개발하면서 JPQL 작성 시 대문자로 작성하면 오류가 발생하는 현상이 있었습니다. 두줄 이상인 쿼리들은 소문자로 바꾸니 정상 작동하였습니다. 혹시 추후 개발 시에 참고하면 좋을 것 같습니다.

✅ PR Checklist

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 제목을 커밋 메시지 컨벤션에 맞게 작성했습니다.

Friendship, FriendSearchHistory Entity 추가, 관련 에러 코드 추가, 마이그레이션 추가
user의 nickname에 UNIQUE 제약 추가, UserProfileUpdateService에 중복 체크 로직 추가, UserController 에러 코드 Swagger 문서
업데이트
FriendshipRepository에서 JOIN FETCH로 N+1 문제 방지, FriendSearchHistoryRepository에서 기존 리포트 검색과 비슷하게 UPSERT
패턴 지원, UserRepository에서 유저 검색 쿼리 구현하였고 관련도 순으로 쿼리되도록 구현
친구 조회/요청/수락/거절/삭제 API, 커서 기반 유저 검색 API, 검색 기록 저장/조회/삭제 API 구현
@coldsunn coldsunn merged commit 60e9716 into develop Jan 27, 2026
1 check passed
@coldsunn coldsunn deleted the feat/friend-management branch January 27, 2026 08:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

친구 관리 기능

1 participant