Loading...

JAVA / / 2022. 2. 21. 16:21

PCR 검사 가능 병원 조회 - ex01

반응형

테스트 주도 개발(Test-Driven Development; TDD)
: 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나

개발자는 먼저 요구사항을 검증하는
자동화된 테스트 케이스를 작성한다.
그런 후에, 그 테스트 케이스를 통과하기 위한
최소한의 코드를 생성한다.

PCR 검사가 가능한 병원의 정보를
공공데이터에서 받아와,
자바 오브젝트로 변환한 후
데이터베이스에 넣어 검색하는 프로그램을 만들 것이다.

첫 번째 테스트 목적 : 데이터 다운로드


1. URL 주소 만들기

협업을 하기 위해서는
코드를 가독성 있게 짜주는 것이 좋다.

URL url = new URL("데이터를 받아올 주소");
이렇게 주소를 그냥 넣어버리면 코드는 짧아도,
다른사람들이 보기에 불편하고, 예쁘지 않은 코드가 된다.

StringBuffer를 이용해 URL을 보기 좋게 나눠준다.

// 1. URL 주소 만들기
StringBuffer sbUrl = new StringBuffer();

sbUrl.append("http://apis.data.go.kr/B551182/rprtHospService/getRprtHospService");
sbUrl.append("?serviceKey="); // 서비스 키
sbUrl.append("서비스키%3D%3D");
sbUrl.append("&pageNo="); // 몇번째 페이지 인지
sbUrl.append("1");
sbUrl.append("&numOfRows=");
sbUrl.append("10"); // 한 페이지당 몇개씩 가져올지
sbUrl.append("&_type=");
sbUrl.append("json"); // 데이터 포맷은 JSON


2. 다운로드 받기

우리가 사용하는 서비스 키의 맨 끝에는
%3D%3D가 붙어있다.

원래의 형태는 ~~==의 모양이었는데
URL의 쿼리 스트링 형식에
==이 들어가게 되면 브라우저가 인식을 못하고
망가진 쿼리 스트링이 되기 때문에
==을 %3D%3D로 바꿔서 입력하는 것이다.
이를 encode라고 한다.

반대로 %3D%3D를 ==으로 바꾸는 것을
decode라고 한다.

이때 우리가 URL 라이브러리를 사용하면
==이라고 입력해도 %3D%3D로 바꿔준다.

이를 url이 safe 한 상태라고 한다.

원래 인코드 된 문장을 URL 라이브러리로 인해
또 인코드 될 수도 있는데

URL 라이브러리는
URL safe가 적용되어 있으면
더 이상 반영하지 않게 만들어져 있다.

URL url = new URL(sbUrl.toString());
// 2. 다운로드 받기

URL url = new URL(sbUrl.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

BufferedReader br = new BufferedReader(
        new InputStreamReader(conn.getInputStream(), "utf-8"));

StringBuffer sbDownload = new StringBuffer(); // 통신결과 모아두기

while (true) {
    String input = br.readLine();

    // 버퍼가 비었을 때 break
    if (input == null) {
        break;
    }

    sbDownload.append(input);
}


3. 검증

테스트 단계이다.

통신의 결과를 모아두기 위해 만들어둔
StringBuffer에 결과가 잘 들어왔는지 확인해보자.

// 3. 검증 
System.out.println(sbDownload.toString());

 


 

package site.metacoding.hospapp.ex01;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

// 테스트 주도 개발!!
// 목적 : 다운로드
public class DownloadTest {

    public static void main(String[] args) {

        // 1. URL 주소 만들기
        StringBuffer sbUrl = new StringBuffer();

        sbUrl.append("http://apis.data.go.kr/B551182/rprtHospService/getRprtHospService");
        sbUrl.append("?serviceKey="); // 서비스 키
        sbUrl.append("서비스키%3D%3D");
        sbUrl.append("&pageNo="); // 몇번째 페이지 인지
        sbUrl.append("1");
        sbUrl.append("&numOfRows=");
        sbUrl.append("10"); // 한 페이지당 몇개씩 가져올지
        sbUrl.append("&_type=");
        sbUrl.append("json"); // 데이터 포맷은 JSON

        // 2. 다운로드 받기
        try {
            URL url = new URL(sbUrl.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "utf-8"));

            StringBuffer sbDownload = new StringBuffer(); // 통신결과 모아두기

            while (true) {
                String input = br.readLine();

                // 버퍼가 비었을 때 break
                if (input == null) {
                    break;
                }

                sbDownload.append(input);
            }

            // 3. 검증
            System.out.println(sbDownload.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}




[출처]

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com


메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형