๐Ÿ“Œ OpenWeatherMap์„ ํ™œ์šฉํ•œ ๋‚ ์”จ ์ •๋ณด ์กฐํšŒ API ๊ตฌํ˜„

My Pale Blue Dotยท2025๋…„ 5์›” 12์ผ
0

SPRING BOOT

๋ชฉ๋ก ๋ณด๊ธฐ
14/40
post-thumbnail

๐Ÿ“… 2025-05-12


๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

โœ… 1. OpenWeatherMap ๊ฐ€์ž… ๋ฐ API Key ๋ฐœ๊ธ‰

  • ์‚ฌ์ดํŠธ: https://home.openweathermap.org
  • ๋กœ๊ทธ์ธ ํ›„ API keys ๋ฉ”๋‰ด์—์„œ ํ‚ค ์ƒ์„ฑ ๊ฐ€๋Šฅ

โœ… 2. ์‹ค์‹œ๊ฐ„ ๋‚ ์”จ ์กฐํšŒ API ๊ฐœ์š”

  • API Endpoint:
    https://api.openweathermap.org/data/2.5/weather
    
  • ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ:
    ํŒŒ๋ผ๋ฏธํ„ฐ์„ค๋ช…
    lat์œ„๋„
    lon๊ฒฝ๋„
    appid๋ฐœ๊ธ‰๋ฐ›์€ API ํ‚ค
    units๋‹จ์œ„ (metric: ์„ญ์”จ, standard: ์ผˆ๋นˆ)
    lang์–ธ์–ด ์ฝ”๋“œ (kr, en ๋“ฑ)

โœ… 3. Spring Boot ๊ตฌํ˜„ ์˜ˆ์‹œ

โœ… OpenWeatherController.java

package com.example.demo.C02OpenWeatherMap;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;

@RestController
@Slf4j
@RequestMapping("/open/weather")
public class OpenWeatherController {

    @GetMapping("/get/{lat}/{lon}")
    public ResponseEntity<String> get(@PathVariable String lat, @PathVariable String lon) throws UnsupportedEncodingException {
        log.info("GET /open/weather/get...");

        String url = "https://api.openweathermap.org/data/2.5/weather";
        String serviceKey = "๋ฐœ๊ธ‰ ๋ฐ›์€ ํ‚ค";

        URI uri = UriComponentsBuilder
                .fromHttpUrl(url)
                .queryParam("appid", URLEncoder.encode(serviceKey, "UTF-8"))
                .queryParam("lat", lat)
                .queryParam("lon", lon)
                .queryParam("units", "metric") // ์„ญ์”จ ์„ค์ •
                .queryParam("lang", "kr") // ํ•œ๊ธ€ ์‘๋‹ต ์„ค์ •
                .build(true)
                .toUri();

        RestTemplate rt = new RestTemplate();
        ResponseEntity<String> response = rt.exchange(uri, HttpMethod.GET, null, String.class);
        return response;
    }
}

โœ… 4. API ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

๐Ÿ“ ํ˜ธ์ถœ URL:

http://localhost:8090/open/weather/get/35.8662861111111/128.608397222222

๐Ÿ”น ์‘๋‹ต ์˜ˆ์‹œ (์š”์•ฝ):

{
  "name": "Daegu",
  "weather": [
    {
      "main": "Clear",
      "description": "clear sky",
      "icon": "01d"
    }
  ],
  "main": {
    "temp": 23.0,
    "feels_like": 22.2,
    "humidity": 35,
    "pressure": 1010
  },
  "wind": {
    "speed": 3.09,
    "deg": 270
  }
}

โ€ป units=metric ์„ค์ • ๋•๋ถ„์— ์˜จ๋„๋Š” ์„ญ์”จ(ยฐC)๋กœ ๋ณ€ํ™˜๋˜์–ด ์ถœ๋ ฅ๋จ

โ€ป lang=kr ์„ค์ •์œผ๋กœ description์— ํ•œ๊ธ€ ์ง€์› ๊ฐ€๋Šฅ


โœ… 5. ์ฃผ์š” ์‘๋‹ต ํ•„๋“œ ์ •๋ฆฌ

JSON Key ๊ฒฝ๋กœ์„ค๋ช…์˜ˆ์‹œ ๊ฐ’
name๋„์‹œ๋ช…Daegu
weather[0].main๋‚ ์”จ ์š”์•ฝClear
weather[0].description์ƒ์„ธ ์„ค๋ช…clear sky
main.tempํ˜„์žฌ ์˜จ๋„ (ยฐC)23.0
main.feels_like์ฒด๊ฐ ์˜จ๋„22.2
main.humidity์Šต๋„ (%)35
wind.speedํ’์† (m/s)3.09

๐Ÿ”ฅ ์ •๋ฆฌ

  • OpenWeatherMap API๋Š” ๋‹จ์ˆœํ•œ ์„ค์ •์œผ๋กœ ์ „ ์„ธ๊ณ„ ๋‚ ์”จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ
  • RestTemplate์„ ํ™œ์šฉํ•˜๋ฉด Spring Boot์—์„œ๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์—ฐ๋™ ๊ฐ€๋Šฅ
  • units=metric, lang=kr ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •์œผ๋กœ ์„ญ์”จ ๋ฐ ํ•œ๊ธ€ ์ฒ˜๋ฆฌ๊นŒ์ง€ ๊ฐ€๋Šฅ
  • ๋‹ค์Œ ๋‹จ๊ณ„๋กœ๋Š” DTO ๋งคํ•‘ ๋ฐ ํ™”๋ฉด ์ถœ๋ ฅ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€