Closed zuminzi closed 1 year ago
@zuminzi
1. 카카오 응답과 DB 응답을 지점명, 주소로 비교할 때 DB에서 조회된 결과가 2개 이상인 경우 무조건 null을 반환하는 이유가 궁금합니다. (+ Redis 에 shopId를 기록하는 목적이 구체적으로 무엇인지 설명해주실 수 있나요?)
matchedShops.size() > 1
인 경우 null
을 반환하더라구요! /**
* 지점명 일치여부나 주소명 포함여부로 비교하여 Kakao API Shop과 일치하는 DB Shop 객체 반환하는 메서드입니다.
* @param placeName 카카오 API 지점명
* @param addresses 카카오 API 도로명주소, 지번주소
* @return DB Shop
*/
@Transactional(readOnly = true)
public Shop compareWithPlaceNameOrAddress(String placeName, String... addresses) {
for (String address : addresses) {
List<Shop> matchedShops = shopRepository.findByPlaceNameOrAddressIgnoringSpace(
Util.removeSpace(placeName),
Util.removeSpace(address)
);
if (matchedShops.size() == 1) {
return matchedShops.get(0);
} else if (matchedShops.size() > 1){
matchedShops.stream().map(Shop::getId).forEach(this::cacheDuplicateShopId);
return null;
}
}
return null;
}
결론부터 말씀드리자면, 승연님이 말씀하신 대로 중복 데이터 처리 코드 수정이 필요할 것 같습니다.
place_name = 'place_name_value' OR address LIKE '%address_value%'
place_name = 'place_name_value' AND address LIKE '%address_value%'
OR
연산자로 수정한 상태입니다. (#142)위에서 말씀해주신 케이스 1(같은 주소에 다른 지점이 있는 경우)과 케이스 2(같은 주소에 동일한 지점 정보가 DB에 2개 이상 저장되어 있는 경우)에 대해 올바른 데이터를 반환하도록 수정하겠습니다.
현재 고려 중인 수정 방안은 다음과 같습니다. 그러나 더 적절한 방법이 있는지 고려해보겠습니다. 😁
인생네컷 춘천 터미널로드점
, 인생네컷 춘천 명동로드점
, 인생네컷 추천 CGV로드점
처럼 동일한 주소 내에 동일한 브랜드의 여러 지점이 존재할 수 있기 때문에, 단순히 브랜드와 주소가 일치하는 데이터만으로 동일한 지점임을 판단하기에는 근거가 부족하기 때문입니다.
목적
참고자료