메서드
package com.mtcoding.ex11;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
// 책임 : 저장소(다른 사람 서버, HDD, DB)에서 데이터 가져오기
public class Repository {
// 책임 : 통신에서 다운로드하는 책임
public String download(String site) throws Exception {
// 1. 소켓 연결 완료
URL url = new URL(site);
HttpURLConnection socket = (HttpURLConnection) url.openConnection();
// 2. 읽기 버퍼 연결
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 3. 다운로드
String json = "";
while (true) {
String line = br.readLine(); // 값이 없으면 null을 준다.
if (line == null) break;
json = json + line; // if를 위에 안하면 {}null이 붙어서 파싱이 제대로 안 될 수도 있음
}
return json;
}
}BoardApp (Common 클래스 + BoardApp main)
코드
package com.mtcoding.ex11;
import com.google.gson.Gson;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter @Setter
class Common {
private Integer status;
private String msg;
private List<Body> body;
@Getter @Setter
public static class Body {
private Integer id;
private String title;
private String content;
private String author;
}
}
public class BoardApp {
public static void main(String[] args) {
try {
Repository repo = new Repository();
String json = repo.download("http://192.168.0.99:8080/api/boards");
// System.out.println();
Gson gson = new Gson();
Common common = gson.fromJson(json, Common.class);
// System.out.println();
List<Common.Body> list = common.getBody();
System.out.println("상태 : " + common.getStatus());
System.out.println("메세지 : " + common.getMsg());
System.out.println();
for (int i = 0; i < list.size(); i++) {
System.out.println("ID : " + list.get(i).getId());
System.out.println("제목 : " + list.get(i).getTitle());
System.out.println("내용 : " + list.get(i).getContent());
System.out.println("작가 : " + list.get(i).getAuthor());
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}콘솔
C:\tools\jdk-21\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2025.2.5\lib\idea_rt.jar=52329" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\java_lab\java-network-study\out\production\classes;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.solapi\sdk\1.0.3\7d5cb30cd49c9a49e4bfd4ff5d5e598efb2cbabf\sdk-1.0.3.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.13.2\48b8230771e573b54ce6e867a9001e75977fe78e\gson-2.13.2.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.googlecode.json-simple\json-simple\1.1.1\c9ad4a0850ab676c5c64461a05ca524cdfff59f1\json-simple-1.1.1.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.41.0\4381275efdef6ddfae38f002c31e84cd001c97f0\error_prone_annotations-2.41.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\junit\junit\4.10\e4f1766ce7404a08f45d859fb9c226fc9e41a861\junit-4.10.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-core\1.1\860340562250678d1a344907ac75754e259cdb14\hamcrest-core-1.1.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-reflect\2.2.10\98d0ca9819d98cb3aa5c0a25793830b6659feee2\kotlin-reflect-2.2.10.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\logging-interceptor\5.1.0\b23d83d9042b53ef66fc782f6b6485ccf756a91\logging-interceptor-5.1.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\converter-kotlinx-serialization\3.0.0\3541df11c0990f4a25610480c990d0e071a81e48\converter-kotlinx-serialization-3.0.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\retrofit\3.0.0\c0cdf6d243c5187732134129fda05a74f9197874\retrofit-3.0.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\2.2.10\80cc9a776a058eeda7053731350bc41af8858a5a\kotlin-stdlib-jdk8-2.2.10.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.18.0\ee45d1cf6ec2cc2b809ff04b4dc7aec858e0df8f\commons-codec-1.18.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\2.2.10\30de6faa127a4a012db8e71bf1b9c0a99b1402b2\kotlin-stdlib-2.2.10.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp-jvm\5.1.0\c17340f19b33c1d28a47b8dc4ae15018aff6dc10\okhttp-jvm-5.1.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-serialization-json-jvm\1.9.0\aea6f7d49fe5c458f8963ee6d4bdaf4a459ab3e7\kotlinx-serialization-json-jvm-1.9.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\2.2.10\18cc96ae090a71726822631e1808c7d329faab5d\kotlin-stdlib-jdk7-2.2.10.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-serialization-core-jvm\1.9.0\91448df39c558f7c6147b8bd8db01debe16e0cc1\kotlinx-serialization-core-jvm-1.9.0.jar;C:\Users\G\.gradle\caches\modules-2\files-2.1\com.squareup.okio\okio-jvm\3.15.0\cb3c285187640f543150fcac1ae012bdd778c0e1\okio-jvm-3.15.0.jar com.mtcoding.ex11.BoardApp
상태 : 200
메세지 : 성공
ID : 8
제목 : 제목8
내용 : 내용8
작가 : 임꺽정
ID : 7
제목 : 제목7
내용 : 내용7
작가 : 임꺽정
ID : 6
제목 : 제목6
내용 : 내용6
작가 : 장보고
ID : 5
제목 : 제목5
내용 : 내용5
작가 : 장보고
ID : 4
제목 : 제목4
내용 : 내용4
작가 : 장보고
ID : 3
제목 : 제목3
내용 : 내용3
작가 : 장보고
ID : 2
제목 : 제목2
내용 : 내용2
작가 : 홍길동
ID : 1
제목 : 제목1
내용 : 내용1
작가 : 홍길동
종료 코드 0(으)로 완료된 프로세스

Share article