교육과정_기록

개발자 교육을 듣고 있는 당신을 위해[5] - Open API

itsnot4me 2025. 6. 24. 22:13

당신이 교육에서 어떤 프로젝트를 구성하던 기초 데이터에 관한 고민은 하게 될 것이다..

어차피 게시판, 쇼핑몰의 틀에서 벗어날 수 없다는 압박감과 함께..

 

그런 고민이 들 때 갈 수 있는 공공데이터포털!

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제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에 어떻게 이 데이터들을 넣지? 할 때 보시면 아마도 도움이 될 것이다