์ค๋์ ์ค๋ฌด์์ node ๊ธฐ๋ฐ์ API ๊ฐ๋ฐ์ ํ๋ฉด์ ๊ณ ๋ฏผํ์๋ ์๋ต์ฒ๋ฆฌ์ ์ด๋ฅผ ํด๊ฒฐํ์๋ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ๋ํด์ ํฌ์คํ
ํฉ๋๋ค.
์ด๋๋ ๊ฐ์ด ํ์
ํ๊ณ ์๋ ํ๋ก ํธ์๋ ์์ง๋์ด๋ถ์ด ์๋ต ๋ฐ์ดํฐ์ค์์ ํน์ ์์ฑ ๊ฐ์ด null ์ธ ๊ฒฝ์ฐ๋ ๋น๊ฐ์ผ๋ก ์นํํด ๋ฌ๋ผ๊ณ ์์ฒญ์ ๋ฐ๊ฒ๋์์ต๋๋ค. API ๋ฐ์ดํฐ์์ null ๊ฐ์ด ๋ด๋ ค์ ํ๋ก ํธ์์ ์๋ฌ๊ฐ ๋๋ค๋ ๋ด์ฉ๊ณผ ํจ๊ป.. ํน์ ์์ฑํ๋๋ DB ๊ฐ์ null ์ด๊ฒ ์ง๋ง ์๋ต์์๋ ๋น๊ฐ์ผ๋ก ์นํํด๋ฌ๋ผ๋ ์์ฒญ์ด์๋ ๊ฑฐ์ฃ .
์์ฒญ์ ๋ฐ๊ณ ๋น์ ์ข ๊ณ ๋ฏผ์ ํ์์ต๋๋ค. ๊ณผ์ฐ null ๊ฐ์ ์๋ตํ๋ ๊ฒ์ด ๋ถ์ ์ ํ๊ฐ? ์ ๋ํ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๊ทธ๋ ๊ฒ ์๊ฐ์ด ๋ค์๋ ์ด์ ๋.. ํ์ฌ ์ฑํํ ์คํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ NoSQL DB ๊ฐ ์๋ SQL DB์ธ MySql ์ด์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฐจ์ด์ ์ ์กฐ๊ธ ์ดํด๋ณด๋ฉด..
SQL (๊ด๊ณํDB) ์ ๋ฐ์ดํฐ๋ ์ ํด์ง ๋ฐ์ดํฐ ์คํค๋ง์ ๋ฐ๋ผ ํ
์ด๋ธ์ ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ค์ํ๊ฑด SQL ์ ์ง์ ๋ ํ์ด ์๋ค๋ ์ ์
๋๋ค. ์คํค๋ง๋ฅผ ์ค์ํ์ง ์์ ๋ ์ฝ๋๋ค์ ํ
์ด๋ธ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
๋ฐ๋ฉด NoSQL (๋น๊ด๊ณํ DB)๋ ๋ง ๊ทธ๋๋ก SQL(๊ด๊ณํ DB) ์๋ ๋ฐ๋์
๋๋ค. ์คํค๋ง๋ ์๊ณ ๊ด๊ณ๋ ์์ต๋๋ค. NoSQL ์์๋ ๋ ์ฝ๋๋ฅผ ๋ฌธ์(documents) ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด๊ฒ์ ๋จ์ํ ์ด๋ฆ๋ง ๋ค๋ฅธ ๊ฒ์ด ์๋๋ผ, ํต์ฌ์ ์ธ ์ฐจ์ด์ ์ด ์์ต๋๋ค. SQL ์ธ์์์๋ ์ ํด์ง ์คํค๋ง๋ฅผ ๋ฐ๋ฅด์ง ์๋๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง, NoSQL ์์๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ปฌ๋ ์
(=SQL์์์ ํ
์ด๋ธ)์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ์๋ ๋น์ ์ด์๋ฐ๋ผ API ์๋ต๋ฐ์ดํฐ๋ ์ฐจ์ด๊ฐ ์์ด์ผ ํ์ง ์์๊น? ๋ผ๊ณ ์๊ฐ์ด ๋ค์์ต๋๋ค. SQL ์์๋ ๊ฐ์ด ์๋ ์๋ ์ง์ ๋ ์คํค๋ง์ ์์๋ฐ์ดํฐ๊ฐ ์๋ต๋๋๊ฒ ๋ง๋ค๋ ์๊ฐ์ด ๋ค์๊ณ . ๋ฐ๋ฉด NoSQL ์์๋ ์์ฑ๊ฐ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด response ์์ ์๋ตํด์ผ ํ๋ค๋ ์๊ฐ์ ๊ฐ๊ณ ์์์ต๋๋ค.
์ง๊ธ ์๊ฐํด๋ณด๋ฉด ๋น์์๋ REST API ์ ๋ํ ๊ฐ๋
์ด ์กฐ๊ธ ๋ถ์กฑํ๋๊ฑฐ ๊ฐ์ต๋๋ค..๐ฅฒ
ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ๋๋นํํ๋ฅผ ์์ ์๊ฒ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ํ์๊ฐ ์์์๊น?.. ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.
์ด์จ๋ ๋น์์ ์
๋ฌด์ ์์ฒญ์ ์์ฉํ๊ณ ์ถ์๊ณ ๊ทธ๋์ ๊ทธ๋์ ์๋ต๋ฐ์ดํฐ๋ค์ค null ๊ฐ์ ๊ฐ์ง ์์ฑ์ด ์๋ค๋ฉด ๋น๊ฐ์ผ๋ก ์นํํด ์ฃผ๋ ์์
์ ์งํํ๊ฒ ๋์์ต๋๋ค.
์ฌ์ค express ์์๋ json null ํ๋๋ฅผ response ์์ ์๋ตํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๊ณตํฉ๋๋ค.
const app = express()
// JSON null ํ๋ ์๋ต
app.set('json replacer', (k, v) => (v === null ? undefined : v))
์ด๋ ๊ฒ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์๋๋ฐ...
์ ๊ธธ... ๋
ธ๋์ express์ ์ํ๊ณ๋ฅผ ์ ๋๋ก ์๋ จํ์ง ๋ชปํ ์ด๋ณด์์ธ ํ์๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ง๊ธฐ ์์ํ์์ต๋๋ค.
๊ฐ์ฒด์ ์์ฑ๊ฐ์ ์ ๊ทผํ์ฌ ์นํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ฌ ๊ฒฐ๊ตญ ์์ฒญ์ ์์ฉํ์์ต๋๋ค. ๐ฅฒ ๋ชจ๋ฅด๋ฉด ๋ชธ์ด ๊ณ ์ํ๋ค๋ ๋ง์ ์ด๋ฐ ์ํฉ์ ๋๊ณ ํ๋ ๋ง์ธ๊ฑฐ ๊ฐ๋ค์
ํ์๋ ๊ฐ์ ๊ตฌํ๋ utils ํด๋์ค์ ํจ์๋ฅผ ๊ตฌํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋๋ฐ์.
๊ตฌํ ํ๋ ์ฝ๋๋ฅผ ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
const ValueUtils = {}
ValueUtils.empty = (str, includeBlank = true) => {
const empty = str === null || str === undefined || (includeBlank && str === '')
return empty
}
ValueUtils.nvl = (str, defaultValue = '') => {
if (ValueUtils.empty(str)) { return defaultValue }
return str
}
ValueUtils.clearNull = (obj, defaultValue = '') => {
if (ValueUtils.empty(obj)) {
return ValueUtils.nvl(obj, defaultValue)
}
if (Array.isArray(obj)) {
obj.forEach((el) => ValueUtils.clearNull(el, defaultValue))
return obj
}
Object.keys(obj).forEach((key) => {
if (Array.isArray(obj[key])) {
obj[`${key}`] = ValueUtils.clearNull(obj[key], defaultValue)
} else {
obj[`${key}`] = ValueUtils.nvl(obj[key], defaultValue)
}
})
return obj
}
module.exports = ValueUtils
clearNull ์ด๋ ํจ์๋ ์ ๋ฌ๋ obj ์ ์์ฑ์ ์ ๊ทผํ์ฌ ์์ฑ์ด ๋น์ด์๋ ๊ฐ์ ์นํํด ์ฃผ๋ ์ญํ ์ ํ๋ ํจ์์
๋๋ค.
- ์ ๋ฌ๋ ์์ฑ์ด ์๋์ง ํ์ธ
- ์์ฑ์ด ๋ฐฐ์ด์ธ์ง ํ์ธ -> ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ๋ ์์์ ์ ๊ทผํ์ฌ ์ฌ๊ทํธ์ถ
- Object ์ธ ๊ฒฝ์ฐ๋ ์์ฑ๊ฐ์ด ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ๋ ์์์ ์ ๊ทผํ์ฌ ์ฌ๊ทํธ์ถ, ๋ฐฐ์ด์ด ์๋๊ฒฝ์ฐ๋ฅผ ์นํ๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ก์ง์
๋๋ค.
nvl ํจ์ ์ค๋ผํด์์ ์ฌ์ฉ๋๋ NULL ์ฒ๋ฆฌ ํจ์๋ก์ data ๊ฐ์ด null ๊ฐ์ผ ๋ ์์ ์ค์ ๊ฐ์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ํจ์๋ฅผ ๊ตฌํํ์์ต๋๋ค.
์ ํจ์๋ฅผ ์ฌ์ฉํ๊ฒ๋๋ฉด ์๋์ ๊ฐ์ด ์๋ต๋ฐ์ดํฐ์ค null, undefined, ๋น๊ฐ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ๊ฐ์ผ๋ก ์นํํด์ฃผ๋ ์์
์ ์์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ๐
exports.get = async (documentId) => {
try {
const responseModel = await Document.findById(documentId)
return ValueUtils.clearNull(responseModel)
} catch (err) {
throw err
}
}
'๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ ฝ Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Factory Design Pattern 2 (0) | 2022.09.23 |
---|---|
Factory Design Pattern 1 (0) | 2022.09.21 |
Retry Promise Design Pattern (0) | 2022.09.20 |
Promise.all ๋ณ๋ ฌ ์คํ (0) | 2022.09.19 |
return vs return await ํจ์ (0) | 2022.09.19 |