본문 바로가기
국비학원/수업기록

국비 지원 개발자 과정_Day98

by 루팽 2023. 4. 19.

<시험1-공공데이터 활용하기문제해결시나리오>

공공데이터포털에서 제공하는 대중교통환승경로 조회 서비스 OpenAPI를 사용했으나 예상처럼 작동하지 않았다 - 예상되는 응답메시지와 해결방안을 작성

예시의 코드대로 실행하면 Key인증에 실패하여 SERVICE KEY IS NOT REGISTERED ERROR.[인증모듈 에러코드(30)] 에러 메시지가 뜬다.

정상적으로 작동한다면 정상적으로 처리되었다는 메시지가 뜬다.

// 12,13번줄 수정
urlBuilder.append("?ServiceKey=9GrQsW8hRS9HcVpsF6HmUldWuMkl%2Bqh7VkqSeZsLuXs1%2BM0m%2Fbcu6rsUUOEsW8gFhodnZfcDvPBPBEmypGMpHQ%3D%3D");
urlBuilder.append("&stSrch="+URLEncoder.encode("광화문","UTF-8"));

 

행정안전부가 제공하는 지진·해일대피소 정보를 비동기방식으로 요청해 xml형식으로 성공적으로 응답받았을 때, 화면에 정상적으로 출력되지 않았다. - 오작동의 원인, 올바른 구현방법을 작성

읽어올 데어터 문서 위치, 읽어올 방식, 문서의 타입, 데이터의 어떤 부분을 가져올지 등을 설정하지 않았고 xml과 html 마임타입이 다른데 파싱 하지 않고 바로 적용하려 했다.

또한 xml객체의 여러 개의 row태그를 처리할 수 없기에 반복문을 통해 row태그에 접근하여 태그값을 가져온 후 추가했어야 한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>지진/해일 대피소 안내</title>
<script type="text/javascript" src="/kh_exam/js/jquery.min.js"></script>
</head>
<body>
    <h2>지진/해일 대피소 안내</h2>
    <input type="button" value="실행" id="btn" />
    <div id="result"></div>
    <script>
        $("#btn").click(() => {
            $.ajax({
                url:'./data.xml',
                type: 'GET', // 방식
                dataType : "xml",
                error: function(){
                	alert('Error loading XML document');
                },
                success: function(data){
                    let template = "<table border='1'>";
                    const header = "<tr>"
                                +"<th>일련번호</th>"
                                +"<th>시도명</th>"
                                +"<th>시군구명</th>"
                                +"<th>대피지구명</th>"
                                +"<th>대피장소명</th>"
                                +"<th>주소</th>"
                                +"<th>경도</th>"
                                +"<th>위도</th>"
                                +"<th>수용가능인원(명)</th>"
                                +"<th>해변으로부터거리</th>"
                                +"<th>대피소분류명</th>"
                                +"<th>내진적용여부</th>"
                                +"<th>해발높이</th>"
                                +"</tr>";
                    template += header;
                    $(data).find('row').each(function(){
                        const id = $(this).find('id').text();
                        const sido_name = $(this).find('sido_name').text();
                        const sigungu_name = $(this).find('sigungu_name').text();
                        const remarks = $(this).find('remarks').text();
                        const shel_nm = $(this).find('shel_nm').text();
                        const address = $(this).find('address').text();
                        const lon = $(this).find('lon').text();
                        const lat = $(this).find('lat').text();
                        const shel_av = $(this).find('shel_av').text();
                        const lenth = $(this).find('lenth').text();
                        const shel_div_type = $(this).find('shel_div_type').text();
                        const seismic = $(this).find('seismic').text();
                        const height = $(this).find('height').text();

                        console.log(sido_name+", "+address);
                        template += "<tr><td>"
                                + id + "</td><td>"
                                + sido_name + "</td><td>"
                                + sigungu_name + "</td><td>"
                                + remarks + "</td><td>"
                                + shel_nm + "</td><td>"
                                + address + "</td><td>"
                                + lon + "</td><td>"
                                + lat + "</td><td>"
                                + shel_av + "</td><td>"
                                + lenth + "</td><td>"
                                + shel_div_type + "</td><td>"
                                + seismic + "</td><td>"
                                + height + "</td></tr>"
                        })
                        template += "</table>";
                        $("#result").html(template);
                    },
                    error : (xhr, txtStatus, err) => {
                    	console.log(xhr, textStatus, err);
                }
            })
        })
    </script>
</body>
</html>

 

 

<시험2-공공데이터 활용하기서술형(신)>

OpenAPI 공공데이터에서 요청 시 서버에서 리턴하는 XML 데이터포맷에 대해 작성

다목적 마크업 언어로 태그 등을 이용하여 데이터의 구조를 기술한다. 직관적이기에 단순 게임 옵션, 직접 데이터 수정이 잦은 부분에 사용한다.

 

공공데이터에서 제공하는 리턴하는 XLS 데이터포맷에 대해 작성

일반적으로 사용되는 스프레드시트 형식인 Microsoft Excel 워크시트로 독점 바이너리 형식이고 Excel2003 이전 형식으로 문서를 만든 경우 생성되는 확장자이다.

 

공공데이터 제공/개방에 대해 설명

공공기관이 전자적으로 생성 또는 취득하여 관리하고 있는 모든 데이터베이스(DB), 전자화된 파일을 이용자에게 데이터를 자유롭게 재활용할 수 있도록 제공하고, 제공받은 정보를 상업적·비영리적으로 이용할 권한을 부여하는 것이다.

 

공공데이터 OpenAPI를 웹어플리케이션 client(browser)에서 비동기처리 하고자 할 때 작업절차를 순서에 맞게 나열

d-c-a-b-e

 

HttpUrlConnection객체의 사용절차를 올바르게 나열

d-c-b-a-e

 

공공데이터 포털 메인메뉴에서 제공하는 데이터신청의 용도를 설명

인증키를 발급받아 해당 데이터 접근권한을 얻기 위해서 필요하다.

 

출력결과의 여러 list태그항목을 담을 수 있는 KoreanHouse VO클래스를 설계

public class KoreanHouseVO { 
    private int goodsno;
    private int brandno;
    private String brandnm;
    private String goodsnm;
    private int price;
    private String selltype;
    private double posy;
    private double posx;
}

 

출력결과의 여러 itemList태그항목을 담을 수 있는 Station VO클래스를 설계

public class StationVO {
    private String poiId;
    private String poiNm;
    private String gpsX;
    private String gpsY;
    private String posX;
    private String posY;
    private String addr;
}

댓글