๐ฆ ๊ณ ๊ธ Weather Dashboard ๊ตฌ์ถ: Dark Mode, Map & Forecast
Source: Dev.to
๐ ์๊ฐ
๋๋ถ๋ถ์ ๋ ์จ ์ฑ ํํ ๋ฆฌ์ผ์ ์จ๋์ ๋ ์จ ์์ด์ฝ๋ง ๋ณด์ฌ์ค๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์กฐ, ํ์ฅ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ํ์ํฉ๋๋ค.

์ด ํ๋ก์ ํธ์์๋ HTML, CSS, JavaScript๋ฅผ ์ฌ์ฉํ๊ณ OpenWeather API์ Leaflet ์ง๋์ ํตํฉํ ์ ๋ฌธ์ ์ธ ๋ ์จ ๋์๋ณด๋๋ฅผ ๊ตฌ์ถํ๋ฉฐ, ์์ ํ ๋คํฌ ๋ชจ๋๋ฅผ ํฌํจํฉ๋๋ค.
ํฌํธํด๋ฆฌ์ค์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ค์ ํ๋ก ํธ์๋ ์ญ๋์ ๋ณด์ฌ์ค๋๋ค.
๐ฏ ๋ง๋ค๊ฒ ๋ ๊ฒ
์ด ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉด ๋ค์์ ๊ฐ๊ฒ ๋ฉ๋๋ค:
- ๐ฆ ์ค์๊ฐ ๋ ์จ ๋ฐ์ดํฐ
- ๐ 5์ผ ๋ ์จ ์๋ณด
- ๐ ๋คํฌ / ๋ผ์ดํธ ๋ชจ๋ ์ ํ
- ๐บ Leaflet์ ์ด์ฉํ ์ธํฐ๋ํฐ๋ธ ์ง๋
- ๐
async/await๋ฅผ ํ์ฉํ API ํตํฉ - ๐ง ๊น๋ํ JavaScript ์ํคํ ์ฒ
- ๐งช ์๋ ํ ์คํธ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ
๐ ์ ์ฒด ๋น๋์ค ํํ ๋ฆฌ์ผ ๋ณด๊ธฐ:
๐งฑ ํ๋ก์ ํธ ๊ตฌ์กฐ
๊น๊ณ ๋จ์ํ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ์ฑ์ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ํฉ๋๋ค:
weather-dashboard/
โโโ index.html
โโโ style.css
โโโ script.js
๐จ HTML & CSS๋ฅผ ํ์ฉํ UI ๋์์ธ
UI๋ ๋์๋ณด๋ ์คํ์ผ ๋ ์ด์์์ ์ฌ์ฉํฉ๋๋ค:
- ๋ฐ์ํ ์นด๋
- ๊น๋ํ ํ์ดํฌ๊ทธ๋ํผ
- ์ ์ฐํ ๋ ์ด์์
๋คํฌ ๋ชจ๋ ์นํ์ ์ธ ์์์ ์ ๊ทผ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.
๐ ๋คํฌ ๋ชจ๋ (๋ฎ/๋ฐค ํ ๋ง)
ํ ๋ง ์ ํ์ ๋ค์์ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค:
- CSS ๋ณ์
- JavaScript ํ ๋ง ์ ํ ๋ก์ง
UI ์ํ๊ฐ ์ธ์ ๊ฐ์ ์ ์ง๋์ด ํฅํ ๋ ๋ง์ ํ ๋ง๋ก ํ์ฅํ๊ธฐ ์ฝ์ต๋๋ค.
๐ OpenWeather API ํตํฉ
์ฑ์ OpenWeather API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค:
ํ์ฌ ๋ ์จ ๋ฐ์ดํฐ

5์ผ ์๋ณด ๋ฐ์ดํฐ

