๐ŸŒฆ ๊ณ ๊ธ‰ Weather Dashboard ๊ตฌ์ถ•: Dark Mode, Map & Forecast

๋ฐœํ–‰: (2026๋…„ 1์›” 8์ผ ์˜ค์ „ 01:13 GMT+9)
6 min read
์›๋ฌธ: Dev.to

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์ผ ์˜ˆ๋ณด ๋ฐ์ดํ„ฐ

5์ผ ์˜ˆ๋ณด ์˜ˆ์‹œ

ํ•ต์‹ฌ JavaScript ๊ฐœ๋…

  • async/await์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” fetch()
  • try/catch๋ฅผ ์ด์šฉํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • ์‹คํŒจ ์‹œ์—๋„ ์•ฑ์„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ API ์‘๋‹ต ๊ฒ€์ฆ

๐Ÿ“… ์˜ˆ๋ณด ๋กœ์ง ์„ค๋ช…

๋ชจ๋“  ์˜ˆ๋ณด ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•˜๋Š” ๋Œ€์‹ , ์•ฑ์€:

  • ์ผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ 
  • ๊ด€๋ จ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค

์˜๋ฏธ ์žˆ๋Š” ์ผ์ผ ์˜ˆ๋ณด๋งŒ ํ‘œ์‹œ๋˜์–ด UI๊ฐ€ ๊น”๋”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ž…๋‹ˆ๋‹ค.

๐Ÿ—บ Leaflet ์ง€๋„ ํ†ตํ•ฉ

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์ง€๋„๊ฐ€ ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Leaflet ์ง€๋„ ์˜ˆ์‹œ

๊ธฐ๋Šฅ

  • ๋‚ ์”จ API์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ„๋„์™€ ๊ฒฝ๋„
  • ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ๋งˆ์ปค
  • ๋„์‹œ ๊ฒ€์ƒ‰ ์‹œ ๋™์  ์ง€๋„ ์—…๋ฐ์ดํŠธ

Leaflet์€ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ ํ”„๋ก ํŠธ์—”๋“œ ๋Œ€์‹œ๋ณด๋“œ์— ์ตœ์ ์ž…๋‹ˆ๋‹ค.

๐Ÿง  JavaScript ์•„ํ‚คํ…์ฒ˜

์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • API ํ˜ธ์ถœ์„ ์œ„ํ•œ ํ—ฌํผ ํ•จ์ˆ˜
  • ๋ณ„๋„์˜ UI ๋ Œ๋”๋ง ๋กœ์ง
  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜

์ด ๊ตฌ์กฐ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฉด์ ‘ ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿงช ์ˆ˜๋™ ํ…Œ์ŠคํŠธ ๋ฐ ๋””๋ฒ„๊น…

์™„์„ฑ ์ „์— ์•ฑ์€ ๋‹ค์Œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฉ๋‹ˆ๋‹ค:

  • ์ž˜๋ชป๋œ ๋„์‹œ ์ด๋ฆ„
  • ๋นˆ ์ž…๋ ฅ ํ•„๋“œ
  • ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜

์ ์ ˆํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ์ด ํ”„๋กœ์ ํŠธ ๊ฐœ์„  ๋ฐฉ๋ฒ•

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ ์•„์ด๋””์–ด:

  • โญ ์ฆ๊ฒจ์ฐพ๋Š” ๋„์‹œ ์ €์žฅ
  • ๐Ÿ“ ์‚ฌ์šฉ์ž ์œ„์น˜ ์ž๋™ ๊ฐ์ง€
  • โšก PWA๋กœ ๋ณ€ํ™˜
  • โš›๏ธ React๋กœ ์žฌ๊ตฌ์„ฑ
  • ๐Ÿ” ๋ฐฑ์—”๋“œ ์ง€์› ์ถ”๊ฐ€

๋น„๋””์˜ค์— โ€œIMPROVEโ€๋ผ๊ณ  ๋Œ“๊ธ€์„ ๋‹ฌ์•„ ๋‹ค์Œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ œ์•ˆํ•˜์„ธ์š”.

๐Ÿ“บ ์ „์ฒด ๋น„๋””์˜ค ํŠœํ† ๋ฆฌ์–ผ

๋‹คํฌ ๋ชจ๋“œ์™€ ์ง€๋„ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ๊ณ ๊ธ‰ ๋‚ ์”จ ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ

๐Ÿ ๋งˆ๋ฌด๋ฆฌ ์ƒ๊ฐ

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ์„ ์›ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค:

  • API ์ฒ˜๋ฆฌ ๊ธฐ์ˆ  ํ–ฅ์ƒ
  • ์‹ค์ œ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ•
  • ๊ฐ•๋ ฅํ•œ ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ ์ œ์ž‘

ํ”„๋กœ์ ํŠธ๋Š” ์ž์‹ ๊ฐ์„ ํ‚ค์šฐ๊ณ , ์ž์‹ ๊ฐ์€ ์ปค๋ฆฌ์–ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ๋˜์„ธ์š”! ๐Ÿ’ป๐Ÿ”ฅ

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

jQuery 4.0.0 ์ถœ์‹œ

๋ฒˆ์—ญํ•  ํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”? ํ…์ŠคํŠธ๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.