- 인덱스 적용
닉네임 검색 성능을 높이기 위해 users.nickname 컬럼에 인덱스를 적용했다.
@Table(
name = "users",
indexes = {
@Index(name = "idx_users_nickname", columnList = "nickname")
}
)
- Redis 캐시 적용
동일한 닉네임 검색이 반복될 경우 DB를 다시 조회하지 않도록 Redis 캐시를 적용했다.
@Cacheable(cacheNames = "userSearchByNickname", key = "#nickname")
public List<UserResponse> searchUserByNickname(String nickname) {
return userRepository.findByNickname(nickname)
.stream()
.map(user -> new UserResponse(user.getId(), user.getEmail(), user.getNickname()))
.toList();
}
- Service코드 캐시 적용
기존에는 동일한 nickname 요청이 반복될 때마다 매번 DB를 조회했다.
이를 개선하기 위해 @Cacheable을 적용하여, 첫 번째 요청 결과를 Redis에 저장하고 이후 동일한 요청은 캐시에서 바로 반환하도록 구성했다.
@Cacheable(cacheNames = "userSearchByNickname", key = "#nickname")
public List<UserResponse> searchUserByNickname(String nickname) {
return userRepository.findByNickname(nickname)
.stream()
.map(user -> new UserResponse(user.getId(), user.getEmail(), user.getNickname()))
.toList();
}