์ž๋Š” ์”จ์•—
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿฃ ๊ธฐ์ดˆ ๊ฐœ๋…
    • ๐Ÿ“Ž ์œ ํŠœ๋ธŒ
    • ๐Ÿ’พ ์กฐ๊ฐ๋ชจ์Œ
    • ๐Ÿ‘ฉ‍๐Ÿ’ป Error
    • โ„ React
    • ๐ŸฅPython
    • ๐Ÿ€ Spring
    • ๐Ÿฅž JS
    • ๐Ÿ‹ Docker
    • ๐Ÿงญ WSO2
    • ๐Ÿง Linux
    • ๐Ÿ”— SQL
    • ๐Ÿข C#
    • ๐Ÿ“‘ ์ฝ์„๊ฑฐ๋ฆฌ
    • ๐Ÿ‘€์งˆ๋ฌธ๋“ค
    • ๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…
      • Java ์ž๋ฐ”
      • Oracle ์˜ค๋ผํด
      • JDBC
      • HTML & CSS
      • JavaScript
      • JSP
      • Servlet
      • Spring
      • MyBatis
    • ๐Ÿ“• ๊ฐœ๋ฐœ ํ˜ผ๊ณต
      • ์ž๋ฐ”์˜ ์ •์„
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ
hELLO ยท Designed By ์ •์ƒ์šฐ.
์ž๋Š” ์”จ์•—

๐ŸŒฑ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

dd

2025. 3. 21. 10:11

ip-api.com์—์„œ๋Š” batch ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ IP ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Java์—์„œ HttpClient๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 100๊ฐœ์˜ IP ์ฃผ์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ์š”์ฒญํ•˜๊ณ , ๊ตญ๊ฐ€ ๋ฐ ๋„์‹œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

Java ์ฝ”๋“œ (ip-api batch ์š”์ฒญ)

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class IpApiBatchRequest {
    private static final String API_URL = "http://ip-api.com/batch";
    private static final HttpClient client = HttpClient.newHttpClient();
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) {
        // ์กฐํšŒํ•  IP ๋ฆฌ์ŠคํŠธ (์˜ˆ์ œ)
        List<String> ipList = Arrays.asList(
                "8.8.8.8", "8.8.4.4", "1.1.1.1", "1.0.0.1", "208.67.222.222",
                "208.67.220.220", "4.2.2.2", "4.2.2.1", "9.9.9.9", "149.112.112.112"
                // 100๊ฐœ๊นŒ์ง€ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
        );

        try {
            List<JsonNode> results = fetchIpInfo(ipList);
            for (JsonNode node : results) {
                String query = node.get("query").asText();
                String country = node.get("country").asText();
                String city = node.get("city").asText();
                System.out.println(query + " -> " + country + ", " + city);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static List<JsonNode> fetchIpInfo(List<String> ipList) throws Exception {
        // JSON ํ˜•์‹์˜ IP ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
        String requestBody = objectMapper.writeValueAsString(ipList);

        // HTTP ์š”์ฒญ ์ƒ์„ฑ
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(API_URL))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        // HTTP ์š”์ฒญ ๋ณด๋‚ด๊ธฐ
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // ์‘๋‹ต JSON ํŒŒ์‹ฑ
        return Arrays.asList(objectMapper.readValue(response.body(), JsonNode[].class));
    }
}


---

์„ค๋ช…

1. 100๊ฐœ IP ๋ฆฌ์ŠคํŠธ๋ฅผ JSON ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

ipList๋ฅผ JSON ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ip-api.com/batch์— POST ์š”์ฒญ์„ ๋ณด๋ƒ„.



2. HTTP ์š”์ฒญ ๋ฐ ์‘๋‹ต ์ฒ˜๋ฆฌ

HttpClient๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ JSON์œผ๋กœ ๋ณ€ํ™˜.



3. JSON ์‘๋‹ต ํŒŒ์‹ฑ ํ›„ ๊ตญ๊ฐ€ ๋ฐ ๋„์‹œ ์ถœ๋ ฅ

ObjectMapper๋ฅผ ์ด์šฉํ•ด JSON์„ JsonNode ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , query, country, city ๊ฐ’์„ ์ถœ๋ ฅ.





---

์˜ˆ์ œ ์‹คํ–‰ ๊ฒฐ๊ณผ

8.8.8.8 -> United States, Mountain View
8.8.4.4 -> United States, Mountain View
1.1.1.1 -> Australia, Sydney
1.0.0.1 -> Australia, Sydney
208.67.222.222 -> United States, San Francisco
...

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 100๊ฐœ์˜ IP์— ๋Œ€ํ•œ ๊ตญ๊ฐ€ ๋ฐ ๋„์‹œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”