99import com .back .web7_9_codecrete_be .global .error .code .LocationErrorCode ;
1010import com .back .web7_9_codecrete_be .global .error .exception .BusinessException ;
1111import lombok .RequiredArgsConstructor ;
12+ import org .springframework .retry .annotation .Backoff ;
13+ import org .springframework .retry .annotation .Retryable ;
1214import org .springframework .stereotype .Service ;
15+ import org .springframework .web .client .HttpServerErrorException ;
16+ import org .springframework .web .client .ResourceAccessException ;
1317import org .springframework .web .client .RestClient ;
1418
1519import java .util .List ;
@@ -22,15 +26,23 @@ public class KakaoLocalService {
2226 private final RestClient kakaoMobilityClient ;
2327
2428 // 해당 좌표의 1km 근방에 존재하는 음식점를 거리순으로 나타냄
29+ @ Retryable ( //최초 1번, 재시도 2번 시도
30+ retryFor = {HttpServerErrorException .class , ResourceAccessException .class }, //외부 서버의 문제, 네트워크, 타임아웃 문제인 경우에 재시도
31+ backoff = @ Backoff (delay = 200 , multiplier = 2.0 ) //0.2초, 0.4초, 0.8초 순으로 재시도
32+ )
2533 public List <KakaoLocalResponse .Document > searchNearbyRestaurants (double lat , double lng ) {
26-
34+ //좌표의 소수점 숫자가 다르면 매번 다른 캐싱을 해야하니, 통일시켜줌
35+ lat = Math .round (lat * 10000 ) / 10000.0 ;
36+ lng = Math .round (lng * 10000 ) / 10000.0 ;
37+ final double y = lat ;
38+ final double x = lng ;
2739 return kakaoRestClient .get ()
2840 .uri (uriBuilder -> uriBuilder
2941 .path ("/v2/local/search/keyword.json" )
3042 .queryParam ("query" , "음식점" )
3143 .queryParam ("category_group_code" , "FD6" )
32- .queryParam ("x" , lng )
33- .queryParam ("y" , lat )
44+ .queryParam ("x" , x )
45+ .queryParam ("y" , y )
3446 .queryParam ("radius" , 1000 ) // 반경 1km
3547 .queryParam ("sort" , "distance" )
3648 .build ()
@@ -41,15 +53,24 @@ public List<KakaoLocalResponse.Document> searchNearbyRestaurants(double lat, dou
4153 }
4254
4355 // 해당 좌표의 1km 근방에 존재하는 카페를 거리순으로 나타냄
44- public List <KakaoLocalResponse .Document > searchNearbyCafes (double lat , double lng ) {
45-
56+ @ Retryable ( //최초 1번, 재시도 2번 시도
57+ retryFor = {HttpServerErrorException .class , ResourceAccessException .class }, //외부 서버의 문제, 네트워크, 타임아웃 문제인 경우에 재시도
58+ backoff = @ Backoff (delay = 200 , multiplier = 2.0 ) //0.2초, 0.4초, 0.8초 순으로 재시도
59+ )
60+ public List <KakaoLocalResponse .Document > searchNearbyCafes (double lat , double lng ) {
61+
62+ //좌표의 소수점 숫자가 다르면 매번 다른 캐싱을 해야하니, 통일시켜줌
63+ lat = Math .round (lat * 10000 ) / 10000.0 ;
64+ lng = Math .round (lng * 10000 ) / 10000.0 ;
65+ final double y = lat ;
66+ final double x = lng ;
4667 return kakaoRestClient .get ()
4768 .uri (uriBuilder -> uriBuilder
4869 .path ("/v2/local/search/keyword.json" )
4970 .queryParam ("query" , "카페" )
5071 .queryParam ("category_group_code" , "CE7" )
51- .queryParam ("x" , lng )
52- .queryParam ("y" , lat )
72+ .queryParam ("x" , x )
73+ .queryParam ("y" , y )
5374 .queryParam ("radius" , 1000 ) // 반경 1km
5475 .queryParam ("sort" , "distance" )
5576 .build ()
0 commit comments