개발자 교육을 듣고 있는 당신을 위해[5] - Open API
당신이 교육에서 어떤 프로젝트를 구성하던 기초 데이터에 관한 고민은 하게 될 것이다..
어차피 게시판, 쇼핑몰의 틀에서 벗어날 수 없다는 압박감과 함께..
그런 고민이 들 때 갈 수 있는 공공데이터포털!
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
국민들이 쉽고 용이하게 사용할 수 있도록 데이터를 주는 곳 어떤 데이터를 사용.. 너무 상투적이지만 감사할 따름
하지만 처음 사용하게 될 우리가 궁금한 건 그런게 아니다
** 준비단계
전 게시물에서도 언급했었지만 이런 데이터를 바탕으로 프로젝트의 주제를 구상해보는 것도 좋다
금연자료들로는 뭘 할수 있을까 사실 잘 모르겠다
이런 식으로 데이터 형식, 받아오는 방식, '활용신청' 이 있다. 클릭하면
이 화면이 나오고 본인에게 맞는 적당한 활용목적을 적은 뒤 활용신청을 하면 대개 자동승인이 된다.
그리고 본인 개인의 인증키를 발급 받아 놓으면 준비는 끝
'상세설명' 을 클릭!
밑에 보면 이렇게 우리가 요청할 때 내야하는 파라미터와 타입들이 정의되어 있고
요청에 맞춰 응답받을 수 있는 .. 여러분들이 배웠다면 DB 테이블의 컬럼에 해당하는 것들이 있는 것이다
일부 코드 예시를 맞춰 보여드리도록 하겠다. 이 API의 '지역코드' 부분을 받아오는 것
@Service
public class RegionService {
private static final String BASE_URL = "http://apis.data.go.kr/B551011/KorService2/areaCode2"; // 예시 URL, 실제 지역 코드 API URL로 변경 필요
private static final String SERVICE_KEY = // 여러분의 인코딩되기 전 개인키 //
private final RestTemplate restTemplate = new RestTemplate();
private final ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private RegionDao regionDao; // DB와 매핑해서 넣어줄 값만 받아서 넣을 생성자
// 일부만
public List<Region> fetchRegions(int pageNo, int numOfRows) throws Exception {
String encodedKey = URLEncoder.encode(SERVICE_KEY, StandardCharsets.UTF_8.name());
String rawQuery = "serviceKey=" + encodedKey +
"&MobileOS=ETC" +
"&MobileApp=MyApp" +
"&_type=json" +
"&pageNo=" + pageNo +
"&numOfRows=" + numOfRows;
String fullUrl = BASE_URL + "?" + rawQuery;
URI uri = URI.create(fullUrl);
System.out.println("Region API 요청 URL = " + fullUrl);
String response = restTemplate.getForObject(uri, String.class);
if (response != null && response.trim().startsWith("<")) {
throw new RuntimeException("Region API 호출 실패: " + response);
}
JsonNode itemsNode = objectMapper.readTree(response)
.path("response")
.path("body")
.path("items")
.path("item");
List<Region> resultList = new ArrayList<>();
if (itemsNode.isArray()) {
for (JsonNode node : itemsNode) {
Region region = objectMapper.treeToValue(node, Region.class);
region.setRegionLon("0");
region.setRegionLat("0");
resultList.add(region);
}
}
return resultList;
}
아주 아주 일부 구성인데, JSON 타입으로 API에게 요청하고, 받은 걸 생성자 형태에 맞게 담아서 리스트로 정리, 그리고 DB에 담는 XML이 존재할 거라는 것 정도는 학원 4개월 이상 다닌 당신이라면 이해해 줄 것이라 믿는다..
API와 DB를 활용하는 방식은 다양하겠지만 기초적으로 내 DB에 어떻게 이 데이터들을 넣지? 할 때 보시면 아마도 도움이 될 것이다