ํต์ฌ JavaScript ๊ฐ๋
async/await์ ํจ๊ป ์ฌ์ฉํ๋fetch()try/catch๋ฅผ ์ด์ฉํ ์ค๋ฅ ์ฒ๋ฆฌ- ์คํจ ์์๋ ์ฑ์ ์์ ์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํ API ์๋ต ๊ฒ์ฆ
๐ ์๋ณด ๋ก์ง ์ค๋ช
๋ชจ๋ ์๋ณด ํญ๋ชฉ์ ํ์ํ๋ ๋์ , ์ฑ์:
- ์ผ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๊ณ
- ๊ด๋ จ ํ์์คํฌํ๋ฅผ ์ถ์ถํฉ๋๋ค
์๋ฏธ ์๋ ์ผ์ผ ์๋ณด๋ง ํ์๋์ด UI๊ฐ ๊น๋ํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ ๋๋ค.
๐บ Leaflet ์ง๋ ํตํฉ
์ธํฐ๋ํฐ๋ธํ ์ง๋๊ฐ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.

๊ธฐ๋ฅ
- ๋ ์จ API์์ ์ ๊ณตํ๋ ์๋์ ๊ฒฝ๋
- ์ค์๊ฐ ์์น ๋ง์ปค
- ๋์ ๊ฒ์ ์ ๋์ ์ง๋ ์ ๋ฐ์ดํธ
Leaflet์ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ํ๋ก ํธ์๋ ๋์๋ณด๋์ ์ต์ ์ ๋๋ค.
๐ง JavaScript ์ํคํ ์ฒ
์ฝ๋๋ฒ ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ฉ๋๋ค:
- API ํธ์ถ์ ์ํ ํฌํผ ํจ์
- ๋ณ๋์ UI ๋ ๋๋ง ๋ก์ง
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ ํธ๋ฆฌํฐ ํจ์
์ด ๊ตฌ์กฐ๋ ํ๋ก์ ํธ๋ฅผ ํ์ฅ ๊ฐ๋ฅํ๊ณ ๋ฉด์ ์นํ์ ์ผ๋ก ๋ง๋ญ๋๋ค.
๐งช ์๋ ํ ์คํธ ๋ฐ ๋๋ฒ๊น
์์ฑ ์ ์ ์ฑ์ ๋ค์์ ๋ํด ํ ์คํธ๋ฉ๋๋ค:
- ์๋ชป๋ ๋์ ์ด๋ฆ
- ๋น ์ ๋ ฅ ํ๋
- ๋คํธ์ํฌ ์ค๋ฅ
์ ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ ํ๋ก์ ํธ๊ฐ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ผ ๋์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
๐ ์ด ํ๋ก์ ํธ ๊ฐ์ ๋ฐฉ๋ฒ
๋์๋ณด๋๋ฅผ ํ์ฅํ๊ธฐ ์ํ ์์ด๋์ด:
- โญ ์ฆ๊ฒจ์ฐพ๋ ๋์ ์ ์ฅ
- ๐ ์ฌ์ฉ์ ์์น ์๋ ๊ฐ์ง
- โก PWA๋ก ๋ณํ
- โ๏ธ React๋ก ์ฌ๊ตฌ์ฑ
- ๐ ๋ฐฑ์๋ ์ง์ ์ถ๊ฐ
๋น๋์ค์ โIMPROVEโ๋ผ๊ณ ๋๊ธ์ ๋ฌ์ ๋ค์ ์ ๊ทธ๋ ์ด๋๋ฅผ ์ ์ํ์ธ์.
๐บ ์ ์ฒด ๋น๋์ค ํํ ๋ฆฌ์ผ
๋คํฌ ๋ชจ๋์ ์ง๋ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๊ณ ๊ธ ๋ ์จ ๋์๋ณด๋ ๋ง๋ค๊ธฐ
๐ ๋ง๋ฌด๋ฆฌ ์๊ฐ
์ด ํ๋ก์ ํธ๋ ๋ค์์ ์ํ๋ ๊ฐ๋ฐ์์๊ฒ ์ด์์ ์ ๋๋ค:
- API ์ฒ๋ฆฌ ๊ธฐ์ ํฅ์
- ์ค์ ๋์๋ณด๋ ๊ตฌ์ถ
- ๊ฐ๋ ฅํ ํฌํธํด๋ฆฌ์ค ํ๋ก์ ํธ ์ ์
ํ๋ก์ ํธ๋ ์์ ๊ฐ์ ํค์ฐ๊ณ , ์์ ๊ฐ์ ์ปค๋ฆฌ์ด๋ฅผ ๋ง๋ญ๋๋ค.
์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์! ๐ป๐ฅ