junu-kk / Ulink-Server

๐Ÿ”ฅ์™„๋ฒฝ ๊ทธ ์ž์ฒด - Ulink Server๐Ÿ”ฅ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ULINK : ์‹œ๊ฐ„ํ‘œ ๊ธฐ๋ฐ˜, ๋Œ€ํ•™์ƒ ์ง€์‹๊ต๋ฅ˜ ํ”Œ๋žซํผ


์œ ์˜์‚ฌํ•ญ

๋ฆด๋ฆฌ์ฆˆ ํ•˜๊ธฐ ์ „ ํ”„๋กœํ† ํƒ€์ž… ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌํŒ(Private repository)์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง๊ณผ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ URL ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ๋งŽ์€ ๋ณ€ํ™”๊ฐ€ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.


node_badge npm_bedge

  • S.O.P.T 26th Sever ํŒŒํŠธ ์•ฑ์žผ ํ”„๋กœ์ ํŠธ

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

  • API ๋ฌธ์„œ

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

  • Ulink : ์‹œ๊ฐ„ํ‘œ ๊ธฐ๋ฐ˜, ๋Œ€ํ•™์ƒ ์ง€์‹๊ต๋ฅ˜ ํ”Œ๋žซํผ
  • ๋…ธ์…˜๋งํฌ

๐Ÿ“‘ Work flow

๐Ÿ“‘ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

์‹œ๊ฐ„ํ‘œ

์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹นํ•˜๋Š” ํ•™๊ต ์‹œ๊ฐ„ํ‘œ๋ฅผ ํ•„ํ„ฐ๊ฒ€์ƒ‰๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์ˆ˜์—…์‹œ๊ฐ„ํ‘œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•˜๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์บ˜๋ฆฐ๋”

์ˆ˜์—… ๋ณ„ ์ผ์ •์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋Œ€ํ™”๋ฐฉ์˜ ์ˆ˜์—…๊ณต์ง€์™€ ์—ฐ๋™ํ•˜์—ฌ ์ˆ˜์—…๋ณ„ ์‹œํ—˜, ๊ณผ์ œ, ์ˆ˜์—…, ์‹ค์Šต ๊ณต์ง€๋“ฑ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

ํฌ๋กค๋ง

๋Œ€ํ•™๋ณ„ ์‹œ๊ฐ„ํ‘œ ์ •๋ณด๋ฅผ ๋Œ€ํ•™๋ณ„ ์‚ฌ์ดํŠธ์—์„œ ํŒŒ์ด์ฌ์˜ Selenium๊ณผ BeautifulSoup์„ ํ™œ์šฉํ•˜์—ฌ ํฌ๋กค๋งํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํฌ๋กค๋ง ์ฝ”๋“œ๋Š” ์˜์กด์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Google Cloud Function์„ ์ด์šฉํ•˜์—ฌ Google Cron ์„œ๋น„์Šค๋กœ ํ•™๊ธฐ๋ณ„ DB๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.

์ฑ„ํŒ… ์„œ๋น„์Šค

์‹œ๊ฐ„ํ‘œ ์ž‘์„ฑ ํ›„, ์‹œ๊ฐ„ํ‘œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฒˆ ํ•™๊ธฐ ์ˆ˜์—… ๋ณ„ ์†Œํ†ต๋ฐฉ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์†Œํ†ต๋ฐฉ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€์˜ ์›ํ™œํ•œ ์†Œํ†ต์„ ์œ„ํ•ด Firebase RealTime Database๋ฅผ ์ด์šฉํ•œ ์ฑ„ํŒ… ์„œ๋น„์Šค๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงพ ๊ธฐ๋Šฅ๋ช…์„ธ์„œ

๐Ÿ“— Architecture

image

๐Ÿ“• DB ERD

image

๐Ÿฅฆ Directory Tree

