Java만 이용하여 간단한 애플리케이션을 만들어보고자 한다.
과제 내용은 아래와 같다.
이 Java 어플리케이션은 입력에 기반하여 특정 위치 내의 장소를 검색 가능.
자신의 위치를 기반으로 특정위치에 있는 장소를 검색하여 출력
Kakao 로컬 REST API중 키워드로 장소 검색하기, 카테고리로 장소 검색하기 API를 활용할 것
작업 옵션
단계 1: 카카오 API 키 획득
아래 포스팅을 참고할 것.
KakaoAPI를 활용해 책을 검색하는 JAVA 애플리케이션을 만들어보자
과제를 받았다. (으어어ㅓㅓㅇ어어ㅓ) 일단 https://developers.kakao.com/ 여기서 "내 애플리케이션"에서 app을 생성한 뒤, API KEY를 받아두었다. Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션
hyem5019.tistory.com
단계 2: 로컬 REST API 사용
단계 3: Java 어플리케이션 구현
예시 입력 및 출력
입력 화면
위치 키워드를 입력하세요: 검색 반경을 입력하세요(1000:1km):
출력 화면
입력한 위치 키워드: 검색 반경: **주유소 검색 결과** - 장소 URL(지도 위치): - 상호명: - 주소: - 전화번호: - 거리(km): **약국 검색 결과** - 장소 URL(지도 위치): - 상호명: - 주소: - 전화번호: - 거리(km): 프로그램 종료
이 애플리케이션의 대략적인 흐름은 아래와 같다.
1. 키워드를 입력하여 KaKaoAPI에서 해당 키워드가 가리키는 좌표를 현재 내 위치로 설정한다.
2. 내 위치를 기반으로 반경 내 가장 가까운 약국 정보를 출력한다.
public class KakaoApi { private static final String API_KEY = "ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ"; private static final String KEYWORD_URL = "https://dapi.kakao.com/v2/local/search/keyword"; private static final String CATEGORY_URL = "https://dapi.kakao.com/v2/local/search/category"; private double x; private double y; private int radius; public void setRadius(int radius) { this.radius = radius; } public int getRadius() { return radius; } // 키워드 검색 메서드 public JSONObject keywordSearch(String keyword) throws UnsupportedEncodingException { String url = KEYWORD_URL + "?query=" + URLEncoder.encode(keyword, "UTF-8"); // 이게 있어야 url keyword에서 띄어쓰기까지 인식 가능 JSONObject json = getJson(url); // json = {documents : [{객체A},{객체B}....] , meta : [배열2]} JSONArray documents = json.getJSONArray("documents"); // documents = [{객체A},{객체B}....] // documents 키값에 대응하는 value. JSONObject mylocation = documents.getJSONObject(0); //base = {객체A} this.x = Double.parseDouble(String.valueOf(mylocation.get("x"))); this.y = Double.parseDouble(String.valueOf(mylocation.get("y"))); return mylocation; // 키워드 검색 결과 중 가장 앞에 있는 객체 선택 } public void categorySearch() throws JSONException { String url = CATEGORY_URL + "?x=" + x + "&y=" + y + "&category_group_code=" +"PM9" + "&radius=" + radius; JSONObject json = getJson(url); JSONArray documents = json.getJSONArray("documents"); printResult(documents); } // REST API 이용 메서드 private JSONObject getJson(String apiUrl) { //requestURL 설정 후 Kakao-API의 response 값 인 json 을 받아오는 메서드 String json = ""; try { HttpClient client = HttpClientBuilder.create().build(); HttpGet getRequest = new HttpGet(apiUrl); //Get 메소드 URL 생성 getRequest.addHeader("Authorization","KakaoAK "+KakaoApi.API_KEY); //API KEY 입력 HttpResponse getResponse = client.execute(getRequest); // 위에 보낸 request에 대한 response 내용(json) BufferedReader br = new BufferedReader(new InputStreamReader(getResponse.getEntity().getContent(), "UTF-8")); json = br.readLine(); } catch (Exception e) { e.printStackTrace(); } return new JSONObject(json); } // 검색 결과 출력 메서드 private void printResult(JSONArray arr) { try { JSONObject obj = arr.getJSONObject(0); System.out.println("- 장소 URL(지도 위치): " + obj.get("place_url")); System.out.println("- 상호명: " + obj.get("place_name")); System.out.println("- 주소: " + obj.get("road_address_name")); System.out.println("- 전화번호: " + obj.get("phone")); System.out.println( "- 거리(km): " + Double.parseDouble((String) obj.get("distance")) / 1000 + "km"); System.out.println("----------------------------------------------------"); System.out.println(); System.out.println("kakaomap URL(장소 URL) :" + obj.get("place_url")); System.out.println("kakaomap URL(장소 URL) :exit"); System.out.println("프로그램 종료"); } catch (Exception e) { e.printStackTrace(); } } }
public class Main { private static final KakaoApi kakaoApi = new KakaoApi(); private static final Scanner scanner = new Scanner(System.in); public static void main(String[] args) { try { // mylocation을 키워드로 입력 System.out.print("키워드를 입력하세요: "); String keyword = scanner.nextLine(); // mylocation 정보 가져오기 kakaoApi.keywordSearch(keyword); // 검색 반경 입력 System.out.print("검색 반경을 입력하세요(1000:1km): "); kakaoApi.setRadius(scanner.nextInt()); System.out.println("입력한 위치 키워드: " + keyword); System.out.println("검색 반경: " + kakaoApi.getRadius() / 1000.0 + "km"); System.out.println(); // mylocation 기준 가까운 약국 검색(catergorySearch) System.out.println("**약국 검색 결과**"); kakaoApi.categorySearch(); } catch (Exception e) { e.printStackTrace(); } } }
실행 결과는 아래와 같다.



키워드를 입력하지 않거나 막 입력하면 예외발생하는데, 이건 추후 손 좀 봐야겠다.
감사합니다.
'Development > Java' 카테고리의 다른 글
자바는 왜 객체지향 언어인가요? (4) | 2025.03.15 |
---|---|
객체지향 설계원칙 : SOLID 란? (3) | 2024.02.27 |
객체 지향 프로그래밍이란?? 객체 지향의 4가지 특징 Feat.캡상추다 (2) | 2024.02.26 |
boolean 바인딩 에러.. boolean과 Boolean의 차이 (2) | 2024.02.02 |
KakaoAPI를 활용해 책을 검색하는 JAVA 애플리케이션을 만들어보자 (2) | 2023.08.31 |