๐๋ชฉํ: RDB(MySQL) ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, JWT, Express Middleware๋ฅผ ์ด์ฉํ ์ธ์ฆ ๋ก์ง ์ถ๊ฐ
- API ๋ช ์ธ์๋ฅผ ์์ฑํ์ฌ, ****์ต์ข ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฏธ๋ฆฌ ํ์ ํฉ๋๋ค.
- MySQL, Prisma๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํ๊ณ ํ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํตํด ERD ์์ฑ
- Prisma๋ฅผ ์ด์ฉํ ๋ง์ด๊ทธ๋ ์ด์ ์ฝ๋ ๋ฐ ์คํค๋ง ์ฝ๋ ์์ฑ
- JOIN์ ํตํด ๋ค๋ฅธ Table์ ๋ฐ์ดํฐ์ ๊ฒฐํฉ
- ์ธ์ฆ ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
- JWT(AccessToken)์ ์ดํด
- ํ์๊ฐ์ API, ๋ก๊ทธ์ธ API, ๋ด ์ ๋ณด ์กฐํ API, ์ธ์ฆ Middleware ๊ตฌํ
- ์ํ ๊ด๋ จ ๊ธฐ๋ฅ์ ์ธ์ฆ ๋ก์ง ์ถ๊ฐ
๐ ๊ธฐ์ ์คํ
- ์น ํ๋ ์์ํฌ Node.js์ ๋ํ์ ์ธ ์น ํ๋ ์์ํฌ์ธ Express๋ฅผ ์ด์ฉํฉ๋๋ค.
- ํจํค์ง ๋งค๋์
npm ๋๋ yarn ์ค ํธํ๊ฒ์ ์ด์ฉํฉ๋๋ค.
- ๐จ ์ฃผ์์ฌํญ
- ๋ ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํด๋ ์ข์ง๋ง, ํผ์ฉํด์ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค.
package-lock.json
,yarn.lock
์ด ๋์์ ์์ผ๋ฉด ์๋ฉ๋๋ค. (์๋์ ๋ค๋ฅธ ๋์์ ์ผ์ผํฌ ์ ์์ต๋๋ค.)
- ๐จ ์ฃผ์์ฌํญ
- ๋ชจ๋ ์์คํ
๊ธฐ๋ณธ ๋ชจ๋ ์์คํ
(CommonJS, type: "commonjs") ๋๋
ES6 ๋ถํฐ ๋์
๋ ๋ชจ๋ ์์คํ
(ESModule, type: "module")์ ์ด์ฉํฉ๋๋ค.
- ๐จ ์ฃผ์์ฌํญ
- ๋ ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํด๋ ์ข์ง๋ง, ํผ์ฉํด์ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค.
require/exports
์import/export
๊ฐ ๋์์ ์์ผ๋ฉด ์๋ฉ๋๋ค.
- ๐จ ์ฃผ์์ฌํญ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ จ ์ฃผ์ฐจ ๊ฐ์ ํ๋ฐ์์ ๋ค๋ฃฌ MySQL์ ์ฌ์ฉํฉ๋๋ค. ์ง์ ์ค์นํ์ง ์๊ณ , Cloud ์๋น์ค์ธ AWS RDS๋ฅผ ์ด์ฉํฉ๋๋ค.
- ORM(Object Relational Mapping) MySQL์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ฐ๊ฒ ํด์ฃผ๋ Prisma๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- DATABASE_URL
- TOKEN_SECRET_KEY
-
์ํธํ ๋ฐฉ์
- ๋น๋ฐ๋ฒํธ๋ฅผ DB์ ์ ์ฅํ ๋ Hash๋ฅผ ์ด์ฉํ๋๋ฐ, Hash๋ ๋จ๋ฐฉํฅ ์ํธํ์ ์๋ฐฉํฅ ์ํธํ ์ค ์ด๋ค ์ํธํ ๋ฐฉ์์ ํด๋นํ ๊น์?
=> ๋จ๋ฐฉํฅ์ ๋๋ค.
- ๋น๋ฐ๋ฒํธ๋ฅผ ๊ทธ๋ฅ ์ ์ฅํ์ง ์๊ณ Hash ํ ๊ฐ์ ์ ์ฅ ํ์ ๋์ ์ข์ ์ ์ ๋ฌด์์ธ๊ฐ์?
=> hashํ ๋น๋ฐ๋ฒํธ์ ๋ฌธ์์ด์ ๋ฐ์๋, ์๋ ๋น๋ฐ๋ฒํธ๊ฐ ๋ฌด์์ธ์ง ๋ณตํธํํ ์ ์์ด์ ๋ณด์์ ๊ฐํฉ๋๋ค.
-
์ธ์ฆ ๋ฐฉ์
- JWT(Json Web Token)์ ์ด์ฉํด ์ธ์ฆ ๊ธฐ๋ฅ์ ํ๋๋ฐ, ๋ง์ฝ Access Token์ด ๋ ธ์ถ๋์์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ฌด์์ผ๊น์?
=> ํดํน์ ๋นํด์, ๊ฒฐ์ ์ ๋ณด๋ ๊ฐ์ธ์ ๋ณด๋ฑ ํผํด๋ฅผ ์ ์ ์ ์์ต๋๋ค.
- ํด๋น ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด๋ค ๊ฒ์ด ์์๊น์?
=> Token์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ฌ์ ์์๋ก token์ ์๋ก ๋ฐ๋๋ก ํ๊ฑฐ๋, ์ธ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
-
์ธ์ฆ๊ณผ ์ธ๊ฐ
- ์ธ์ฆ๊ณผ ์ธ๊ฐ๊ฐ ๋ฌด์์ธ์ง ๊ฐ๊ฐ ์ค๋ช ํด ์ฃผ์ธ์.
=> ์ธ์ฆ์ ๋ก๊ทธ์ธ, ์ธ๊ฐ๋ API๋ง๋ค ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๊ฒ ํ ๊ฒ. ์ฌ์ฉ์ ์ธ์ฆ ๋ฏธ๋ค์จ์ด๋ก ๊ตฌํํ์์ต๋๋ค.
- ๊ณผ์ ์์ ๊ตฌํํ Middleware๋ ์ธ์ฆ์ ํด๋นํ๋์? ์ธ๊ฐ์ ํด๋นํ๋์? ๊ทธ ์ด์ ๋ ์๋ ค์ฃผ์ธ์.
=> ์ธ๊ฐ์ ๋๋ค. ๊ทธ๊ฑธ ์ด์ฉํด์ ๋ก๊ทธ์ธ์ ํ ์ฌ์ฉ์์ธ์ง ๊ฒ์ฌํ ์ ์์์ต๋๋ค.
-
Http Status Code
- ๊ณผ์ ๋ฅผ ์งํํ๋ฉด์ ์ฌ์ฉํ Http Status Code๋ฅผ ๋ชจ๋ ๋์ดํ๊ณ , ๊ฐ๊ฐ์ด ์๋ฏธํ๋ ๊ฒ๊ณผ ์ด๋ค ์ํฉ์ ์ฌ์ฉํ๋์ง ์์ฑํด ์ฃผ์ธ์.
=> POST(ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ์ด๋ ฅ์ ์์ฑ), GET(๋ด ์ ๋ณด ์กฐํ, ๋ชจ๋ ์ด๋ ฅ์ ๋ชฉ๋ก ์กฐํ, ์ด๋ ฅ์ ์์ธ์กฐํ), PATCH(์ด๋ ฅ์ ์์ ), DELETE(์ด๋ ฅ์ ์ญ์ )
-
๋ฆฌํฉํ ๋ง
- MySQL, Prisma๋ก ๊ฐ๋ฐํ๋๋ฐ MySQL์ MongoDB๋ก ํน์ Prisma ๋ฅผ TypeORM ๋ก ๋ณ๊ฒฝํ๊ฒ ๋๋ค๋ฉด ๋ง์ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ ๊น์? ์ฃผ๋ก ์ด๋ค ์ฝ๋์์ ๋ณ๊ฒฝ์ด ํ์ํ๊ฐ์?
=> ์๋ง ์คํค๋ง์ ํ์์ ๋ง์ด ๋ฐ๊ฟ์ผํ ๊ฒ ๊ฐ์ต๋๋ค. - ๋ง์ฝ ์ด๋ ๊ฒ DB๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ฐ์ํ์ ๋, ์ฝ๋ ๋ณ๊ฒฝ์ ๋ณด๋ค ์ฝ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ข์ ์ง ์๊ฐ๋๋ ๋ฐฉ์์ด ์๋์? ์๋ค๋ฉด ์์ฑํด ์ฃผ์ธ์.
=> API๋ช ์ธ์๋ ERD๋ฅผ ๊ผผ๊ผผํ ์จ๋๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
-
API ๋ช ์ธ์
- notion ํน์ ์์ ์ ์์ฑํ์ฌ ์ ๋ฌํ๋ ๊ฒ ๋ณด๋ค swagger ๋ฅผ ํตํด ์ ๋ฌํ๋ฉด ์ฅ์ ์ ๋ฌด์์ผ๊น์?
=> ํ๋ก ํธ์๋์ ํ์ ์ด ์์ํด์ง๋๋ค.