โ”œโ”€โ”€โ”€api/
โ”‚   โ”œโ”€โ”€โ”€docs/
โ”‚   โ”‚   โ”œโ”€โ”€โ”€cart/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€cart.yaml
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€cartIdx.yaml
โ”‚   โ”‚   โ”œโ”€โ”€โ”€chat/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€chat.yaml
โ”‚   โ”‚   โ”œโ”€โ”€โ”€notice/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€notice.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€noticeIdx.yaml
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€noticeSubject.yaml
โ”‚   โ”‚   โ”œโ”€โ”€โ”€schedule/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€schedule.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleIdx.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleList.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleMain.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleMainIdx.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleName.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€schedulePersonal.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€schedulePersonalIdx.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleSchool.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€scheduleSchoolIdx.yaml
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€scheduleSpecificIdx.yaml
โ”‚   โ”‚   โ”œโ”€โ”€โ”€schema/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€fail.yaml
โ”‚   โ”‚   โ”œโ”€โ”€โ”€subject/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€subject.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€subjectCourse.yaml
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€โ”€subjectRecommend.yaml
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€subjectSearch.yaml
โ”‚   โ”‚   โ””โ”€โ”€โ”€user/
โ”‚   โ”‚       โ”œโ”€โ”€โ”€profile.yaml
โ”‚   โ”‚       โ”œโ”€โ”€โ”€profileId.yaml
โ”‚   โ”‚       โ”œโ”€โ”€โ”€signIn.yaml
โ”‚   โ”‚       โ””โ”€โ”€โ”€signUp.yaml
โ”‚   โ””โ”€โ”€โ”€swagger.yaml
โ”œโ”€โ”€โ”€controllers/
โ”‚   โ”œโ”€โ”€โ”€cart.js
โ”‚   โ”œโ”€โ”€โ”€chat.js
โ”‚   โ”œโ”€โ”€โ”€notice.js
โ”‚   โ”œโ”€โ”€โ”€schedule.js
โ”‚   โ”œโ”€โ”€โ”€social.js
โ”‚   โ”œโ”€โ”€โ”€subject.js
โ”‚   โ””โ”€โ”€โ”€user.js
โ”œโ”€โ”€โ”€middlewares/
โ”‚   โ””โ”€โ”€โ”€auth.js
โ”œโ”€โ”€โ”€models/
โ”‚   โ”œโ”€โ”€โ”€cart.js
โ”‚   โ”œโ”€โ”€โ”€notice.js
โ”‚   โ”œโ”€โ”€โ”€schedule.js
โ”‚   โ”œโ”€โ”€โ”€social.js
โ”‚   โ”œโ”€โ”€โ”€subject.js
โ”‚   โ””โ”€โ”€โ”€user.js
โ””โ”€โ”€โ”€routes/
    โ”œโ”€โ”€โ”€cart.js
    โ”œโ”€โ”€โ”€chat.js
    โ”œโ”€โ”€โ”€index.js
    โ”œโ”€โ”€โ”€notice.js
    โ”œโ”€โ”€โ”€schedule.js
    โ”œโ”€โ”€โ”€social.js
    โ”œโ”€โ”€โ”€subject.js
    โ””โ”€โ”€โ”€user.js

๐Ÿ“˜ ๊ทœ์น™

  • Coding Convention
  • Git Convention

๐Ÿ—‚ Code Convention

๐Ÿ‘… ๋„ค์ด๋ฐ ๊ทœ์น™

1. **๋ณ€์ˆ˜๋ช…** : ์นด๋ฉœ์ผ€์ด์Šค  (`inputBox`)
2. **ํด๋”๋ช…, ํŒŒ์ผ๋ช…** : ์†Œ๋ฌธ์ž (`inputbox`)
3. **ํด๋ž˜์Šค๋ช…** : ์ฒซ๊ธ€์ž ๋Œ€๋ฌธ์ž (`InputBox`)

โž• more...

  • var ์ง€์–‘ / let, const ์ง€ํ–ฅ
  • ๋น„๋™๊ธฐ๋Š” promise์˜ then๋ณด๋‹ค async/await ์‚ฌ์šฉ

Git Convention

branch

  • master

    • develop

    • feature

      • debugging

commit message

CREATE - ๊ธฐ๋Šฅ ๊ตฌํ˜„(ํ•œ๊ธ€)
UPDATE - ์ฝ”๋“œ ์ˆ˜์ •(ํ•œ๊ธ€)
MERGE - ์ฝ”๋“œ ๋ณ‘ํ•ฉ(ํ•œ๊ธ€)
FIX - ๋ฒ„๊ทธ ์ˆ˜์ •(ํ•œ๊ธ€)
RELEASE - ๋ฒ„์ „ ๋ฐฐํฌ(ํ•œ๊ธ€)
DELETE - ๊ธฐ๋Šฅ ์‚ญ์ œ(ํ•œ๊ธ€)
DOCS - ๋ฌธ์„œ ํŽธ์ง‘(ํ•œ๊ธ€)

