본문 바로가기

JavaScript

자바스크립트 Ajax를 이용한 오픈API 활용

Ajax란 비동기적(Asynchronous)인 웹 어플리케이션을 제작하기위한 웹개발기법으로, 클라이언트 조작을 단순화하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리입니다.

Asynchronous JavaScript and XML 의 줄임말인데, 요즘은 XML을 사용하지 않고 거의 대부분 json을 사용합니다.
Ajaj 라고 이름을 바꿔야 할까요? 

사용자 입장에서는 비동기통신이 화면갱신도 없고 요청과 응답 사이 시간에도 다른 일을 할 수 있어 편리하고 빠른듯한 환경(착각)을 느낄 수 있습니다. 다만 동일출처 정책으로 인해 다른 도메인과 통신이 불가하며 (서버단에서 설정하거나, 브라우저 설정을 변경해 가능) 요청 남발시 서버에 부하가 늘 수 있고, 동적화면구성으로 개발자의 구현이 복잡하다는 단점 등이 있습니다.

기본구조

기본 뼈대는 다음과 같습니다. 
type 에서 GET 과 POST 방식을 선택할 수 있고, 성공 시 콜백을 통해 데이터를 처리할 수 있습니다. 
$.ajax({
    type:"GET",
    url:"......url",
    success: function(data) {
      ....
    }
});
cs

더 많은 옵션은 http://api.jquery.com/jQuery.ajax/ 를 참고하시면 되겠습니다. 

예제

예제를 위해 더미데이터를 사용하겠습니다. 
mockaroo 라는 곳에서 테스트용 더미데이터를 생성할 수 있습니다.
저는 간단하게 id, name, city 세 개의 키를 두고 500개의 데이터를 생성했습니다.
귀찮으시면 아래 파일을 사용하셔도 됩니다. 

MOCK_DATA.json


이제 위 데이터를 이용해 아래와 같이 간단하게 코드를 작성해 봅시다. 

왼쪽 A4 모양의 버튼을 누르면 파일들을 볼 수 있습니다.


url에 우리가 가지고 있는 json 파일을 넣어 테스트에 성공했습니다. 
버튼을 눌러보시면 페이지가 넘어가지 않고 데이터를 받아오는 것을 확인할 수 있으실 겁니다. 

오픈API

그럼 이제 오픈 API를 사용해 봅시다.
사용할 데이터는 영화진흥위원회 오픈 API 홈페이지의 박스오피스 데이터입니다.

접속해서 OPEN API - 제공 서비스를 클릭하면 다음과 같은 화면을 볼 수 있고
데이터가 어떻게 이루어졌는지 확인할 수 있습니다.


이 값들을 화면 맨 아래에 있는 링크를 클릭하여 예시를 볼 수 있습니다. 


응답 예시에 xml과 json이 있는데, 우리는 역시 json 으로 가져올 예정입니다. 아래 링크를 클릭하면

이렇게 요청한 데이터를 JSON 형식으로 받을 수 있습니다. 
다만 미션임파서블:고스트프로토콜로 보아 한참 전의 데이터임을 알 수 있겠네요.
주소창의 쿼리스트링 끝부분에 보면 


targetDT 라는 파라미터에 날짜를 넣음을 알 수 있어 이 날짜를 최근으로 바꿔보겠습니다.



날짜를 바꿔 넣으니 현재 상영중인 영화인 토르:라그나로크가 현재 박스오피스 1위로 잘 나오는 것을 확인할 수 있습니다.
이걸 http://json.parser.online.fr/ 이라는 사이트에 들어가서 복붙하면


보기 힘든 Json 구조를 파싱하여 보기좋게 구조화 시켜줍니다. 
우리가 받은 데이터는 3중의 중첩구조임을 알 수 있습니다.

이제 이 박스오피스 데이터를 가져와 보겠습니다.
예제에 쓰였던 코드의 url에 MOCK_DATA.json 대신 우리가 요청했던 url

아래에서 확인해보실 수 있습니다.


위 링크에 접속하실 때 F12 개발자모드를 켜고 Network 탭 클릭 - Preserve log에 체크 - All 을 선택한후 F5를 눌러 새롭게 요청하면



요청한 내역을 볼 수 있는데,



Response Headers 부분에 Content-type을 보면 application/json 이라고 되어있는 것을 확인하실 수 있습니다. 


이제 반복문으로 직접 key값을 이용해 영화순위와 제목을 출력해 봅시다.
아까 포맷팅했던 구조를 참고하면 보기 편할 것 같습니다.


result가 결과값 전체를 가지고 있습니다. 
result['boxOfficeResult'] 로 value를 빼내면 아래 {"boxofficeType":"주말 박스오피스" ... } 가 나옵니다.
여기서 다시 result['boxOfficeResult'] 안에서 "weeklyBoxOfficeList" key 값을 이용해 value 값으로 들어가야 비로소
빼내고자 하는 영화 개별의 정보들이 등장합니다.

반복문을 통해 순위와 영화 제목만 빼낸 결과입니다.


이제 Ajax를 마음껏 활용해 봅시다!