자바/스프링(Spring)

자바(Spring) OpenAPI를 통한 JSON Parser 코드

류창 2022. 9. 8. 22:25
반응형

 

 

 

이번시간엔  OpenAPI를 통해 데이터를 가져오는 코드를짜보겠다.

 

 

 

OpenAPI는  개발자라면 누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스의 프로그래밍 적인 권한을 제공한다.

 

 

즉,  데이터를 제공하는 외부 API라고 보면된다.

 

이 OpenAPI를 통해 우리는 실생활 데이터를 수집하여 프로젝트에 써먹을수있다.

 

그런데 이 실생활 데이터는 대부분 JSON을 지원한다. 

XML도 있긴하지만, 여러태그가 붙어서 JSON이 훨씬 가볍다.

 

OpenAPI를 직접 체험해볼수있고  문제도 풀어볼수있는 환경이다. 

 

카카오 2021 2차 코딩테스트 문제를 예시로 들어보자.

https://programmers.co.kr/skill_check_assignments/67

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

이 포스팅은   Java언어로  RESTAPI 호출 처리와 JSON Parser코드 만을 다룬다.

 

실제 문제는 여러분의 몫으로 남겨두겠다.  

 

 

0. JSON라이브러리 설치

Build.Gradle 를 들어가서 라이브러리를 추가하자.

 

Maven 또는 최신버전으로 하고싶으신분은 여기서 확인하시면 된다.

https://mvnrepository.com/artifact/org.json/json

 

1. GlobalData 밑준비

 

 

앞으로 사용할 여러 데이터를  내가 알기쉬운 단어로 치환한다.

 

꼭 굳이 안해도 되긴 하지만 해두면  다른사람이볼때 가독성이 매우 좋아지니,  협업하는 마인드로 

 

단번에 이해하기 힘든 데이터는 치환해두는 연습이 꼭 필요하다.

 

 

 

2. Connection  클래스

 

 

싱글톤 패턴을 적용했다.

 

Connection클래스는   OpenAPI와 연결하여 데이터를 받아오는 클래스므로, 자주 사용할예정이니

 

싱글톤을 사용하면 자원을 많이 아낄수있다.

 

본격적으로 연결을해보자. 

 

우선 문제를 풀기위한 토큰을 발급받자. 

 

 

2-1. URL 연결

 

먼저 URL를 하나 생성하여  주소를 입력한다.

 

입력한후,  url.openConnection()으로  연결을한다

 

원래  openConnection을하면  반환타입으론  UrlConnection을 반환하지만,  HttpURLConnection으로 캐스팅해주자.

Http주소를 다루기위한 여러 메소드를 더욱 제공해준다.

 

 

 

 

토큰을 받으려면 다음과같은 문서의 양식을 지키자.

 

Header부분

 

1. Post로 보내기

2. X-Auth-Token 으로 발급된 토큰 설정하기

3. Content-Type 을 application/json 설정하기

 

Parameter 부분

1. problem 숫자 담기

 

다음과같이 입력을넣자.

 

Get방식의 Parameter는  쿼리스트링으로 보내버리자.

 

conn.getResponseCode()로  잘 입력되었는지 확인을 해보자.

 

잘 입력이 되었다면,  데이터를 읽어보자.

 

BufferReader을 통해 ,  InputStream을 호출합니다.   InputStream은 외부데이터를 읽는용도입니다.

반대로 OutputStream은 데이터를 외부로 보내는(출력하는) 용도구요.

 

conn에서 읽은 getInputStream을 호출하여 

 

while문을통해  읽은 내용을   StringBuffer로 저장을합시다.

 

모든 과정이완료가됬다면  StringBuffer에서  JSON데이터를 뽑아옵시다.

 

 

JSON데이터를 뽑아올땐 JSON라이브러리에 있는  JSONObject로 뽑는다.

 

JSONObject로 뽑으면  알아서 Json형태로 매핑을 해주기때문에,

사용할때는  Key- value 형태로 값을 뽑아오면된다.

 

우리의 목적은 StartAPI에  토큰(auth_Key)을 얻기위함이니,  auth_Key를 뽑아오고 반환한다.

 

실제로 구현해보고 출력을해보면 매우 잘나온다.

 

---------------------------------------------------------------------------------------------------------------

 

 

StartAPI를 구현을 해보았다.

 

이 외에도 구현해야할 API는

 

locations  , trucks, simulate , scoreAPI가  남아있다.

 

이것도  문서의 양식대로  StartAPI처럼 구현만 하면 된다.

 

 

 

반응형