ex) [UPDATE] ๊ตฌํ˜„๋‚ด์šฉ


โš™๏ธ Depenedncy Module

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

"dependencies": {
  "aws-sdk": "^2.708.0",
  "cookie-parser": "~1.4.4",
  "debug": "~2.6.9",
  "express": "~4.16.1",
  "hangul-js": "^0.2.6",
  "http-errors": "~1.6.3",
  "jade": "~1.11.0",
  "jsonwebtoken": "^8.5.1",
  "moment": "^2.27.0",
  "morgan": "~1.9.1",
  "multer": "^1.4.2",
  "multer-s3": "^2.9.0",
  "promise-mysql": "^4.1.3",
  "rand-token": "^1.0.1",
  "unique-names-generator": "^4.2.0"
}

๐Ÿ“ข ์‹œ์ž‘ํ•˜๊ธฐ

์„ค์น˜ํ•˜๊ธฐ

  • nodejs์™€ npm์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. (์„ค์น˜ ๋ฐฉ๋ฒ• : nodejs.org ๋ฅผ ์ฐธ๊ณ )
  • Node.js 12 LTS ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰์— ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ ์ •๋ณด : ์—…๋ฐ์ดํŠธ ์˜ˆ์ •
npm install -g express express-generator

์‹คํ–‰ํ•˜๊ธฐ

npm start

๐Ÿ’ก ๋ฐฐํฌ

  • AWS EC2 - ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ
  • AWS RDS - ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • AWS S3 - ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ

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

  • Node.js - Chrome V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„
  • Express.js - Node.js ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • NPM - ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž
  • PM2 - Express ์•ฑ์šฉ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž
  • vscode - ํŽธ์ง‘๊ธฐ
  • Mysql - DataBase

๐Ÿ”ฅ Test ๐Ÿ”ฅ

Postman

image

Swagger

image

๐Ÿ”ฅ ๊ฐœ๋ฐœ์ž: Server ๐Ÿ”ฅ

image

๐Ÿ‘จโ€๐Ÿ’ป๊น€๋ณด๋ฐฐ

  • ์‹œ๊ฐ„ํ‘œ ์กฐํšŒ, ์ƒ์„ฑ ๊ธฐ๋Šฅ
  • ๋ฉ”์ธ ์‹œ๊ฐ„ํ‘œ ์„ค์ •, ์ˆ˜์ • ๊ธฐ๋Šฅ
  • ์ˆ˜์—…์ผ์ • ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ
  • ๊ณต์ง€ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ
  • ๊ณต์ง€ ์กฐํšŒ (๋‹ฌ๋ ฅ, ๋ฆฌ์ŠคํŠธ) ๊ธฐ๋Šฅ
  • ํ•™๊ต ์ˆ˜์—… ๋ฐ์ดํ„ฐ ํฌ๋กค๋ง
  • DB ์„ค๊ณ„

๐Ÿ‘ฉโ€๐Ÿ’ปํ™ฉ์ง€ํ˜œ

  • ์œ ์ € ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ
  • ์‹œ๊ฐ„ํ‘œ ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ
  • ์†Œ์…œ(ํŒ”๋กœ์šฐ, ํŒ”๋กœ์ž‰) ๊ธฐ๋Šฅ
  • ๊ฐœ์ธ์ผ์ • ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ
  • ๊ฐœ์ธํ”„๋กœํ•„ ์กฐํšŒ, ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ
  • ์ฑ„ํŒ… (Firebase) ๊ธฐ๋Šฅ
  • DB ์„ค๊ณ„

๐Ÿ”Ž Ulink์˜ ์—ฐ๊ด€ ํ”„๋กœ์ ํŠธ

About

๐Ÿ”ฅ์™„๋ฒฝ ๊ทธ ์ž์ฒด - Ulink Server๐Ÿ”ฅ


Languages

Language:JavaScript 97.0%Language:HTML 3.0%Language:CSS 0.1%