ํฐ์คํ ๋ฆฌ ๋ทฐ
Node js ๊ณต์ ํํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด About ํญ์์ Node.js์ ๋ํด์ ๋ผ๋ ์ค๋ช ์ด ์งค๋งํ๊ฒ ๋์ต๋๋ค.
Node.jsยฎ์ ๋ํด์
๋น๋๊ธฐ ์ด๋ฒคํธ ์ฃผ๋ JavaScript ๋ฐํ์์ผ๋ก์จ Node๋ ํ์ฅ์ฑ ์๋ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ค์ "hello world" ์์ ๋ ๋ค์์ ์ฐ๊ฒฐ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ ์ฐ๊ฒฐ์์ ์ฝ๋ฐฑ์ด ์คํ๋๋๋ฐ ์คํํ ์์ ์ด ์๋ค๋ฉด Node๋ ๋๊ธฐํฉ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๋จ์ด ๋ ๊ฐ์ง๊ฐ ๋์ค๊ฒ ๋๋๋ฐ ํ๋๋ ๋น๋๊ธฐ ๋ค๋ฅธ ํ๋๋ ์ฝ๋ฐฑ์ด๋ผ๋ ๋จ์ด์ ๋๋ค.
๋น๋๊ธฐ๋ผ๋ ๋ง์ ์ฝ๋๊ฐ ์์ฑ๋ ์์ ๊ทธ๋๋ก ์คํ๋๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ์์ ์ด ๋ค ๋๋์ง ์์๋ ๊ทธ๊ฑด ๊ทธ๋๋ก ๊ณ์ ์์ ํ๊ฒ ๋ด๋ฒ๋ ค๋๊ณ ๋ค์ ์์ ์ ๋ฐ๋ก ์์ํ๋ค๋ ๋ป์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ํน์ง์ ์ฅ์ ์ด ๋ ์๋ ์์ง๋ง ๋๋ฆฌ์ด ๋จ์ ์ด ๋ ์๋ ์์ต๋๋ค.
๊ทธ๋์ Node.js์์ ํญ์ ๋ถ๋ ์์์ด๊ฐ callback ํจ์์
๋๋ค.
๋ณดํต ์ด๋ค ํจ์ ์์ ์ด ๋๋์ ๊ฐ์ ๋ฆฌํดํ ๋ ๋ณดํต C๋ Java์ ๊ฐ์ ์ธ์ด์์๋
return ๊ฐ
์ ํํ๋ก ๋ํ๋๊ฒ ๋ฉ๋๋ค. ์์๊ฐ์ ์ธ์ด์์๋ ์ฝ๋ ์์ฑ ์์๋๋ก ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์ง๋ ์๋ ๊ฐ์ return ํ๊ฒ ๋ ์ผ์ ๋ํ๋์ง ์์ต๋๋ค. ๊ทธ๋ ๊ฒ๋๋ฉด ์ ์๋์ง ์์ ๊ฐ์ด๋ผ๊ณ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ๋น๋๊ธฐ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ Node์์๋ ์๊ธฐ๊ฐ ์ข ๋ฌ๋ผ์ง๋๋ค.
์๋ฅผ๋ค๋ฉด ๋ณ์ A์ ์ด๋ ํ ๊ฐ์ ๊ณ์ฐํ๊ณ ๋์ ๊ทธ ๊ฐ์ return ํ๋ ํจ์๋ฅผ ๋ง๋ค์๋ค์น๋ฉด ์์์ ์ผ๋ก๋ ๋ฆฌํด๋ฐ๋ ๊ฐ์ ๊ณ์ฐ๋ ์ด๋ค ๊ฐ์ด ๋์์ผํ๋ค๊ณ ์๊ฐํ ํ ๋ฐ ๊ทธ๋ ์ง ๋ชปํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ณ์ A๋ ์ ์ธ์ด ๋์์ง๋ง ๊ณ์ฐ์ ์ํํ๊ธฐ๋ ์ ์ ๊ฐ์ return ํด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณ์ฐ๋๊ธฐ ์ ์ ๊ฐ์ return ํ๋ ์ํฉ์ด ๋ํ๋ฉ๋๋ค. ์ ๊ฐ ์์ ํ๋ ์ฝ๋๋ฅผ ์์๋ก ๋ณด๊ฒ ์ต๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function weatherFunction(callback) { request(url,function(err,response,body) { if(err) console.log(err); else { var obj = JSON.parse(body); var weatherObj = {"img":"rain.gif", "temp":obj.main.temp}; callback(weatherObj) } }); } exports.weatherFunction = weatherFunction; |
else๋ถ๋ถ์์ weatherObj๋ผ๋ JSON ํ์ ์ Object๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด Object๋ฅผ Server๋ก ์ ๋ฌํฉ๋๋ค.
App.js
1 2 3 4 5 6 | app.get('/forecast',function(req,res){ weather.weatherFunction(function(data){ res.render('forecast',{data:JSON.stringify(data)}); console.log(data); }) }); | cs |
์ ์ฒด ์ฝ๋๋ฅผ ๋ค ์ฐ์ง ์์์ต๋๋ค. forecast๋ผ๋ ๋ผ์ฐํฐ๋ก ์ ์์ ํ์ ๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ์์์ ์ ๋ฌํ๋ Object ๊ฐ์ client๋จ์ผ๋ก ๋๊ฒจ์ฃผ๋ ์ฝ๋์ธ๋ฐ ๋๊ฒจ์ฃผ๋๊ฑด ๋์งธ์น๊ณ console.log๋ก ์ฐํ๋ ๊ฐ๋ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
temp๊ฐ ๋์จ ๊ฒฝ์๋ ์ ๊ฐ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ API๋ฅผ ์ด๊ฑฐ๋ผ ์์ ๋ด์ฉ์๋ ์๋ต๋์์ง๋ง ์ผ๋จ ๋ญ๊ฐ๋๋ ์ ๋์ด์๋ค๊ณ ๋ณผ ์ ์๊ฒ ์ต๋๋ค. ๊ทธ๋ผ callbackํ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
์ฝ๋๋ฅผ return ํ์์ผ๋ก ์ด์ง ๋ฐ๊ฟ๋ณด๋ฉด
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function weatherFunction() { var obj; var weatherObj; request(url,function(err,response,body) { if(err){ weatherObj = {"img":"err","temp":"err"}; } else { obj = JSON.parse(body); weatherObj = {"img":"rain.gif", "temp":obj.main.temp}; } }); return weatherObj; } exports.weatherFunction = weatherFunction; | cs |
๊ทธ๋ฌ๋ฉด ์๋ฒ์ชฝ์์๋ ํด๋น ํจ์๋ฅผ ์คํ ํ์ ๋ ๋ฆฌํด ๋๋ ๊ฐ์ด ์์ผ๋ฆฌ๋ผ ์ถ์ธก๋๋ฏ๋ก ์ด๋ฐ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ์ต๋๋ค.
App.js
1 2 3 4 | app.get('/forecast',function(req,res){ res.render('forecast',{data:JSON.stringify(weather.weatherFunction())}); console.log(weather.weatherFunction()); }); | cs |
์๊น๋ ์๋ฌ๊ฐ ๋์ง ์์์ผ๋ฏ๋ก ๋น์ฐํ else๋ถ๋ถ์ด ์คํ๋ ๊ฒ์ด๊ณ ๊ทธ๋ ๋ค๋ฉด weatherObj๊ฐ์ด ๋ฆฌํด๋๋ฆฌ๋ผ ์๊ฐ์ด ๋ญ๋๋ค. ๊ทธ๋์ ์คํ์ ์์ผ๋ณด์๋๋
undefined์ด ๋์๋ฒ๋ฆฝ๋๋ค. ๋ถ๋ช
ํ returnํ๊ธฐ ์ ์ ๊ฐ์ ๋ช
์ํ๊ณ return์ ์์ผฐ๋๋ฐ ๊ฐ์ด ์์ต๋๋ค. ๊ทธ๋์ Node.js์์๋ ๊ฐ์ returnํ๋ ํ์์ด ์๋ callback์ ํํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ ํจ์์ ์ ์ธ๋ถ ์ฐจ์ด๋ฅผ ๋ณด๋ฉด
function weatherFunction(callback)
function weatherFunction()
๋งค๊ฐ๋ณ์๋ก callback์ด๋ผ๋ ๊ฒ์ด ์ฐจ์ด๊ฐ ๋ฉ๋๋ค. ๋งจ ์ฒ์์ ๊ณต์ํํ์ด์ง์์ ๋์๋ ๋ง ์ค์ ์ด๋ฐ ๋ง์ด ์์์ต๋๋ค.
๊ฐ ์ฐ๊ฒฐ์์ ์ฝ๋ฐฑ์ด ์คํ๋๋๋ฐ ์คํํ ์์ ์ด ์๋ค๋ฉด Node๋ ๋๊ธฐํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ํ์ํ ๋งค๊ฐ๋ณ์ ์ด์ธ์ callback์ด๋ผ๋ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ ์ ์๋๋ฐ ์ด๋ ์์ ํตํด ๊ฐ์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
forecastFunction
callback(weatherObj)
app.js
forecastํจ์์์๋ ๋งค๊ฐ๋ณ์๋ก ๋๊ธธ ๊ฐ์ธ weatherObj๋ฅผ ๋ฃ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์๋ฒ์ชฝ์์ ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์์๊ฐ์ด ์ ์ธํ๊ฒ ๋ฉ๋๋ค.
weatherFunction์ ์ฌ์ฉํ ๋ ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ ์ ๊ธฐ์ ์๋ data๋ผ๋ ๋งค๊ฐ๋ณ์๊ฐ forecastFunction ์์ ๋๊ฒจ์ค weatherObj๊ฐ ๋ฉ๋๋ค.
ํจ์์์ ๊ฐ์ ๋ฆฌํดํด์ค๋ค๋ ๊ฒ์ ๊ต์ฅํ ๋ง์ด ์ฐ์ด๋ ์ผ์ด๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ๋ก ์งํ๋๋ ํ๋ก์ธ์ค์์ callback์ ํ์์ ์ ๋๋ค.
๊ทธ๋์ ๊ทธ๊ฒ๋ ๋ชจ๋ฅด๊ณ ๋๋์ฒด ๊ฐ์ด ์ ์ ๋์ค๋๊ฑด๊ฐ ํํ๋ ์ฐธ ๋ง์ดํ๋๋ฐ ์ด์ ์ผ ์ชผ๊ธ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ๋ค์..ใ ใ
'Node.js > Node.js ์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
session์ผ๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (Sequelize DB ํ์ฉ) (0) | 2018.10.23 |
---|---|
sementic url ์ ์ฉํด๋ณด๊ธฐ (0) | 2018.10.10 |
์ด๋ฏธ์ง url๊ณผ ํ์ผ์์คํ ์ ํตํ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ (Flickr API ์ฌ์ฉ) (0) | 2018.09.05 |
node js async ๋ชจ๋ ์ฌ์ฉํ๊ธฐ (0) | 2018.07.20 |
node js ๋ฅผ ์ด์ฉํ ์น ์ปดํ์ผ๋ฌ ๋ง๋ค๊ธฐ (7) | 2018.05.17 |
- Total
- Today
- Yesterday
- NestJS
- Promise error
- ๊ธฐ์์ฒญAPI
- nestjs config
- android
- node.js backend
- nestjs typeorm
- sequelize
- JavaScript
- foreignkey
- @nestjs/config
- nestjs directory
- Request_Limit_Exceeded
- ํ๋ก๊ทธ๋๋จธ์ค
- nestjs configService
- DeferredResult
- nestjs module
- ๋น๋๊ธฐ ์์ฒญ
- ์๊ณ ๋ฆฌ์ฆ
- backend-framework
- nestjs/cli
- nestjs project
- node.js
- docker mysql
- typeorm
- Promise bulk
- Spring Async
- nestjs doc
- Spring
- typeorm ์ฐ๊ฒฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |