https://www.freecodecamp.org/learn/coding-interview-prep/take-home-projects/show-the-local-weather
λ§μ μΊ ν μ°Έκ°μλ€μ΄ ν¬λΌ λμλ§ μΉ΄ν κ³ λ¦¬λ₯Ό ν΅ν΄ λ μ¨ νλ‘μ νΈ κ΄λ ¨ λ¬Έμ λ₯Όλ³΄κ³ νκ³ μμ΅λλ€. μ²μμλ μλͺ»λ μ½λκ° μ¬μ©λλ κ²μΌλ‘ μκ°νμ§λ§ μ§λμ£Ό λμ λ΄ λ μ¨ νλ‘μ νΈμ μλ§μ λ€λ₯Έ λ¬Έμ λ₯Ό λ°κ²¬νμ΅λλ€. κΈλ¦¬μΉ APIκ° μΌλ³Έμ λ μ¨ λ°μ΄ν°λ₯Ό 무μμλ‘ λ°ννλ κ² κ°μ΅λλ€. fetch, jQuery $ .ajax, $ .getJSOn λλ κΈ°ν λ°©λ²μ μ¬μ©νμ¬ μΊ νμΉ΄μ νλ‘μ νΈλ₯Ό μ΄μ΄ μ ν¨ν μλ λ° κ²½λ κ°μμ λ μ¨ λ°μ΄ν°λ₯Ό κ°μ Έ μ€λ κ²½μ° 75 %μ μκ° λμ λ°ν λ μλ΅μ μΌλ³Έ λ μ¨μ λλ€. https://codepen.io/freeCodeCamp/full/bELRjV μμ λ μ¨ λ°λͺ¨μ λνλλ λ¬Έμ λ₯Ό λ³Ό μλ μμ΅λλ€.
ν΄λΉ μμ
λ¬Έμ λ₯Ό νμΈν κ² κ°μ΅λλ€! μΌλ³Έμ΄ λ°μ΄ν°λ₯Ό ν¬ν¨νλ μΊμμμ μ½λ κ² μ λλ€.
μΊμλ λκΈ°μ΄μ 60 κ° μ΄μμ μμ²μ΄μλ κ²½μ°μλ§ μ¬μ©λ©λλ€ (50 ν). μ¦, _ κ°λ _ μ¬λ°λ₯Έ κ²°κ³Όλ₯Ό λ°νν©λλ€. κ·Έλ¬λ _ κ°λ _ μμμΉ λͺ»ν κ²°κ³Όλ₯Ό λ°νν©λλ€.
μ΄ λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°ν μ μμ΅λκΉ? μΈ κ°μ§ μ΅μ μ΄ μμ΅λλ€ ...
μ΄κ²μ λμμ΄ νμνκΈ° λλ¬Έμ μ΄κ²μλ³΄κ³ μΆμ΅λλ€. κ·Έλ¬λ μ΄κ²μ΄ νλ‘μ νΈλ₯Ό λ°©ν΄νλ λ°©λ²κ³Ό μλ©΄μ΄ νμν λ°©λ²μ κ³ λ €ν λ λκ΅°κ°μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μΆλ€λ©΄ (κ°μ₯ μ¬μ΄ λ°©λ²μ μμ²μ κ±°λΆνλλ‘ μΊμλ₯Ό λ³κ²½νλ κ²μ λλ€) κ·Έλ κ²νμμμ€!
μκ² μ΅λλ€. λ¬Έμ λ₯Ό ν΄κ²° ν κ² κ°μ΅λλ€ . νμ§λ§ API ν€κ° μμκΈ° λλ¬Έμ ν μ€νΈ ν μ μμμ΅λλ€. λ¬Όλ‘ μΊμ±μ μμ‘΄νμ§ μλ DOSμ μνλ μμ΅λλ€.
λ°λΌμ κ°μ μ΄ μ΄λ£¨μ΄μ§ μ μμ΅λλ€. μλ§λ μΌλ³Έ λ°μ΄ν°λ₯Ό λ³΄λΌ κ³³μμ μμ²μ κ±°λΆν΄μΌν κΉμ? μ΄κ²μ λͺ¨λμκ² λ¬λ € μμ΅λλ€. μμλ‘ μμ νκ³ λ΄μΌ λ λμμ§λλ‘ λ Έλ ₯νκ² μ΅λλ€.
glitch.me APIμ ν 리νμ€νΈλ₯Ό ν μ μλ€κ³ μκ°ν©λλ€ (λ¬Όλ‘ μ κ° λμΉ GitHubμ 리ν¬μ§ν 리κ°μλ κ²½μ°λ μ μΈ). λ°λΌμ μ°κΈ° κΆνμ΄μλ μ¬λμ μλνλ API ν€λ‘ ν μ€νΈ ν ν λ³κ²½ μ¬νμ λ³ν©ν΄μΌν©λλ€.
λ§μ΅λλ€, μ λ μ§κΈ afkμ λλ€. νμ§λ§ μλ μ νμ΄ νμνλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. API νΈμΆμ΄ λ무 λ§μΌλ©΄ μμ²μ΄ κ±°λΆλλλ‘ μ½λλ₯Ό 곧 μμ νκ² μ΅λλ€.
μ’μμ, μ΄μ λ¨κΈ°μ μΌλ‘ ν΄κ²°μ± μ λ§λ κ² κ°μ΅λλ€. νμ§λ§ 무μμ΄ λ°μ΄ν° μμ§μ λν΄ μ°λ¦¬κ° 무μμνκ³ μΆμμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μ’νλ λ§€μ° μ νν κ²½ν₯μ΄ μμ΅λλ€. κ·Έκ²μ΄ 100 % μ ννμ§ μλ€λ κ²μ λΆλͺ ννκΈ° μν΄ μΊμμμλ κ²μ΄λΌλ©΄ νμ€ν νμν΄μΌν©λλ€.
μ΄μ¨λ μ§κΈμ μ½λκ° μΊμμ μ‘μΈμ€νλ €κ³ ν λλ§λ€ λμ μ€λ₯ λ©μμ§λ₯Ό 보λ λλ€.
function getBestCachedData(lon, lat){
+ /*
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('./data/cache.json', 'utf8'));
+ */
- return obj;
+ return {
+ "error": "This API is overloaded with requests at the moment. Please try again in a few seconds and see if you get a response"
+ }
}
μλ νμΈμ @ joker314 μ€λ₯λ‘ κ±°λΆνλ κ·νμ μ루μ μ λμν©λλ€. ν보 ν΄μ£Όμ κ² μ΄μ? μκ°μλ΄μ΄ μ‘°μ¬ν΄ μ£Όμ μ κ°μ¬ν©λλ€.
@QuincyLarson μ΄ https://fcc-weather-api.glitch.me/μ μ‘μΈμ€ ν μμλ μ¬λμ μλ΄ ν μ μμ΅λκΉ? λΉμ μ΄ μμ μλΌλ©΄ μμ ν μ μμ΅λλ€.
@raisedadead νκ³ μΆμ§λ§ μ£Όμλ₯Ό λλ¬ λ΄€λλ° glitch.meκ° μ€μ λ‘ pull μμ²μ μ§μνλμ§ νμ€νμ§ μμ΅λλ€.
νΈμ§ : λ¬Όλ‘ μμ λ μ½λλ λ΄ λ¦¬λ―Ήμ€ μμ μ°Ύμ μ μμ΅λλ€.
@ joker314 λ§μ΅λλ€ . 리믹μ€μμ νλ‘μ νΈλ₯Ό μ λ°μ΄νΈν©λλ€. μ΄μ μ견μ 무μνμμμ€.
ν΄λΉ νλ‘μ νΈμ λν μ‘μΈμ€ νμΈμ Quincyμμ κΈ°λ€λ¦¬κ³ μμ΅λλ€. λμμ μ£Όμ μ κ°μ¬ν©λλ€.
@raisedadead- μ΄ μμ μμ μ μΌλ§λ μ€λ μ μ© λ κΉμ? μ΄μ λν κΆκ·Ήμ μΈ μ루μ μ μ΄λ€ λͺ¨μ΅μΌκΉμ? μ΄κ²μ μλ μ ν λ¬Έμ μ λκΉ? λ§μ½ κ·Έλ λ€λ©΄, λ λ§μ μΊ ν κ°μ΄ λ μ¨ νλ‘μ νΈλ₯Ό λ§λ€λ©΄μ μν©μ λμ± μ ν λ κ²μ λλ€. μλ μ νμ λ릴 μ μμ΅λκΉ?
κ·Έλ λ€λ©΄μ΄ μμ μμ μ μΌλ§λ μ€λ μ μ© λ κΉμ?
μ΄κ²μ μΌμμ μΈ κ²μ΄ μλλ©° μ€λ₯κ° λ°μνλ©΄ μλ μ νμΌλ‘ μΈν λ¬Έμ λΌλ κ²μ μ μ μμ΅λλ€.
μ΄κ²μ httpsλ₯Ό μ§μνμ§ μλ OpenWeatherMaps API μμ μμ± λ λνΌ μκΈ° λλ¬Έμ μ½λ νκ³Ό μΆ©λνμ΅λλ€.
λ§μ½ κ·Έλ λ€λ©΄, λ λ§μ μΊ ν κ°μ΄ λ μ¨ νλ‘μ νΈλ₯Ό λ§λ€λ©΄μ μν©μ λμ± μ ν λ κ²μ λλ€. μλ μ νμ λ릴 μ μμ΅λκΉ?
μ, μ±λ¦°μ§μμ κΈλ¦¬μΉ λνΌ λμ APIλ₯Ό μ§μ ν΅ν©νμ¬ μ λ£ λ²μ μ μ νν μ μμ΅λλ€.
@raisedadead μΊμκ°μλ μλ μ½λμ²λΌ 보μ λλ€. μ΄κ²μ΄ μ¬μ€μ΄κ³ νλΌμ΄λ²μλ₯Ό μ‘΄μ€νκΈ° μν΄ μ΄κ²μ΄ μ νν μ΄λ»κ² 보μ΄κΈΈ μνλμ§μ λν μΈλΆ μ¬νμ λΆλλ½κ² ν μ μλ€λ©΄ μλ μ νμ ν΄κ²°ν μ μκΈ°λ₯Ό λ°λλλ€.
λ€μ μκ°νλ©΄ μ€λ₯ λ©μμ§ λμ μ ν¨ν λ°μ΄ν°λ₯Ό λ€μ μ 곡νλ κ²μ΄ κ°μ₯ μ’μ΅λλ€. λμ μμμ κΈ°μ 쑰건μ μμ±νλλ‘ μΊμλ₯Ό λ³κ²½νκ³ μμΉλ₯Ό "API μ¬μ© μ€μ λλ€. λμ€μ μ€μ κ²°κ³Όλ₯Ό μν΄ λ€μ μλνμμμ€"λ‘ μ€μ νμκ² μ΅λκΉ?
@raisedadead, μ΄κ²μ λν λΉμ μ μκ°μ μ΄λ»μ΅λκΉ?
μ΄ νλ‘μ νΈλ₯Ό λ§ μλ£νκ³ μΌλ³Έ λ μ¨ λ°μ΄ν°λ₯Ό λ°κ±°λ (λλΆλΆ) λ°μ΄ν°κ°μλ λ¬Έμ κ°μλ μ¬λμΌλ‘μ λ°μ΄ν°λ₯Όλ°μ§ μλ κ²λ³΄λ€ λ°μ΄ν°λ₯Όλ°λ κ²μ΄ λ μ μ©νλ€κ³ λ§νκ³ μΆμ΅λλ€. μ μ΄λ μΌλ³Έ λ°μ΄ν°λ₯Ό μ¬μ©νλ©΄ μ νν λ μ¨λ₯Ό λ³΄μ¬ μ£ΌλλΌλ λ΄ μ½λκ° μλνλμ§ νμΈν μμμμ΅λλ€.
μ΄λ‘ μ μΌλ‘λ μμμ λ°μ΄ν°λ₯Ό λ³΄λΌ μ μμ΅λλ€. κ·Έλ¬λ μ°λ¦¬λ λ°μ΄ν°κ° μ ννμ§ μλ€λ λΆλ§μ λ°κ³ μΆμ§ μμ΅λλ€.
μ΄μ¨λ λμμ΄λλ€λ©΄ μμμ λ°μ΄ν°λ₯Ό κ°μ§ μ μμ΅λλ€.
@QuincyLarson μμ μμ²μΌλ‘ μλ΄ν΄ μ£Όμκ² μ΅λκΉ?
κ°μ§ λ°μ΄ν°λ₯Ό 보λ΄μΌνλ€κ³ μκ°νμ§λ§ κ·Έκ²μ΄ κ°μ§λΌλ κ²μ λΆλͺ νν©λλ€. μμΉ μ΄λ¦μ "API Busy, Fake Data"λ‘ μ§μ νκ³ μλ΅μμ λ μ¨, μ’ν λ±μ 무μμλ‘ μ§μ ν©λλ€. μ΄λ κ²νλ©΄ μ¬λλ€μ κ²°κ³Όκ° μ ννμ§ μμ μ΄μ λ₯Ό μ μ μμ΅λλ€. κ·Έλ¬λ λͺ¨λ κ²μ΄ μ¬μ ν κ°λ°μλ₯Ό μν΄ μλν©λλ€.
μκ°?
κ°μ§ λ°μ΄ν°λ₯Ό 보λ΄λ©΄ νΉμ μμΉμ λν νμ¬ λ μ¨ λ°μ΄ν°λ₯Ό μ 곡νλ λͺ¨λ λͺ©μ μ 무λ λ¨λ¦΄ μ μλ€κ³ μκ°ν©λλ€. λλ μΊμλ₯Ό μμ±νκ³ κ΅¬ννλ λ°©λ²μ νμ νλ κ²μ λν @ joker314 μ μμ΄λμ΄λ₯Ό μ’μν©λλ€.
μ½λκ° νλ‘μ νΈμ λ¬Έμ κ° μμμ μκ³ μ μ΄ ν μμλ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° λΆνμν μκ°μ μλΉνμ§ μλλ‘ νλ‘μ νΈ νμ΄μ§μ μ΅κ·Ό ν¬λΌ ν λ‘ μ κ³ μ νλ κ²μ κ³ λ €ν΄ μ£Όμκ² μ΅λκΉ?
BTW, https://fcc-weather-api.glitch.me/μ μ€λͺ
λλλ‘ icon
μ μ΄λ―Έμ§ URLμ΄ λ°νλμ§ μλλ€κ³ μκ°ν©λλ€ .
Images links are included in the JSON under weather[0].icon
λΌκ³
λ°λͺ¨ μ루μ
μ΄ μμ΄μ½μ 그리기 μν΄ CSSλ₯Ό μμ±νμμ μμμ΅λλ€.
μ΄ μ μ¬μ μΈ λ¬Έμ μ λν΄ μλ € μ£Όμ μ κ°μ¬ν©λλ€. μμ² λ° μλ΅ μμ μλ μνλ νλκ° ν¬ν¨λμ΄ μμ΅λλ€. μ΄ νλκ°μλ νΉλ³ν μμ²μ 무μμ λκΉ?
@ joker314 λ΅μ₯μμν Thx.
https://fcc-weather-api.glitch.me/api/current?lon=39.988&lat=116.3000
{"coord":{"lon":139,"lat":35},"weather":[{"id":803,"main":"Clouds","description":"broken clouds"}],"base":"stations","main":{"temp":28.23,"pressure":1011,"humidity":74,"temp_min":26,"temp_max":31},"visibility":10000,"wind":{"speed":3.6,"deg":230},"clouds":{"all":75},"dt":1499396400,"sys":{"type":1,"id":7616,"message":0.0043,"country":"JP","sunrise":1499369792,"sunset":1499421666},"id":1851632,"name":"Shuzenji","cod":200}
μμ κ° μ λλ‘ μλνλμ§ λͺ°λλλ°, μμΉ λ νΉλ³ν λ μ¨ λλ¬ΈμΌκΉμ?
@ Em-Ant Glitchμμ μ€νμ€μΈ μ±μ λ¬Έμ μΈ κ² κ°μ΅λλ€. μΊμλ₯Ό μ΄ν΄λ³΄κ³ μ΄κ²μ΄ μ°λ¦¬κ° μ§μΈ μμλ κ²μΈμ§ νμΈν΄ μ£Όμκ² μ΅λκΉ?
λͺ κ°μ§ κ°λ¨ν ν μ€νΈλ₯Όνλλ° μ΄κ²μ΄ μμ λμλ€κ³ μκ°ν©λλ€. μ¬μ ν λ¬Έμ κ°μλ μ¬λμ΄ μμΌλ©΄ μΈμ λ μ§μ΄ λ¬Έμ λ₯Ό λ€μμ¬μμμ€.
@ moT01 μ΄λ€ μ’ λ₯μ ν μ€νΈλ₯Ό νμ΅λκΉ? λ¬Έμ λ OpenWeather APIλ₯Ό νΈμΆνλ λ° μ¬μ©λλ λ¬΄λ£ FCC κ³μ λΉ μλ μ νμ΄ μλ€λ κ²μ λλ€. μ΄λ¬ν μλ μ νμ λλ¬νλ©΄ Glitch νλ‘μκ° μΌλ³Έ μ’νλ₯Ό λ°νν©λλ€. μ§κΈ λΉμ₯ λ¬Έμ λ‘ κ°μ£Όλμ§ μλ μ μΌν μ΄μ λμ΄ νλ‘μ νΈκ° μ΄μ 컀리νλΌμμ μ ν μ¬νμ΄λ―λ‘ μμ λ§νΌ ννΈκ° λ§μ§ μκΈ° λλ¬Έμ λλ€. 1 λΆμ κΈλ¦¬μΉλ₯Ό 60 λ² λλ₯΄ μλ§μ λ€μ JSONμ΄ λ°νλ©λλ€.
{
"coord": {
"lon": 139,
"lat": 35
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds"
}
],
"base": "stations",
"main": {
"temp": 28.23,
"pressure": 1011,
"humidity": 74,
"temp_min": 26,
"temp_max": 31
},
"visibility": 10000,
"wind": {
"speed": 3.6,
"deg": 230
},
"clouds": {
"all": 75
},
"dt": 1499396400,
"sys": {
"type": 1,
"id": 7616,
"message": 0.0043,
"country": "JP",
"sunrise": 1499369792,
"sunset": 1499421666
},
"id": 1851632,
"name": "Shuzenji",
"cod": 200
}
μμ ν΄μΌ ν νλ‘μ νΈμ ν μΌ λͺ©λ‘μ μμ§ λ¨μ μμΌλ―λ‘μ΄ λ¬Έμ λ₯Ό λ€μ μ΄ μ μμ΅λκΉ?
Ahh, yea-λ°©κΈ apiλ₯Ό λͺ λ² λΉ λ₯΄κ² νΈμΆνκ³ μ νν λ μ¨λ₯Ό μ»μ μμμμ΅λλ€. λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μ μ μ‘°κΈ λ λ¬Έμν΄μΌνλ€κ³ μκ°ν©λλ€.
μ λ Hacktoberfestλ₯Ό μμν λ λ°λ‘ μμ μμ μ μμνκ³ QA νλ‘μΈμ€μ ν¬κ² μ°Έμ¬νμ΅λλ€. λλ¨Έμ§λ μμ¬μ΄λ€. μ΄μ μμ μ루μ μ μ»μ μ μλλ‘ Nodeμ Expressμ λν΄ ν¨μ¬ λ μ μ΄ν΄νκΈ° λλ¬Έμ μ΄κ²μ λ€μ κ²ν ν΄μΌν©λλ€.
νλͺ©μ΄ νλλ§μλ μ μ μΊμκ° μμ΅λλ€ (μΌλ³Έμ μμΉ).
λΉμ¨ μ νκΈ°λ₯Ό μ κ±°νμ¬ μμ νκ±°λ (μ’μ μκ°μΈμ§ λͺ¨λ₯΄κ² μ΅λλ€. API ν€κ° νλλΏμ΄λ―λ‘) μμ² ν λΉλμ μ΄κ³Όνλ κ²½μ° λΉμ¨ μ ν μ€λ₯λ₯Ό λ°νν©λλ€.
μ΄μ¨λ κΈλ¦¬μΉμ λνμ΄ API νλ‘μ νΈλ @MiloATH μμ
Camperbot κ³μ μ μ¬μ©νμ¬ https://glitch.com/edit/#!/fcc -weather-apiμμ Miloμ κ°μ μμ²μ 보λμ΅λλ€.
μ’μ μμ΄λμ΄ κ°λ€μ! μΈ λ²μ§Έ μ΅μ μ΄ μμ΅λλ€. λ°μ΄ν°κ° μ€μ λ‘ κ±°κΈ°μ μ μ₯λλλ‘ μΊμλ₯Ό μμ νκ±°λ μλ μ νκΈ°μ λλ¬νλ©΄ μμμ λ°μ΄ν°λ₯Ό μ μ‘ν©λλ€.
μλ μ νμ μ΄κ³Όνλ κ²μ μ΄λ¬ν μν©μμ API ν€κ° μ·¨μ λ μ μμΌλ©° μ΄λ€ κ²½μ°μλ APIμμ κ²°κ³Όλ₯Ό μ»μ§ λͺ»ν μ μμΌλ―λ‘ μ’μ μκ°μ΄ μλκΉ λλ ΅μ΅λλ€.
@ joker314 μ΄λ―Έ μΈ λ²μ§Έ μ΅μ μ λ°©ν₯μΌλ‘ μμ§μ΄κ³ μμμ΅λλ€.
κΈλ¦¬μΉ νλ‘μ νΈμ μ΄λλ₯Ό μ λ¬νμ΅λλ€.
μλ ν¬μΈνΈλ ν¨μ¬ λ μ’μ μ μμ΅λλ€. CIλ‘ λ³λμ 리ν¬μ§ν 리λ₯Ό ꡬμΆνκ³ Heroku (λ¬΄λ£ λ²μ )μ κ°μ λ μ±μν κ²μ λ°°ν¬ν΄μΌνλ€κ³ μκ°ν©λλ€. μ΄κ²μ μ°λ¦¬κ° νλ‘μ νΈμμ λ μ½κ² μμ ν μμκ²ν©λλ€.
μ°λ¦¬λ λ μ΄μ herokuμ λ°°ν¬νμ§ μμ΅λλ€. μ§κΈμ Glitchλ₯Ό μ¬μ©ν κ²μ λλ€. λ체 νλ‘μ νΈκ° μμΌλ©΄ Glitchμ freeCodeCamp κ³μ μΌλ‘ λ°°ν¬νκ³ μ»€λ¦¬νλΌμ κΈ°μ‘΄ κ³Όμ λ₯Ό λ체νκ²λμ΄ κΈ°μ©λλ€.
νΈμ λ΄μ κ°κΈ°
μλ
νμΈμ! μ΄κ²μ λν μ
λ°μ΄νΈκ° μμ΅λκΉ?
μν€ν
μ²μ λ°μ΄ν° νλ¦ (κ·Έλ¦¬κ³ κ²°κ΅ κ΄λ ¨ νμΌ μ΄λ¦)μ΄ ν¬ν¨ λ λ€μ΄μ΄κ·Έλ¨μ 보λ κ²μ λ©μ§ κ²μ
λλ€.
@ Hash2C κΈ°μ‘΄ Glitch νλ‘μ νΈ (μλ μ°Έμ‘°)λ₯Ό 리믹μ€νμ¬ νλ‘μ νΈλ₯Όλ³΄κ³ μμ ν μ μμ΅λλ€.
https://glitch.com/edit/#!/fcc -weather-api? path = server.js : 1 : 0
κ°μ¬ν©λλ€ @RandellDawson , μμ μ€μ λλ€. λͺ©μμΌκΉμ§ 첫 λ²μ§Έ μ΄μμ λ§μΉ μ μκΈ°λ₯Ό λ°λλλ€.
@ Hash2C μκ°μ
@RandellDawson κ°μ¬ν©λλ€. μ΅μ μ λ€νκ² μ΅λλ€.
νμ¬μ μ μ½μ λν΄ μ‘°κΈ λ μμμΌν©λλ€.
μμμ μ°λ¦¬λ λΆλΉ 60 κ°μ ννΈ μ νμ΄ μλ€λ κ²μ μ½μμΌλ©°, μ΄λ OpenWeather κ°κ²© μ±
μ μ λ¬΄λ£ κ³μΈ΅ μΈ κ² κ°μ΅λλ€. μ΄ νλλ₯Ό λ리λ λ°©λ²μ΄ μμ΅λκΉ? OWμ λν λ€λ₯Έ ꡬλ
μ λ§λλ κ²κ³Ό κ°μκ°μ? OWμ ν¨κ» μ¬μ©ν μμλ λ€λ₯Έ λ¬΄λ£ "μ§μ€ μμ€"κ° μμ΅λκΉ?
νΈμ§ : λν μ΄λ€ μ’ λ₯μ μ§μ°μ΄ νμ©λ©λκΉ? 5 λΆ? 15 λΆ? 1 μκ°? 3 μκ°?
Edit2 :μ΄ νμμ λ³Ό μ μλ―μ΄ OW "Weather API λ°μ΄ν° μ
λ°μ΄νΈ"κ° "<2 μκ°"μΈ κ² κ°μ΅λλ€.
https://openweathermap.org/price
λμΌν νμμ κ°μ©μ±μ΄ 95 %μ λΆκ³Ό ν¨μ μ μ μμ΅λλ€.
μ΄ νλλ₯Ό λ리λ λ°©λ²μ΄ μμ΅λκΉ? OWμ λν λ€λ₯Έ ꡬλ μ λ§λλ κ²κ³Ό κ°μκ°μ?
λν IP μ£Όμμ μ νμ΄μμ μ μμΌλ―λ‘ (νμ€νμ§ μμ) λ€λ₯Έ ꡬλ μ λ§λλ κ²μ λμμ΄λμ§ μμ΅λλ€.
OWμ ν¨κ» μ¬μ©ν μμλ λ€λ₯Έ λ¬΄λ£ "μ§μ€ μμ€"κ° μμ΅λκΉ?
νμ€νμ§ μμ.
Edit2 :μ΄ νμμ λ³Ό μ μλ―μ΄ OW "Weather API λ°μ΄ν° μ λ°μ΄νΈ"κ° "<2 μκ°"μΈ κ² κ°μ΅λλ€.
μ λ νμ¬ OpenWeatherμ λ¬΄λ£ λ²μ μ μ¬μ©νμ¬ μ체 λ μ¨ νλ‘μ νΈλ₯Ό κ°λ° μ€μ΄λ©° μμ²μ΄ λ§μ§λ§ μμ²μμ 10 λΆ λ―Έλ§μΈμ§ νμΈν λ€μ λμΌν μλ / κ²½λμ λν΄ λ§μ§λ§μΌλ‘ λ°ν λ λ°μ΄ν°λ₯Ό νμνλ κ²μ κ³ λ €νμ΅λλ€.
κ°λ°μμκ² μ νμ λλ¬νλ©΄ νΉλ³ μλ΅μ λ³΄λ΄ κ² λ€λ μ¬μ€μ μ리기 μν΄ μ±λ¦°μ§ μ§μΉ¨μ μ λ°μ΄νΈνμ¬ μ± μ¬μ©μμκ² λ°μ΄ν°κ° μ΅μ μνκ° μλ μ μμμ μ릴 μλ μλ€κ³ μκ°ν©λλ€. FCC APIλ₯Ό μ¬μ©νμ¬ μ΄μ νλ‘μ νΈλ₯Ό μ€λ¨νμ§ μλλ‘ νμ¬μ λμΌν λ°μ΄ν°λ₯Ό λ°ννκ³ μΆμ΅λλ€. μλ΅μ μΆκ° μμ±μ μΆκ°νλ κ²λΏμ λλ€. μ΄λ»κ² μκ°ν΄?
μ΄ μ μ₯μλ₯Ό λ§λ€μμΌλ―λ‘ λ‘컬μμ ν
μ€νΈνκΈ°κ° λ μ½μ΅λλ€.
https://github.com/Hash2C/fccWeatherApiDraft
3 κ°μ§ μ£Όμ μ¬μ© μ¬λ‘ (λΉλΆκ°)κ° μ΄λ―Έ λ€λ£¨μ΄ μ‘λ€κ³ μκ°ν©λλ€.
κ·Έλ μ§ μμΌλ©΄ : λͺ¨μ λ°μ΄ν°λ₯Ό μ°λ¦¬κ° κ²°μ ν κ²μΌλ‘ μ€μ ν©λλ€ (λμ€μ OpenWeather api νΈμΆμ΄ μ€ν¨ ν κ²½μ°).
OpenWeather APIλ₯Ό νΈμΆνλ €κ³ ν©λλ€.
μ΄ νλ¦μ λ¬Όλ‘ ν λ‘ μ μ¬μ§κ° λ§μ΅λλ€!
μμ§ν΄μΌ ν μΌ, μ ν¨μ± κ²μ¬, λΉλκΈ° μμ
, μ£μ§ μΌμ΄μ€ (ν
μ€νΈ) λ±μ΄ λ§μ΄ λ¨μ μμ§λ§ μ μ°¨μ μΌλ‘ λλ¬ ν κ²μ
λλ€. server.js
νμΌμ λν΄ λ§μ΄ λκΈμ λ¬μμ΅λλ€ (λλ €μνμ§ λ§μΈμ). μ μ°¨μ μΌλ‘ λλΆλΆμ μ 보λ₯Ό νν°λ§νκ³ μ¬κΈ°μμ λμμ μμ²νμ¬ κ° λ¬Έμ μ λν΄ λ
Όμ ν κ²μ
λλ€.
λ¨μ§ μμ΄λμ΄μ λλ€. κ²°κ΅ "μνλμ§ μμ OpenWeather API (λλ κΈ°ν)μ λν μ¬μ© κ°λ₯ν μμ²"μ μλ₯Ό μ΅μννλ €λ λ°μ΄ν° μλΉμ€λ₯Ό κ°μ§ μ μμ΅λκΉ? μ΄ μλΉμ€λ μλ₯Ό λ€μ΄ MongoDB λ°μ΄ν°λ² μ΄μ€λ₯Ό 곡κΈν κ²μ λλ€. μΊμκ° λ κ²μ λλ€ (Memcachedλ₯Ό μ¬μ©ν μ μμ§λ§ λ무 λ§μ μ μμ΅λλ€. μΆκ° μλκ° νμνμ§ μμ΅λλ€).
κΈ°ν μμ΄λμ΄ :μ΄ μλΉμ€μ κ³Όκ±° μ¬μ© ν΅κ³κ° μμ΅λκΉ? κ·Έλ μ§ μλ€λ©΄, μλ§λ μ°λ¦¬λ νλλ₯Ό λ§λ€κΈ° μμν μμμ κ²μ λλ€. μλ§λ κ·Έκ²μ κ²°κ΅ κ°λ₯νμ§λ§ λ§€μ° μ°¨μ μ μΈ μ루μ μ μ΅μ ννκΈ° μν΄ μ μ© ν μ μμ΅λλ€.
μ΄ν΄νλ λ° λμμ΄ νμν ν κ°μ§λ githubκ° κ²½κ³ νλ 보μ λ¬Έμ μ
λλ€.
(μ΄λ€ μ΄μ λ‘ λλ λΉμ μ λ©μμ§λ₯Ό μμ ν λμ³€μ΅λλ€!)
λν IP μ£Όμμ μ νμ΄μμ μ μμΌλ―λ‘ (νμ€νμ§ μμ) λ€λ₯Έ ꡬλ μ λ§λλ κ²μ λμμ΄λμ§ μμ΅λλ€.
μ’μ μ§μ . ν μ€νΈ ν κ°μΉκ° μμ΅λκΉ?
OWμ ν¨κ» μ¬μ©ν μμλ λ€λ₯Έ λ¬΄λ£ "μ§μ€ μμ€"κ° μμ΅λκΉ?
νμ€νμ§ μμ.
μ΄λ κ² ν μ μλ€λ©΄ μ±κ³΅μ μΈ μ루μ μ μ»μ νλ₯ μ΄ ν¬κ² λμμ§ μ μμ΅λλ€.
μ λ νμ¬ OpenWeatherμ λ¬΄λ£ λ²μ μ μ¬μ©νμ¬ μ체 λ μ¨ νλ‘μ νΈλ₯Ό κ°λ° μ€μ΄λ©° μμ²μ΄ λ§μ§λ§ μμ²μμ 10 λΆ λ―Έλ§μΈμ§ νμΈν λ€μ λμΌν μλ / κ²½λμ λν΄ λ§μ§λ§μΌλ‘ λ°ν λ λ°μ΄ν°λ₯Ό νμνλ κ²μ κ³ λ €νμ΅λλ€.
μ, μΊμ λ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ μμ΅λκΉ? μ΄μ μ νμ© κ°λ₯ν μ§μ°μ λν΄ μ§λ¬ΈνκΈ° λλ¬Έμ 2 μκ° λ―Έλ§μ μ§λ¬Έμ κ°μ Έ μμ΅λλ€. μ§μ° μκ°μ΄ κΈΈμλ‘ λ μ’κΈ° λλ¬Έμ μΊμμ λ λ§μ΄ μ κ·Όνκ³ APIλ₯Ό μμ£Ό νΈμΆ ν νμκ° μμ΅λλ€. μμνκΈ° μν΄ μ΅λ 1 μκ° μ μ λ°μ΄ν°λ₯Ό λ³΄λΌ μ μλ€κ³ κ°μ νκ³ μ½λ©μ μμνμ΅λλ€.
κ°λ°μμκ² μ νμ λλ¬νλ©΄ νΉλ³ μλ΅μ λ³΄λ΄ κ² λ€λ μ¬μ€μ μ리기 μν΄ μ±λ¦°μ§ μ§μΉ¨μ μ λ°μ΄νΈνμ¬ μ± μ¬μ©μμκ² λ°μ΄ν°κ° μ΅μ μνκ° μλ μ μμμ μ릴 μλ μλ€κ³ μκ°ν©λλ€. FCC APIλ₯Ό μ¬μ©νμ¬ μ΄μ νλ‘μ νΈλ₯Ό μ€λ¨νμ§ μλλ‘ νμ¬μ λμΌν λ°μ΄ν°λ₯Ό λ°ννκ³ μΆμ΅λλ€. μλ΅μ μΆκ° μμ±μ μΆκ°νλ κ²λΏμ λλ€. μ΄λ»κ² μκ°ν΄?
λλ κ°λ°μμκ² κ΄λ ¨ μ 보λ₯Ό μ 곡νκ³ κ°λ°μκ° μ νν μ μλλ‘νλμ΄ μμ΄λμ΄μ μ μ μΌλ‘ λμν©λλ€. μ΄κ²μ΄ μ κ° κ°μ₯ μ μ νλ€κ³ μκ°νλ κ²½λ‘μ΄κΈ°λν©λλ€.
FCC νλ‘μ νΈμμ ν
μ€νΈ λ° μμ²μμν νμ€ λκ΅¬κ° μμ΅λκΉ?
μ¬μ©μ€μΈ μμ²μ κ²½μ° (Axios λμ μ¬μ©ν΄λ³΄κΈ°λ‘ κ²°μ νκΈ° λλ¬Έμ)
www.npmjs.com/package/request
ν
μ€νΈλ₯Ό μν΄ κ²½νμ΄ λ§μ§λ μμ§λ§ λͺ¨μΉ΄μ λν΄ μκ°νκ³ μμμ΅λλ€.
νμ§λ§ μ΄λ€ λκ΅¬κ° FCCμ λ μ ν΅ν©λλμ§ μλ €μ£ΌμΈμ
μ΄ν΄νλ λ° λμμ΄ νμν ν κ°μ§λ githubκ° κ²½κ³ νλ 보μ λ¬Έμ μ λλ€.
κ°μ₯ κ°λ¨ν ν΄κ²°μ±
μ npm audit fix
μ μ€ν ν λ€μ μ
λ°μ΄νΈ λ package.json
λ° package-lock.json
λ₯Ό 컀λ°νλ κ²μ
λλ€. μ ν¨ν€μ§λ μ΄μ μ μ·¨μ½ν ν¨ν€μ§μμ λ³κ²½λ μ¬νμ΄ μμ΄μΌν©λλ€. κ·Έλ¬λ ν¨ν€μ§ μμ±μκ° μ€μλ‘ μ£Όμ λ³κ²½ μ¬νμ λμ
νμ§ μμλ€κ³ κ°μ νλ―λ‘ μμ μ¬νμ΄ μ μ©λ ν μ±μ μλμΌλ‘ νμΈνλ κ²μ΄ μ’μ΅λλ€.
μ λ OpenWeather APIλ₯Ό κ°μ§κ³ λμμ΅λλ€ (μ€μ λ‘ μ²μλΆν°μ΄ μμ
μ μν νμ΄μΌνμ΅λλ€).
μ°λ¦¬κ° μκ³ μμλμ? https://openweathermap.org/faq#error401
κ΄λ ¨ λΆλΆ
FOSS κ°λ°μ : λ¬΄λ£ λ° μ€ν μμ€ μννΈμ¨μ΄λ₯Ό νμνλ©° κΈ°κΊΌμ΄ λμ λλ¦¬κ² μ΅λλ€. λ¬΄λ£ μννΈμ¨μ΄ μ ν리μΌμ΄μ μμ OWM λ°μ΄ν°λ₯Ό μ¬μ©νλ €λ©΄ API ν€λ₯Ό λ±λ‘νκ³ λ±λ‘ λ μ ν리μΌμ΄μ λ° API ν€λ₯Ό μ€λͺ νλ ν°μΌμ μ μΆνμμμ€. OWMμ μ€ν μμ€ μ ν리μΌμ΄μ μμ μ¬μ©λλ κ²½μ° ν€μ λν μμ² λ¦¬ννΈ μ‘μΈμ€ μ νμ κ²ν ν©λλ€.
μλ
νμΈμ μ¬λ¬λΆ, μ λ μμλ³΄λ€ λ λ§μ μ μ½μ λ°μμ΅λλ€.
μ¬κ° μκ°μλ OpenWeather APIλ₯Ό 곡λΆνκ³ μμ΅λλ€. λΆννλ μ λ¬Έμνλμ΄ μμ§ μμ΅λλ€.
bbox μ΅μ
μ μ¬μ©νμ¬ μ€ν κ°λ₯ν μ λ΅μ μκ° ν΄λΈ κ² κ°μ§λ§ μμ§ ν
μ€νΈ μ€μ
λλ€.
λλ λ΄κ° λ§λ λͺ¨λ μ 보, λ΄κ° μννλ ν
μ€νΈλ‘ λ¬Έμλ₯Ό λ§λλ μμ΄λμ΄λ₯Ό μκ°ν΄ λμ΅λλ€.
@ Hash2C μκ°μ
μλ
νμΈμ.
λΉμ μ λΉμ μ΄ λ¬΄μ¨ λ§μνλμ§ μκ³ μμμ΅λλ€ : heavy_check_mark :
@ Hash2C μ루μ μ μ΄λ»κ² μ§νλκ³ μμ΅λκΉ?
λ μ΄μ μΈμ¦μ νμν νλ‘μ νΈκ° μλκΈ° λλ¬Έμ μΌλ°μ μΌλ‘μ΄ νλ‘μ νΈμμ μμ νλ μ¬μ©μ μκ° ν¬κ² κ°μνμ¬μ΄ λ¬Έμ λ₯Ό μ’ κ²°νμ΅λλ€. μ΄λ‘ μΈν΄ APIμ λν λΉμ¨ μ νμ λλ¬νλ μΈμ€ν΄μ€ μκ° μ€μ΄ λ€μμ΅λλ€.