java.net.http.HttpClient
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)1
HttpClient client = HttpClient.newHttpClient();
HttpRequest
.newBuilder()์๋ก์ด HttpRequest ๋น๋๋ฅผ ์์ฑ
1 2 3 4 5 6
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://foo.com/")) .timeout(Duration.ofMinutes(2)) .header("Content-Type", "application/json") .POST(BodyPublishers.ofFile(Paths.get("file.json"))) .build();
- client.send(request,
HttpResponse
.BodyHandlers.ofString())๋๊ธฐ์ ์ผ๋ก HTTP ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ฌธ์์ด๋ก ๋ฐ์
1 2 3
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body());
- client.sendAsync(request,
HttpResponse
.BodyHandlers.ofString())๋น๋๊ธฐ์ ์ผ๋ก HTTP ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ CompletableFuture๋ก ๋ฐ์
1 2 3
client.sendAsync(request, BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println);
๊ธฐ๋ฅ ์ ๋ฐ์ดํธ ์์ฝ
- java 11:
HttpClient
๋์ - java 14: TLS 1.3 ์ง์
- java 15: OAuth2 ๋ฑ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ
- java 17: ์ปค๋ฅ์ ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ํฅ์
- java 18~21: HTTP/3์ ์ ์ ์ง์์ด ์ถ๊ฐ, ๋ณด์ ๊ฐํ
๋ค๋ฅธ HTTP ๋ผ์ด๋ธ๋ฌ๋ฆฌ
RestTemplate
- ๋๊ธฐ ๋ฐฉ์
- ๊ฐ๋จํ ์ฌ์ฉ๋ฒ: ๊ฐ๋จํ REST ํธ์ถ์ ์ ํฉ
- ์ ํ ์ฌํญ: ๋น๋๊ธฐ๋ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ์ง ์์ผ๋ฉฐ, ๊ธฐ๋ฅ์ด ์ ํ์
1
2
3
4
5
6
7
8
9
import org.springframework.web.client.RestTemplate;
public class RestTemplateExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("https://api.example.com/data", String.class);
System.out.println(response);
}
}
WebClient
- ๋น๋๊ธฐ ๋ฐ ๋ฐ์ํ ์ง์: ๋น๋๊ธฐ ํธ์ถ๊ณผ ๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ์ ์ง์
- ์ ์ฐ์ฑ: ๋ค์ํ HTTP ์์ฒญ๊ณผ ์๋ต ์ฒ๋ฆฌ๋ฅผ ์ ์ฐํ๊ฒ ์ง์
- ๋ชจ๋ํ ์ฌ์ฉ๋ฒ: ํ๋์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class WebClientExample {
public static void main(String[] args) {
WebClient client = WebClient.create("https://api.example.com");
Mono<String> response = client.get()
.uri("/data")
.retrieve()
.bodyToMono(String.class);
response.subscribe(System.out::println);
}
}
๋น๊ต
์ถ์ฒ
This post is licensed under CC BY 4.0 by the author.