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
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9