🌤️ API 연동

날씨 API 연동하는 법
내 사이트에 실시간 날씨 표시하기

📅 2026년 6월 7일 ✍️ 뚝딱닷컴 ⏱️ 5분 읽기 👁 -

☁️ 홈페이지에 현재 날씨가 뜨면 어떨까?

사이트를 열었을 때 "서울 · 맑음 · 24°C" 같은 정보가 보이면 어떨까. 실시간 데이터가 있는 사이트는 살아있는 느낌이 난다. 방문자 입장에서도 괜히 더 신뢰가 간다.

OpenWeatherMap 무료 API로 직접 연동해봤다. API 키 발급부터 위치 자동 감지까지, 예상보다 훨씬 간단했다.

24°C
서울특별시
구름 조금
완성 예시
💡

서버가 필요 없다. 순수 HTML + JavaScript만으로 브라우저에서 직접 API를 호출한다. Netlify 같은 정적 호스팅에서 그대로 작동한다.

🌍 OpenWeatherMap이 뭔가요?

전 세계 20만 개 이상 도시의 날씨 데이터를 제공하는 API 서비스다. 현재 날씨, 시간별 예보, 주간 예보까지 다양한 데이터를 제공한다.

무료 플랜으로도 분당 60회 호출이 가능하다. 개인 블로그나 포트폴리오 사이트에서 날씨를 표시하는 용도라면 평생 무료 플랜으로 충분하다.

📦 준비물

딱 두 가지다. 둘 다 무료고 5분이면 끝난다.

API 키는 가입 직후 바로 발급되지만 활성화까지 최대 2시간이 걸릴 수 있다. 키를 넣었는데 401 오류가 나면 잠시 기다렸다가 다시 시도하면 된다.

🔑 API 키 발급 방법

네 번의 클릭이면 된다.

1
openweathermap.org 접속 상단 Sign In → Create an Account 클릭. 이메일과 비밀번호만 입력하면 된다. 신용카드 정보는 요구하지 않는다.
2
이메일 인증 가입 후 발송되는 인증 메일의 링크를 클릭한다. 인증하지 않으면 API 키가 활성화되지 않는다.
3
My API Keys 메뉴 이동 로그인 후 우측 상단 계정명 클릭 → My API Keys. 기본 키(Default)가 이미 만들어져 있다.
4
키 복사 32자리 영문+숫자 조합의 키를 복사한다. 이게 코드에 넣을 API 키다.

🪜 만드는 순서

API 키가 준비됐으면 이제 코드를 붙이면 된다. AI한테 한 번에 시키는 게 제일 빠르다.

🤖

"OpenWeatherMap API로 날씨 위젯 만들어줘. 위치는 자동 감지로 하고, 온도·날씨 아이콘·도시명을 보여줘. API 키는 [키값]이야."
이렇게 요청하면 HTML·CSS·JS가 완성된 코드를 한 번에 받는다.

API 호출 코드 구조

JavaScript — 날씨 API 호출
const API_KEY = '여기에_발급받은_키_입력';
const BASE_URL = 'https://api.openweathermap.org/data/2.5/weather';

function getWeather(lat, lon) {
  const url = `${BASE_URL}?lat=${lat}&lon=${lon}&appid=${API_KEY}&units=metric&lang=kr`;

  fetch(url)
    .then(res => res.json())
    .then(data => {
      document.getElementById('weather-temp').textContent = Math.round(data.main.temp) + '°C';
      document.getElementById('weather-city').textContent = data.name;
      document.getElementById('weather-desc').textContent = data.weather[0].description;
      document.getElementById('weather-icon').src =
        `https://openweathermap.org/img/wn/${data.weather[0].icon}@2x.png`;
    })
    .catch(err => console.warn('날씨 로드 실패:', err));
}

units=metric으로 설정하면 섭씨 온도가 반환된다. lang=kr을 붙이면 날씨 설명이 한국어로 나온다.

📍 위치 자동 감지

방문자의 현재 위치를 기반으로 날씨를 보여주면 훨씬 유용하다. navigator.geolocation을 쓰면 브라우저가 위치 권한을 물어보고, 허용하면 위경도를 넘겨준다.

JavaScript — 위치 감지 + 폴백
const DEFAULT_LAT = 37.5665; // 서울
const DEFAULT_LON = 126.9780;

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(
    function (pos) {
      // 위치 허용 시: 실제 위치로 날씨 조회
      getWeather(pos.coords.latitude, pos.coords.longitude);
    },
    function () {
      // 위치 거부 시: 서울 기본값으로 폴백
      getWeather(DEFAULT_LAT, DEFAULT_LON);
    }
  );
} else {
  getWeather(DEFAULT_LAT, DEFAULT_LON);
}

위치 권한을 거부하더라도 서울(기본값)의 날씨가 표시된다. 오류 화면이 뜨지 않고 자연스럽게 대체값이 보이는 게 포인트다. 직접 써보니 이 폴백 처리가 있어야 모바일에서도 깔끔하게 동작했다.

💡

위치 권한 요청은 HTTPS 환경에서만 작동한다. Netlify로 배포된 사이트는 기본으로 HTTPS가 적용되므로 따로 설정할 필요가 없다.


⚠️ 주의할 점

API 키를 코드에 그대로 넣어도 괜찮나요?
날씨 조회 전용 API 키라면 크게 위험하지 않다. 날씨 API는 읽기 전용이라 키가 노출돼도 타인이 내 계정에서 날씨 데이터를 조회하는 것 이상의 피해가 없다. 무료 플랜에서는 호출 한도 초과가 최악의 상황이고, 그것도 분당 60회라 악용하기 어렵다.

단, 유료 플랜으로 업그레이드하면 요금이 발생할 수 있으므로 그 때는 Netlify Functions 같은 서버리스 함수를 통해 키를 환경변수로 숨겨야 한다.
API 호출이 너무 많으면 어떻게 되나요?
무료 플랜은 분당 60회 한도다. 사이트에 방문자가 들어올 때마다 1회 호출하므로 분당 60명 이상 동시 접속하면 일시적으로 날씨 로드가 실패할 수 있다. 그 경우 캐싱을 도입하면 해결된다. localStorage에 마지막 조회 시각과 데이터를 저장해두고 10분 이내에 재방문하면 API를 다시 호출하지 않는 방식이다.
날씨 아이콘은 어디서 가져오나요?
OpenWeatherMap이 아이콘 이미지도 제공한다. API 응답의 weather[0].icon 값을 https://openweathermap.org/img/wn/{icon}@2x.png 형식으로 조합하면 맑음·흐림·비·눈 등의 아이콘 이미지 URL이 완성된다. 별도로 아이콘 파일을 다운로드할 필요가 없다.

✅ 마무리 — 날씨 하나로 달라지는 사이트 분위기

날씨 위젯 하나로 사이트가 살아있는 느낌이 확 달라진다. 정적인 HTML 페이지가 실시간 데이터를 받아오는 서비스처럼 보인다.

API 키 발급에 5분, 코드 붙이는 데 AI 도움 받으면 10분이면 끝난다. 한 번 해두면 매일 자동으로 업데이트된다. 손댈 것도 없다.

날씨 API 연동부터 다양한 외부 API 활용까지 교재에서 단계별로 확인할 수 있어요.

📖 뚝딱닷컴 교재 보기