<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Java on YuuuuuuYu</title><link>https://4d4cat.com/tags/java/</link><description>Recent content in Java on YuuuuuuYu</description><generator>Hugo -- 0.147.2</generator><language>ko-KR</language><lastBuildDate>Sat, 08 Nov 2025 15:02:23 +0900</lastBuildDate><atom:link href="https://4d4cat.com/tags/java/index.xml" rel="self" type="application/rss+xml"/><item><title>HttpClient Deepdive</title><link>https://4d4cat.com/posts/2025/httpclient-deepdive/</link><pubDate>Sun, 12 Jan 2025 17:37:00 +0900</pubDate><guid>https://4d4cat.com/posts/2025/httpclient-deepdive/</guid><description>&lt;p>🔔 &lt;strong>BodyPublisher, BodyHandler 역할&lt;/strong>&lt;br>
🔔 &lt;strong>HttpClient 실습&lt;/strong>&lt;/p>
&lt;h2 id="bodypublisher-bodyhandler">&lt;strong>BodyPublisher? BodyHandler?&lt;/strong>&lt;/h2>
&lt;p>&lt;code>BodyPublisher&lt;/code>와 &lt;code>BodyHandlers&lt;/code>는 요청과 응답의 본문을 처리하는 데 있어 상호 보완적인 역할을 한다. &lt;code>BodyPublisher&lt;/code>는 클라이언트가 서버로 전송할 데이터를 정의하고, &lt;code>BodyHandlers&lt;/code>는 서버로부터 받은 데이터를 어떻게 처리할지를 정의한다. 이 두 구성 요소를 적절히 활용하면, HTTP 통신을 더욱 유연하고 효율적으로 구현할 수 있다.&lt;/p>
&lt;h3 id="bodypublisher">&lt;strong>BodyPublisher&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>HTTP 요청의 본문을 제공&lt;/li>
&lt;li>데이터를 전송할 때 어떻게 제공할지 정의
&lt;ul>
&lt;li>&lt;code>BodyPublishers.ofString(String)&lt;/code>: 문자열 데이터&lt;/li>
&lt;li>&lt;code>BodyPublishers.ofByteArray(byte[])&lt;/code>: 바이트 배열 데이터&lt;/li>
&lt;li>&lt;code>BodyPublishers.ofFile(Path)&lt;/code>: 파일 데이터&lt;/li>
&lt;li>&lt;code>BodyPublishers.ofInputStream(Supplier&amp;lt;InputStream&amp;gt;)&lt;/code>: 동적으로 생성되는 입력 스트림&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="bodyhandler">&lt;strong>BodyHandler&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>HTTP 응답의 본문을 처리하는 방법을 정의&lt;/li>
&lt;li>서버로부터 받은 응답 데이터를 어떻게 처리할지 정의
&lt;ul>
&lt;li>&lt;code>BodyHandlers.ofString()&lt;/code>: 문자열 데이터&lt;/li>
&lt;li>&lt;code>BodyHandlers.ofByteArray()&lt;/code>: 바이트 배열 데이터&lt;/li>
&lt;li>&lt;code>BodyHandlers.ofFile(Path)&lt;/code>: 파일 데이터&lt;/li>
&lt;li>&lt;code>BodyHandlers.ofInputStream()&lt;/code>: &lt;code>InputStream&lt;/code>으로 데이터 제공&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>HttpResponse.BodyHandler 클래스는 BodyHandler를 생성하기 위한 여러 가지 편리한 정적 팩토리 메서드를 제공한다. 이들 중 다수는 응답 바이트가 완전히 수신될 때까지 메모리에 축적되며, 그 후 응답 바이트는 상위 수준의 Java 유형(ofString, ofByteArray 등)으로 변환된다.&lt;/p></description></item><item><title>java.net.http.HttpClient</title><link>https://4d4cat.com/posts/2025/httpclient/</link><pubDate>Fri, 10 Jan 2025 16:43:00 +0900</pubDate><guid>https://4d4cat.com/posts/2025/httpclient/</guid><description>&lt;p>🔔 &lt;strong>HttpClient 개요&lt;/strong>&lt;br>
🔔 &lt;strong>HttpClient 개선 과정&lt;/strong>&lt;br>
🔔 &lt;strong>다른 라이브러리 비교&lt;/strong>&lt;/p>
&lt;h2 id="what-why">&lt;strong>What? Why?&lt;/strong>&lt;/h2>
&lt;p>자바에서 HTTP 요청을 생성하고, 서버와 통신하며, 응답을 처리하기 위한 API &lt;br>
Java 11에서 표준 라이브러리로 도입되었으며, 이전의 &lt;code>HttpURLConnection&lt;/code>보다 사용하기 쉽고 기능이 풍부하다.&lt;/p>
&lt;ul>
&lt;li>빌더 패턴 도입: &lt;code>HttpRequest&lt;/code>.newBuilder()&lt;/li>
&lt;li>역할 분리: &lt;code>HttpClient&lt;/code>, &lt;code>HttpRequest&lt;/code>, &lt;code>HttpResponse&lt;/code>&lt;/li>
&lt;li>비동기 처리 지원: &lt;code>HttpClient&lt;/code>.sendAsync()&lt;/li>
&lt;/ul>
&lt;h3 id="주요-클래스">&lt;strong>주요 클래스&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;code>HttpClient&lt;/code>: HTTP 요청을 보내기 위한 클라이언트 객체를 생성&lt;/li>
&lt;li>&lt;code>HttpRequest&lt;/code>: HTTP 요청의 세부 사항(URI, 메서드, 헤더 등)&lt;/li>
&lt;li>&lt;code>HttpResponse&lt;/code>: 서버로부터 받은 HTTP 응답&lt;/li>
&lt;/ul>
&lt;h3 id="주요-메서드">&lt;strong>주요 메서드&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;code>HttpClient&lt;/code>.newHttpClient()&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>기본 설정을 사용한 HttpClient 인스턴스를 생성 &lt;br>
- 요청(GET), 프로토콜(HTTP/2), 리다이렉트(NEVER), SSL(Default)&lt;/p></description></item></channel></rss>