본문 바로가기

Backend/JAVA

[패캠]패스트캠퍼스X야놀자: 백엔드 개발 부트캠프_JAVA 과제1

728x90

과제 주제: 위치기반 장소 검색 Java 애플리케이션 개발

과제 소개

- 이 Java 어플리케이션은 입력에 기반하여 특정 위치 내의 장소를 검색할 수 있도록 한다.

- 자신의 위치를 기반으로 특정위치에 있는 장소를 검색하여 출력하는 자바 애플리케이션을 개발 할 수 있다.

- Kakao 로컬 REST API중 키워드로 장소 검색하기, 카테고리로 장소 검색하기 API를 활용 할 수 있다.

 

작업 옵션

  1. 특정 위치(키워드) 주변의 지정된 반경 내에서 주유소를 검색하는 Java 어플리케이션을 개발합니다.
  2. 특정 위치(키워드) 주변의 지정된 반경 내에서 약국을 검색하는 Java 어플리케이션을 개발합니다.

이 중 2번을 선택하여 과제를 진행하였다.

 

과제 진행단계는 아래와 같았다.

 

단계 1: 카카오 API 키 획득

  1. 카카오 개발자에 로그인합니다.
  2. 시작 가이드에 따라 어플리케이션을 생성합니다.
  3. 나중에 사용할 REST API 키를 메모해 둡니다.

해당 이미지에서 시작하기 버튼을 누른다
해당 이미지에서 애플리케이션 추가하기 버튼을 누른다
빈칸들을 채운다

위 과정들을 다 진행하고 나면 아래와 같이 앱 키가 나온다

여기서 REST API 키를 사용하게 될 것이다!

단계 2: 로컬 REST API 사용

  1. 로컬 REST API 문서를 참고하여 키워드로 장소 검색하기와 카테고리로 장소 검색하기을 활용하여 개발합니다.
  2. 요청과 응답 구조에 대한 예제 코드를 확인합니다.

위 창에서 옆 목차를 보면 키워드로 장소 검색하기와 카테고리로 장소 검색하기가 있다. 

이 두개를 이용하여 진행한다.

 

카테고리 그룹코드는 아래에 다음과같이 써져있다. 여기서 약국코드를 이용하면된다

 

해당 URL로 GET메서드를 쓰면 기본으로 응답이 JSON형태로 오게 된다.

응답에서 위도와 경도를 추출하여 카테고리로 장소 검색 할때 해당 정보를 사용한다.

요청에는 위와같이 헤더에 REST API키와 쿼리 파라미터로는 카테로리 코드, 키워드 결과로 나온 x,y 좌표값과 반경거리는 직접 입력받아서 넘겨준다.

 

 

단계 3: Java 어플리케이션 구현

1. 키보드로 특정 위치 키워드와 검색 반경을 입력합니다.

- 이를 입력받는 SearchConditionInput 클래스를 작성하였다.

2. 입력한 키워드를 기반으로 위도(latitude)와 경도(longitude)를 추출합니다.

- 위도와 경도 즉, x,y값을 얻기위하여 키워드로 장소 검색하기를 이용하였다.

키워드 api 호출

API 호출하는 부분이 반복되어서 해당 부분을 'getHttpGet' 메서드로 분리하였다.

또한 결과값이 넘어왔을때 해당 body에서 document부분을 가져오는것도 'getResponseBody' 메서드로 분리하여 사용하였다.

 

3. 추출한 위치를 사용하여 입력한 반경(radius) 내에서 주유소나 약국을 검색합니다.

- 키워드 검색시에 얻어온 x,y값과 약국 카테고리 코드를 넣어 api요청 url을 생성한다.

 받아온 결과 값을 categoryDocuments에 저장한다.

카테고리 api 호출

4. 검색 결과(JSON)에서 원하는 정보를 추출하여 표시합니다.

- ResultPrinter라는 클래스에 정보를 어떻게 출력할 것인지 작성하였다.

5. 상위 10개 결과에 대한 추출된 데이터를 표시합니다.

-  결과의 갯수가 10보다 클때는 상위 10개의 결과에 대한 추출된 데이터를 표시하도록 하였다.

6. 검색된 결과에서 장소 URL을 입력하면 브라우저에 해당 kakaomap이 출력되도록 한다.

7. exit를 입력하면 종료한다.

 

과제를 진행하면서 생각했던것들....! 주저리주저리 적어보았습니다 ㅎㅎ

더보기

: 처음에는 main문 안에다가 모든 것들을 작성했었다.

그렇게 해도 동작은 되었어서 그냥 다 했다~ 라고만 생각을 했었다.

그치만 main문에 모든것을 다 적어 놓으니까 나중에 브라우저 띄우는건 어떻게 처리하였나요 와 같은 질문을 받았을때 해당 내용을 찾으려면은 내가 적은 코드들을 다 읽으면서 스크롤을 해서 내려서 그 부분을 찾기 까지가 시간이 많이 걸리고 보는 것도 힘들었었다. 

그래서 main문에다가만 모든 것을 적으면 불편하구나 라는 생각이 들었었다. 

팀원분들에게 나에게 이런 고민이 있었고 그치만 나는 어떻게 여러 클래스들로 어떤 기준으로 그 클래스들을 분리해야하는지 전혀 감이 오지 않았다.

이런 나에게 한 팀원분이 "같은 동작을 하는 부분이나 중복되는 부분들, 아니면 한 기능씩을 기준으로 해당 부분을 메서드로 빼보는것은 어떨까요?" 라고 말씀해 주셔서 내가 그렇게 생각하는 부분들을 메서드로 빼거나 클래스로 몇가지를 분류 해봤었다.

그래도 아직은 그렇게 작성하는 것이 익숙하지도 않고 정확한 기준도 잘 모르겠다....

다음 과제때는 좀 더 보기좋은 코드를 작성하고 싶다

728x90