origin(์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์)์ ๊ฐ๋ก์ง๋ฅผ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด ์ค ๊ฒ์ธ๊ฐ.
Yes
- ์์ฒญ ๊ฐ๋ฅ
No
- ์์ฒญ ๋ถ๊ฐ -> ๋ธ๋ผ์ฐ์
๊ฐ ์๋ ํ๊ฒฝ(๋ชจ๋ฐ์ผ, ์ฑ, ๋ฐฑ์ค๋ ๋ฑ..)์์ API ์์ฒญํ๋ฉด ๊ฐ๋ฅํจ.
axios์์๋ apollo ์ฒ๋ผ ํ์ด์ง๊ฐ ๋ง์ดํธ ๋ ๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฟ๋ ค์ฃผ๊ธฐ ์ํด์ React-Query๋ฅผ ์ฌ์ฉํ๋ค. react-query๋ ์ค์น ๋ฐ ์ธํ ์ด ํ์ํด์ ์ ๋ฌธ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๊ณค ํ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฆ์ฟผ๋ฆฌ ๊ฐ์ api๋ก ๋ฐฑ์๋์ ์์ฒญํ๋ฉด ๋ฐฑ์๋๊ฐ DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๋ค์ค๋ค. ์ด ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์
์ฒ๋ผ 1. ํ ํ์
์ด๊ฑฐ๋ 2. ๊ฐ์ฒด ํํ๋ก ์ ์ฅ์ด ๋์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋จ ํ์
์ผ ์ ์๋ค.
1. ํ (table) ํ์
์ SQL(์ํ/์์คํ์)
,
2. ๊ฐ์ฒด ํํ๋ก ์ ์ฅ์ด ๋์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋จ
์ NoSQL(๋
ธ์ํ/๋
ธ์์คํ์)
์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
1. SQL
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ
์ด๋ธ(Table)
์์ ๊ฐ๊ฐ์ ํ(row)
๋ค์ด ์ ์ฅ๋์ด ์๋ ํํ์ด๋ค.
2. NoSQL
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ A4์ฉ์ง์ ๊ฐ์ฒด ํํ๋ก ๊ธ์๋ฅผ ์ ์ด๋๋ ํํ๋ผ๊ณ ํ ์ ์๋ค. ์ด A4์ฉ์ง๋ฅผ ๋ด๊ณ ์๋ ์๋ฅ๋ดํฌ๊ฐ ์๋๋ฐ ์ด๊ฒ์ Collection
์ด๋ผ๊ณ ํ๊ณ A4์ฉ์ง ํ์ฅ ํ์ฅ์ Document(๋ฌธ์)
๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฐ๋ผ์ NoSQL์ ์ปฌ๋ ์
์์ ๋ํ๋จผํธ๊ฐ ์ ์ฅ๋์ด ์๋ ํํ์ด๋ค.
Table
= Collection
Row
= Document
๋ผ๊ณ ํ ์ ์๋ค.
๋ํ SQL
์ RDB (Relational Database)
๋ผ๊ณ ๋ ๋ถ๋ฅด๊ณ
NoSQL
์ Document Database
๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ๋ฅ : Oracle, MySQL, PostgresQL ...
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ๋ฅ : MongoDB, Firebase, Redis ...
๋ฐฑ์๋์์๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ฃ์ด์ฃผ๋ ๋ฑ์ ์์ ์ ํ๋๋ฐ ์ด๋ ์ํ๋ ๋ช ๋ น์ด๋ค์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ ์๋ค.
SQL
- ORM (Object Relation Mapping)
NoSQL
- ODM (Object Document Mapping)
์ด๋ค.
(SQL ์ Relation ์์ ๋ฐ์จ R
๊ณผ NoSQL์ Document์์ ๋ฐ์จ D
๋ฅผ ์๊ฐํ๋ฉด ์ ์ถํ๊ธฐ ์ฝ๋ค. )
๊ทธ๋ ๋ค๋ฉด ์ด๋ค์ ์ด๋ป๊ฒ ๋ช ๋ น์ด๋ฅผ ๋ง๋ค์ด ์ค๊น?
๊ฐ์ฒด๋ฅผ ํ๋ ๋ง๋ค์ด ๋๊ณ Board.find()
๋ผ๊ณ ํ๋ฉด ์์์ ์ฒ๋ฆฌํด์ค๋ค.
๋ฑ๋ก์ Board.insert({writer : ""})
์ด๋ฐ์๊ธ๋ก ํ๋ฉด ์์์ ์ฒ๋ฆฌํด์ค๋ค.
ORM ์ ์ข ๋ฅ๋ก๋ sequalize(javascript), typeorm(typescript), prisma ๋ฑ์ด ์๊ณ , ODM ์ ์ข ๋ฅ๋ก๋ Mongoose(MongoDB) ๋ฑ์ด ์๋ค.
1. DB ์ ์ํ๊ธฐ (์์ ๋ฐ์ดํฐ ํ์ธ)
2. ๋๋ง์ DB ์ ์ํ๊ธฐ
3. Backend(node.js๋ก ์คํ์ํค๋ JS) ์์ DB ์ ์ํ๊ธฐ
4. Backend์์ ์์ค์ฝ๋ ์์ฑํ๊ธฐ
5. API ๋ง๋ค๊ธฐ
Node.js
๋ฅผ ์ฌ์ฉํด์ ๋ธ๋ผ์ฐ์ ๋ง๊ณ ๋ด ์ปดํจํฐ์์ ์คํ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค. (node --version
์ผ๋ก ์ค์น ์ฌ๋ถ๋ฅผ ํ์ธ ๊ฐ๋ฅํ๋ค.)
๋
ธ๋๋ฅผ ์ค์นํ๊ณ ๋๋ฉด node aaa.js
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ node์คํ๊ธฐ๋ก aaa.js๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํฌ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๋ด ์ปดํจํฐ์์ ์คํ์ํจ ๊ฒ์ด๋ค. ์ด๋ ๋
ธ๋๊ฐ ๋์ค๊ณ ๋์๋ถํฐ ๊ฐ๋ฅํด์ก๋ค. ๋
ธ๋๊ฐ ๋ํ๋๊ณ ๋์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ js๋ก ๋ฐ๋ก ๊ฐ๋ฅํ๋ค๋ ํฐ ์ฅ์ ์ด ์๊ฒผ๋ค.
yarn add typescript --dev
๋ก ํ์
์ค๋ฆฝํธ ์ค์นyarn add typeorm
๋ก typeorm ์ค์นyarn add pg
typeorm์ด postgres๋ ์ฐ๊ฒฐํ๊ธฐ ์ฝ๊ฒ ๋์์ฃผ๋ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํด์ฃผ์. (database๊ฐ ์๋๋ค.)tsconfig.json
์ถ๊ฐ {
"compilerOptions": {
"target": "ES2015",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Recommended"
}
์ด๋ node index.ts
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ฒ ๋๋ฉด typescript๋ฅผ node์์ ์คํํ๋ ๋ถ๋ถ์์ ์๋ฌ๊ฐ ์๊ธด๋ค.
node:internal/errors:465
ErrorCaptureStackTrace(err);
^
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/yiwoojung/Desktop/codecamp-frontend-06/class_backend/index.ts
at new NodeError (node:internal/errors:372:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:76:11)
at defaultGetFormat (node:internal/modules/esm/get_format:118:38)
at defaultLoad (node:internal/modules/esm/load:21:20)
at ESMLoader.load (node:internal/modules/esm/loader:407:26)
at ESMLoader.moduleProvider (node:internal/modules/esm/loader:326:22)
at new ModuleJob (node:internal/modules/esm/module_job:66:26)
at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:345:17)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:304:34)
at async Promise.all (index 0) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ts-node-dev
๋ฅผ ์ค์นํ์.
๊ทธ๋ฆฌ๊ณ node index.ts
๋ช
๋ น์ด ๋์ yarn dev
๋ฅผ ํด์ฃผ์.