이번엔 이제 원래 있던 코드를 좀 더 간단하고 , 편리하게 수정하는 작업을 했다.
내 프로젝트의 핵심 기능인 위도 경도 데이터를 기반으로 주변 음식점 데이터를 갖고 오는 것인데 .
for (int i = 0; i < datasDTOS.size(); i++) {
// if(datasDTOS.get(i).getLatitude() !=0 && datasDTOS.get(i).getLongitude() !=0){
// //특정 위치에서 범위 설정하는거
// if((datasDTOS.get(i).getLatitude()< lat+0.0009045 && datasDTOS.get(i).getLatitude() >lat-0.0009045)&&
// (datasDTOS.get(i).getLongitude()<har+0.0025045 && datasDTOS.get(i).getLongitude()>har-0.0025045) ){
// System.out.println("메인 데이타에 데이타 추가중 ");
//
// mainData2.add(datasDTOS.get(i));
// }
// }
// }
살짝 이런식으로 DB 에 있는 모든 데이터를 갖고와서 현재 위도 경도에서 최소 최대 범위를 설정해서
거기에 부합하는 데이터만 따로 옮겨 담는 방식이었다.
근데 이제 이걸 더 간편하고 빠르게 할수 없을까 찾아보다가
List<FoodDatas> foodDatasListByJPA =foodService.getDatasInRange(lat-0.0009045F, lat+0.0009045F, har-0.0025045F, har+0.0025045F);
List<FoodDatas> findByLatitudeBetweenAndLongitudeBetween(float minLat, float maxLat, float minLong, float maxLong);
이렇게 .JPA 가 가지고 있는 따로 쿼리문을 안쓰고 함수명으로만 만들수있는 기능을 가지고
더 간단하게 주변 음식점 데이터를 갖고 올수 있게하였다.
그리고 이제 위도와 경도를 더 빨리 찾기 위해
@Entity
@Setter
@Getter
@Table(indexes = {
@Index(name = "idx_latitude", columnList = "latitude"),
@Index(name = "idx_longitude", columnList = "longitude")
})
public class FoodDatas {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String address;
private String storePhNum;
//double 대신 float 를 쓴 이유
//double 이 f 보다 더 정밀한 표현이 가능함
// 근데 더 많은 메모리도 소비함
//엄청 큰 규모가 아니라 상관이없을수도있는데
// 그래도 2만개의 데이터를 쓰기 때문에
// 안전하게 구동하기위해 float 를씀 그리고 소수점 자리도 충분함
private float latitude;
private float longitude;
이렇게 인덱스를 적용해주었다. 각각의 데이터는 각기다른 위도와 경도를 가지고 있기때문에
카널리티(?) 인가 그게 높아서 인덱스의 효율이 좋다!
끝으로 이제 거의 완성되가는 즐겨찾기 기능이 있는 사진을 투척하겠다.

'개인 프로젝트 (DNW)' 카테고리의 다른 글
| 회원 정보 수정 기능, 비밀번호 변경 기능 추가 (REST api 활용) (0) | 2024.04.05 |
|---|---|
| 카카오 로그인 기능, 업데이트 뉴스 소식 팝업창 ( 쿠키로 관리) 기능 추가 (0) | 2024.04.04 |
| DNW 프로젝트 , 메뉴 DB 호출하기 , 음식점 저장하기 (1) | 2024.03.19 |
| 음식점 DB 2만개 넣기 (1) | 2024.03.16 |
| 네이버 api, chatgpt api 근황 (0) | 2024.02.12 |