/qring-server

๐Ÿฌ 26๊ธฐ ์†ํŠธ ์•ฑ์žผ: "Qring - QR์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ์šฐ๋ฆฌ์˜ ๋ชจ์ž„" ๐Ÿฌ

Primary LanguageJavaScript

๐Ÿฌ QRing - QR์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ์šฐ๋ฆฌ์˜ ๋ชจ์ž„ ๐Ÿฌ

node_badge npm_bedge

  • SOPT 26th APPJAM

  • ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„: 2020.06.27 ~ 2020.07.18

  • API ๋ฌธ์„œ


๐Ÿ’ ํ”„๋กœ์ ํŠธ ์„ค๋ช…

๋ชจ์ž„์˜ ์‹œ์ž‘๊ณผ ๋์„ ํ•จ๊ป˜ํ•˜๋Š”, QRing์ž…๋‹ˆ๋‹ค. ๐Ÿฌ
QR ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ชจ์ž„์˜ ์‹œ์ž‘์„ ๋น ๋ฅด๊ฒŒ, ๋ชจ์ž„์˜ ๋์—” ์›ํ™œํ•œ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋ชจ์ž„์ด ๋” ์„ฑ์ˆ™ํ•ด์ง€๊ณ , ๊ตฌ์„ฑ์›์€ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“‘ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ



๐ŸŒŽ Team Role

๐Ÿ‹ ๊น€๋ฏผ์ง€

  • ๊ด€๋ฆฌ์ž, ๊ทธ๋ฃน, ๋ชจ์ž„ DB ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•
  • ํ”ผ๋“œ๋ฐฑ ํผ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”ผ๋“œ๋ฐฑ ํผ ๋ชฉ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”ผ๋“œ๋ฐฑ ๊ฒฐ๊ณผ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ…Œ์ŠคํŒ… ์ž๋™ํ™” ํ™˜๊ฒฝ ๊ตฌ์ถ•, ๋ฐฐํฌ

๐Ÿ‹ ์ดํ˜„์ฃผ

  • ๊ด€๋ฆฌ์ž, ๊ทธ๋ฃน, ๋ชจ์ž„ DB ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•
  • ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ด๋ฉ”์ผ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • qr์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ์›น ์ถœ์„ ํผ ์ œ์ถœ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ถœ์„ ์ฒดํฌ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ธฐ๋Šฅ ๊ตฌํ˜„

๐Ÿ‹ ์ด์ง€์œค

  • ๊ด€๋ฆฌ์ž, ๊ทธ๋ฃน, ๋ชจ์ž„ DB ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•
  • ์ฒซ ๋ชจ์ž„ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ด์–ด์„œ ๋ชจ์ž„ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๋ชจ์ž„ ํŽธ์ง‘ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ˜„์žฌ ์ง„ํ–‰์ค‘/์˜ˆ์ •๋œ ๋ชจ์ž„ List/์ข…๋ฃŒ๋œ ๋ชจ์ž„ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

๐Ÿ“˜ Package

์‚ฌ์šฉ ํŒจํ‚ค์ง€(๋ชจ๋“ˆ)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • nodemailer - ํšŒ์› ๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ ์ธ์ฆ์„ ์œ„ํ•œ ์ด๋ฉ”์ผ ์ „์†ก
  • jsonwebtoken - JWT(Json Web Token) ์ƒ์„ฑ ๋ฐ ์ธ์ฆ
  • rand-token - ๋žœ๋ค์œผ๋กœ Token ์ƒ์„ฑ
  • pbkdf2 - ์†”ํŠธ๋ฅผ ์ ์šฉํ•œ ํ›„ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ž„์˜๋กœ ์„ ํƒ
  • mongoose - ๋ชฝ๊ณ DB ODM ๋ฌธ์„œ๋ฅผ DB์—์„œ ์กฐํšŒํ•  ๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• 
  • qrcode - QR์ฝ”๋“œ ์ƒ์„ฑ
  • aws-sdk - AWS์— API๋ฅผ ์ œ๊ณต
  • multer - ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ
  • multer-s3 - ์ด๋ฏธ์ง€ S3์— ์—…๋กœ๋“œ
  • moment - ์ถœ์„์ฒดํฌ, ํ”ผ๋“œ๋ฐฑ ์ œ์ถœ ๋‚ ์งœ ํฌ๋งท
  • socket.io - websocket ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ๋„คํŠธ์›Œํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • connect - RESTful Web Services๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ
"dependencies": {
    "aws-sdk": "^2.709.0",
    "body-parser": "^1.19.0",
    "connect": "^3.7.0",
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "ejs": "~2.6.1",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jsonwebtoken": "^8.5.1",
    "moment": "^2.27.0",
    "mongoose": "^5.9.21",
    "mongoose-moment": "^0.1.3",
    "morgan": "~1.9.1",
    "multer": "^1.4.2",
    "multer-s3": "^2.9.0",
    "nodemailer": "^6.4.10",
    "nodemailer-smtp-transport": "^2.7.4",
    "pbkdf2": "^3.1.1",
    "qrcode": "^1.4.4",
    "qrcode-with-logos": "^1.0.2",
    "rand-token": "^1.0.1",
    "socket.io": "^2.3.0"
  }

๐Ÿ“— Architecture

ARCHITECTURE


๐Ÿ“™ DB ERD

ERD


๐Ÿ’ก ๋ฐฐํฌ

  • AWS EC2 - ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ
  • AWS elastic beanstlak - ์„œ๋ฒ„ ๋ฐฐํฌ๋ฐ ๊ด€๋ฆฌ ํ”„๋กœ๋น„์ €๋‹ ์„œ๋น„์Šค
  • AWS S3 - ํด๋ผ์šฐ๋“œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ
  • Atlas - MongoDB ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค
  • Docker - ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ
  • Nginx - ํ”„๋ก์‹œ ์„œ๋ฒ„ (๋ณด์•ˆ ํ–ฅ์ƒ ๋ฐ ์บ์‹œ๋ฅผ ํ™œ์šฉํ•œ ์ „์†ก ์†๋„ ํ–ฅ์ƒ)

๐Ÿ“š ์‚ฌ์šฉ๋œ ๋„๊ตฌ

  • Node.js
  • Express.js
  • NPM - ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž
  • PM2 - ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž
  • MongoDB - NoSQL DB
  • Nginx - ์›น ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด(ํ”„๋ก์‹œ ์„œ๋ฒ„์šฉ)

๐Ÿ’ป ๊ฐœ๋ฐœ์ž

๋งˆ, ๋„ˆ๋„ค๋ž‘ ๊ฐ™์ด ํ•ด์„œ ํ–‰์šด์ด๋‹ค ๋งˆ
ํ๋ง ์„œ๋ฒ„ํŒŒํŠธ ์ตœ๊ณ ๋‹ค~ :)

๋งˆ, ์• ๋”๋ผ
๊ณ ๋ง™๋ฐ์ด ~ ๋‹ˆ๋œ์ด๋ž‘ ๊ฐ™์ดํ•ด์„œ ์–ต์ˆ˜๋กœ ์ข‹์•˜๋‹ค ๋งˆ ๋‹ˆ๋“ค๋„ ๊ทธ๋ ‡์ œ?

๋งˆ, ์–ธ๋ƒ๋“ค ๋„ˆ๋ฌด ์ข‹๋ฐ์ด
์‚ฌ๋ž‘ํ•œ๋ฐ์ด~ ๋‚ด๋ง˜์•Œ์ œ?