๐Ÿ“ข ๊ฐœ์š”

๐Ÿ๋ชฉํ‘œ: RDB(MySQL) ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, JWT, Express Middleware๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ ๋กœ์ง ์ถ”๊ฐ€

  1. API ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ, ****์ตœ์ข…์  ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
  2. MySQL, Prisma๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํ†ตํ•ด ERD ์ž‘์„ฑ
    • Prisma๋ฅผ ์ด์šฉํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฝ”๋“œ ๋ฐ ์Šคํ‚ค๋งˆ ์ฝ”๋“œ ์ž‘์„ฑ
    • JOIN์„ ํ†ตํ•ด ๋‹ค๋ฅธ Table์˜ ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉ
  3. ์ธ์ฆ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • JWT(AccessToken)์˜ ์ดํ•ด
    • ํšŒ์›๊ฐ€์ž… API, ๋กœ๊ทธ์ธ API, ๋‚ด ์ •๋ณด ์กฐํšŒ API, ์ธ์ฆ Middleware ๊ตฌํ˜„
    • ์ƒํ’ˆ ๊ด€๋ จ ๊ธฐ๋Šฅ์— ์ธ์ฆ ๋กœ์ง ์ถ”๊ฐ€

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

  1. ์›น ํ”„๋ ˆ์ž„์›Œํฌ Node.js์˜ ๋Œ€ํ‘œ์ ์ธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ธ Express๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € npm ๋˜๋Š” yarn ์ค‘ ํŽธํ•œ๊ฒƒ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๐Ÿšจ ์ฃผ์˜์‚ฌํ•ญ
      • ๋‘˜ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋„ ์ข‹์ง€๋งŒ, ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
      • package-lock.json, yarn.lock์ด ๋™์‹œ์— ์žˆ์œผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. (์˜๋„์™€ ๋‹ค๋ฅธ ๋™์ž‘์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
  3. ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ(CommonJS, type: "commonjs") ๋˜๋Š” ES6 ๋ถ€ํ„ฐ ๋„์ž… ๋œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ(ESModule, type: "module")์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๐Ÿšจ ์ฃผ์˜์‚ฌํ•ญ
      • ๋‘˜ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋„ ์ข‹์ง€๋งŒ, ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
      • require/exports์™€ import/export๊ฐ€ ๋™์‹œ์— ์žˆ์œผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ™๋ จ ์ฃผ์ฐจ ๊ฐ•์˜ ํ›„๋ฐ˜์—์„œ ๋‹ค๋ฃฌ MySQL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , Cloud ์„œ๋น„์Šค์ธ AWS RDS๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  5. ORM(Object Relational Mapping) MySQL์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” Prisma๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ๋ณ€์ˆ˜

  • DATABASE_URL
  • TOKEN_SECRET_KEY

API ๋ช…์„ธ์„œ URL

ERD URL

๋” ๊ณ ๋ฏผํ•ด ๋ณด๊ธฐ

  1. ์•”ํ˜ธํ™” ๋ฐฉ์‹

    • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ DB์— ์ €์žฅํ•  ๋•Œ Hash๋ฅผ ์ด์šฉํ–ˆ๋Š”๋ฐ, Hash๋Š” ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์™€ ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์ค‘ ์–ด๋–ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์— ํ•ด๋‹นํ• ๊นŒ์š”?

    => ๋‹จ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

    • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋ƒฅ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  Hash ํ•œ ๊ฐ’์„ ์ €์žฅ ํ–ˆ์„ ๋•Œ์˜ ์ข‹์€ ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

    => hashํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ๋ฌธ์ž์—ด์„ ๋ฐ›์•„๋„, ์›๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†์–ด์„œ ๋ณด์•ˆ์— ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ธ์ฆ ๋ฐฉ์‹

    • JWT(Json Web Token)์„ ์ด์šฉํ•ด ์ธ์ฆ ๊ธฐ๋Šฅ์„ ํ–ˆ๋Š”๋ฐ, ๋งŒ์•ฝ Access Token์ด ๋…ธ์ถœ๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

    => ํ•ดํ‚น์„ ๋‹นํ•ด์„œ, ๊ฒฐ์ œ์ •๋ณด๋‚˜ ๊ฐœ์ธ์ •๋ณด๋“ฑ ํ”ผํ•ด๋ฅผ ์ž…์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํ•ด๋‹น ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ์„๊นŒ์š”?

    => Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ์ค„์—ฌ์„œ ์ˆ˜์‹œ๋กœ token์„ ์ƒˆ๋กœ ๋ฐ›๋„๋ก ํ•˜๊ฑฐ๋‚˜, ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ธ์ฆ๊ณผ ์ธ๊ฐ€

    • ์ธ์ฆ๊ณผ ์ธ๊ฐ€๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ๊ฐ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

    => ์ธ์ฆ์€ ๋กœ๊ทธ์ธ, ์ธ๊ฐ€๋Š” API๋งˆ๋‹ค ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ๊ฒƒ. ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ๊ณผ์ œ์—์„œ ๊ตฌํ˜„ํ•œ Middleware๋Š” ์ธ์ฆ์— ํ•ด๋‹นํ•˜๋‚˜์š”? ์ธ๊ฐ€์— ํ•ด๋‹นํ•˜๋‚˜์š”? ๊ทธ ์ด์œ ๋„ ์•Œ๋ ค์ฃผ์„ธ์š”.

    => ์ธ๊ฐ€์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฑธ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  4. Http Status Code

    • ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•œ Http Status Code๋ฅผ ๋ชจ๋‘ ๋‚˜์—ดํ•˜๊ณ , ๊ฐ๊ฐ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ๊ณผ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.

    => POST(ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ด๋ ฅ์„œ ์ž‘์„ฑ), GET(๋‚ด ์ •๋ณด ์กฐํšŒ, ๋ชจ๋“  ์ด๋ ฅ์„œ ๋ชฉ๋ก ์กฐํšŒ, ์ด๋ ฅ์„œ ์ƒ์„ธ์กฐํšŒ), PATCH(์ด๋ ฅ์„œ ์ˆ˜์ •), DELETE(์ด๋ ฅ์„œ ์‚ญ์ œ)

  5. ๋ฆฌํŒฉํ† ๋ง

    • MySQL, Prisma๋กœ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ MySQL์„ MongoDB๋กœ ํ˜น์€ Prisma ๋ฅผ TypeORM ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋งŽ์€ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ• ๊นŒ์š”? ์ฃผ๋กœ ์–ด๋–ค ์ฝ”๋“œ์—์„œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ๊ฐ€์š”?

    => ์•„๋งˆ ์Šคํ‚ค๋งˆ์˜ ํ˜•์‹์„ ๋งŽ์ด ๋ฐ”๊ฟ”์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. - ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ DB๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋˜ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ์ƒ๊ฐ๋‚˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‚˜์š”? ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.

    => API๋ช…์„ธ์„œ๋‚˜ ERD๋ฅผ ๊ผผ๊ผผํžˆ ์จ๋†“๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  6. API ๋ช…์„ธ์„œ

    • notion ํ˜น์€ ์—‘์…€์— ์ž‘์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค swagger ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋ฉด ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

    => ํ”„๋ก ํŠธ์—”๋“œ์™€ ํ˜‘์—…์ด ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค.