HttpClient Deepdive

๐Ÿ”” BodyPublisher, BodyHandler ์—ญํ•  ๐Ÿ”” HttpClient ์‹ค์Šต BodyPublisher? BodyHandler? BodyPublisher์™€ BodyHandlers๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๋ณธ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ƒํ˜ธ ๋ณด์™„์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค. BodyPublisher๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ , BodyHandlers๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด ๋‘ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด, HTTP ํ†ต์‹ ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. BodyPublisher HTTP ์š”์ฒญ์˜ ๋ณธ๋ฌธ์„ ์ œ๊ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ• ์ง€ ์ •์˜ BodyPublishers.ofString(String): ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ BodyPublishers.ofByteArray(byte[]): ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ BodyPublishers.ofFile(Path): ํŒŒ์ผ ๋ฐ์ดํ„ฐ BodyPublishers.ofInputStream(Supplier<InputStream>): ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ BodyHandler HTTP ์‘๋‹ต์˜ ๋ณธ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ์ •์˜ BodyHandlers.ofString(): ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ BodyHandlers.ofByteArray(): ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ BodyHandlers.ofFile(Path): ํŒŒ์ผ ๋ฐ์ดํ„ฐ BodyHandlers.ofInputStream(): InputStream์œผ๋กœ ๋ฐ์ดํ„ฐ ์ œ๊ณต HttpResponse.BodyHandler ํด๋ž˜์Šค๋Š” BodyHandler๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŽธ๋ฆฌํ•œ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋“ค ์ค‘ ๋‹ค์ˆ˜๋Š” ์‘๋‹ต ๋ฐ”์ดํŠธ๊ฐ€ ์™„์ „ํžˆ ์ˆ˜์‹ ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ์ถ•์ ๋˜๋ฉฐ, ๊ทธ ํ›„ ์‘๋‹ต ๋ฐ”์ดํŠธ๋Š” ์ƒ์œ„ ์ˆ˜์ค€์˜ Java ์œ ํ˜•(ofString, ofByteArray ๋“ฑ)์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ...

January 12, 2025 17:37 ยท 2 min ยท 386 words ยท nakji

java.net.http.HttpClient

๐Ÿ”” HttpClient ๊ฐœ์š” ๐Ÿ”” HttpClient ๊ฐœ์„  ๊ณผ์ • ๐Ÿ”” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต What? Why? ์ž๋ฐ”์—์„œ HTTP ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๊ณ , ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฉฐ, ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ API Java 11์—์„œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ์ด์ „์˜ HttpURLConnection๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•˜๋‹ค. ๋นŒ๋” ํŒจํ„ด ๋„์ž…: HttpRequest.newBuilder() ์—ญํ•  ๋ถ„๋ฆฌ: HttpClient, HttpRequest, HttpResponse ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ง€์›: HttpClient.sendAsync() ์ฃผ์š” ํด๋ž˜์Šค HttpClient: HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ HttpRequest: HTTP ์š”์ฒญ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ(URI, ๋ฉ”์„œ๋“œ, ํ—ค๋” ๋“ฑ) HttpResponse: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ HTTP ์‘๋‹ต ์ฃผ์š” ๋ฉ”์„œ๋“œ HttpClient.newHttpClient() ๊ธฐ๋ณธ ์„ค์ •์„ ์‚ฌ์šฉํ•œ HttpClient ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ - ์š”์ฒญ(GET), ํ”„๋กœํ† ์ฝœ(HTTP/2), ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(NEVER), SSL(Default) ...

January 10, 2025 16:43 ยท 2 min ยท 272 words ยท nakji