[GDG] 홍대 맛집 아카이빙 프로젝트 #21 - 카카오지도 API 짧게

2025. 8. 18. 22:40·팀 프로젝트/[2025][GDG]홍대 맛집 아카이빙 프로젝트

오늘 코어타임이라서 API 연결을 했는데 연결됐다 와

약간의 변수에 오류가 있어서 제대로 처리가 안됐긴 했는데 백엔드 서버의 출력문이 실행되어 연결은 제대로 되었다. 물론 로그인 기능에 대해서만 연결이 되어서 아직은 약간은 고쳐야할 부분이 많지만 그래도 어쨌든 연결했으니 기분은 좋다


STORE DB를 실제와 비슷하게

어제 하던 것에 이어서 카카오 지도 API를 이용해서 홍문관 주변 1.3km 내의 음식점 정보를 DB에 담는 과정이 필요하다.

 

기본로직은 저 is_end 값이 false일 동안만 진행하는 것이었는데, 알고보니 리턴할 수 있는 값이 남아도 true로 반환되더라.. 그래서 한 100몇 개만 DB에 저장되고 끝남 그래서 로직을 수정해야한다.

 

그냥 처음에 아무 요청하나 보낸 다음에 얻은 메타 값에서 total_count / pageable_count 값만큼 반복하면 될 듯하다.

 

@PostConstruct
	public void storeDBSetting() throws Exception {

		int pageCount = 1;
		int maxPage;
		List<Store> storeList = new ArrayList<>();

		WebClient webClient = WebClient.builder()
				.baseUrl("https://dapi.kakao.com")
				.defaultHeader("Authorization", "KakaoAK " + kakaoSecret)
				.build();

		String testResponse = webClient.get()
				.uri("/v2/local/search/category.json?category_group_code=FD6&x=126.9250355422&y=37.5525245968145&radius=1300")
				.retrieve()
				.bodyToMono(String.class)
				.block();

		JsonNode jsonNode = objectMapper.readTree(testResponse).get("Meta");
		Integer totalCount = jsonNode.get("total_count").asInt();
		Integer pageableCount = jsonNode.get("pageable_count").asInt();

		maxPage = (totalCount / pageableCount) + 1;

		while (pageCount <= maxPage) {
			String response = webClient.get()
					.uri("/v2/local/search/category.json?category_group_code=FD6&x=126.9250355422&y=37.5525245968145&radius=1300&page=" + pageCount)
					.retrieve()
					.bodyToMono(String.class)
					.block();

			JsonNode rootNode = objectMapper.readTree(response);
			System.out.println(pageCount);

			JsonNode documents = rootNode.get("documents");

			documentList.add(documents);
			pageCount++;
		}


		for (JsonNode document : documentList) {
			for (JsonNode element : document) {
				String storeName = element.get("place_name").asText();
				String storeLocation = element.get("road_address_name").asText();

				Store store = Store.builder()
						.storeName(storeName)
						.storeLocation(storeLocation)
						.build();

				System.out.println(store);

				storeList.add(store);
			}
		}

		storeRepositoryInterface.saveAll(storeList);
	}

 

원래 maxAge 부분은 

JsonNode jsonNode = objectMapper.readTree(testResponse).get("Meta");
		Integer totalCount = jsonNode.get("total_count").asInt();
		Integer pageableCount = jsonNode.get("pageable_count").asInt();

		maxPage = (totalCount / pageableCount) + 1;

이렇게 되어있었으나 totalCount와 pageableCount가 정수일 경우에는 불러올 수 있는 페이지 수를 넘어버려서 에러가 터진다.

maxPage = (int) Math.ceil((double) totalCount / pageableCount);

이렇게 올림처리를 해야한다.

 

그러고 좀 검색해보니 저 pageable_count: 45라는게 최대 45 페이지를 불러올 수 있다.... 한 번에 15개씩 불러오니까 675개가 최대. 내가 불러와야하는 것은 4000개가 넘으므로 당연히 모두 불러올 수 없고, 작은 범위로 나눠서 불러와야한다. 우선은 45개만 불러오기

 

maxPage = Math.min((int) Math.ceil((double) totalCount / pageableCount), 45);

Math.min을 활용하여 둘 중 더 작은 값에 대해서 maxPage를 결정하였다.

 

성공

 

오늘은 다른 할 게 있어서 4000개 다 불러오기는 못하고...

우선 범위를 1000m로 줄이고 

350m 범위 여러개를 만들었다.

 

제일 북쪽부터

뉴오더클럽 연남 기준 반경 170m

SC제일은행 동교동지점 기준 반경 352m

스튜디오메리 신촌점 기준 반경 330m

올리브영광흥창역점 기준 반경 357m

탈영역우정국 기준 반경 343m

또바기치킨상수홍대점 기준 반경 349m

웰빙할인마트 기준 반경 332m

아니키합정 기준 반경 325m

GS25합정IO점 기준 반경 302m

GS25서교명품점 기준 반경 300m

스페이스홍 기준 반경 321m

마크스게스트하우스 기준 354m

쇼파르 기준 반경 352m

서교초등학교체육관 기준 반경 250m

카미야 기준 반경 250m

 

이렇게 구성되어 있고, 중복되는 것을 뺄 예정이다.

 

암튼 오늘은 피곤하기도하고.. 다른 할 일도 좀 있어서 여기서 마무리

내일은 이것들을 기반으로 DB에 값을 넣어주면 된다.

'팀 프로젝트 > [2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글

[GDG] 홍대 맛집 아카이빙 프로젝트 #22 - 데모데이 발표자료 준비  (0) 2025.08.27
[GDG] 개발코스 6주차 WIL  (0) 2025.08.20
[GDG] 홍대 맛집 아카이빙 프로젝트 #20 - mySQL과 각종 코드 보강하기  (6) 2025.08.18
[GDG] 홍대 맛집 아카이빙 프로젝트 #19 - OAuth 되살리기 및 정규화 보강하기  (3) 2025.08.16
[GDG] 홍대 맛집 아카이빙 프로젝트 #18 - OAuth와 DB 연동하기  (2) 2025.08.15
'팀 프로젝트/[2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글
  • [GDG] 홍대 맛집 아카이빙 프로젝트 #22 - 데모데이 발표자료 준비
  • [GDG] 개발코스 6주차 WIL
  • [GDG] 홍대 맛집 아카이빙 프로젝트 #20 - mySQL과 각종 코드 보강하기
  • [GDG] 홍대 맛집 아카이빙 프로젝트 #19 - OAuth 되살리기 및 정규화 보강하기
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59)
        • JVM (12)
        • 백엔드 (20)
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[GDG] 홍대 맛집 아카이빙 프로젝트 #21 - 카카오지도 API 짧게
상단으로

티스토리툴바