본문 바로가기
Spring

네이버 지역검색 API를 활용한 맛집 List 제작 - (3)

코동이 2021. 8. 22.

<순서>

1. WishListDto 작성

2. WishListService 작성

3. WishListServiceTest 작성

 

*WishListDto

 WishList 순수 entity를 건드리지 않고, dto를 만들어서 최대한 보호하도록 한다.

@Data
@NoArgsConstructor
@AllArgsConstructor
public class WishListDto {
 private int index;
 private String title;
 private String category;
 private String address;
 private String readAddress;
 private String homePageLink;
 private String imageLink;
 private boolean isVisit;
 private int visitCount;
 private LocalDateTime lastVisiDate;
}

 

*WishListService.java

NaverClient에 등록했던 지역검색과 이미지검색을 활용하여 Spring MVC구조에 맞게 Service에 추가한다. 결과를 따로 보여주기 위해서 검색결과 갯수 검사와 1번에 WishListDto를 추가했다.

@Service
@RequiredArgsConstructor
public class WishListService {
 private final NaverClient naverClient;
 
 public WishListDto search(String query) {
  //지역 검색
  var searchLocalReq = new SearchLocalReq();
  searchLocalReq.setQuery(query);
 
 //검색 결과
 var SearchLocalRes searchLocalRes = naverClient.serachLocal(searchLocalReq);
 
 //
 if(searchLocalRes.getTotal > 0) {
  var localItem = searchLocalRes.getItems().stream().findFirst().get();
  var itemQuery = localItem.getTitle.replaceAll("<[^>]*>", ""); //괄호 제거
  
  //이미지 검색
  var serachImageReq = new SearhImageReq();
  searchImageReq.setQuery(imageQuery);
  
  //이미지 검색 결과
  var searchImageRes = naverClient.searchImage(searchImageReq);
  
  if(searchImageRes.getTotal > 0) {
   var imageItem = searchImageRes.getItems().stream().findFirst().get();
   var result = new WishListDto();
   result.setTitle(localItem.getTitle());
   result.setCategory(searchImageRes.getCategory());
   result.setAddress(localItem.getAddress());
   result.setHomePageLink(localItem.getLink());
   result.setImageLink(localItem.getLink());
   
   return result;
  }
 }
 
 return new WishListDto();
}

 

*WishListServiceTest.java

 정상적으로 검색이 되는지 확인한다. 메서드가 잘못 짜여졌다면, naver api에서 오류를 반환한다. 또한 메서드 로직은 잘 짰지만, 혹여나 갈비집 키워드에 해당하는 결과가 없을수도 있으므로 키워드에 유의한다.

@SpringBootTest
public class WishListServiceTest {
 @Autowired
 private WishListService wishListService;
 
 @Test
 public void searchTest() {
  var result = wishListService.search("갈비집");
  Asserts.assertNotNull(result);
 }
}

 

반응형