21. (네트워크) BoardApp만들기

박은서's avatar
Dec 19, 2025
21. (네트워크) BoardApp만들기

메서드

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(으)로 완료된 프로세스
notion image
notion image
Share article