Skip to content

๐Ÿš™ ์„œ๋ฒ„๊ฐ€ ๊ฑธ์–ด๋‹ค๋‹ˆ๋ฉด? ์„œ๋ฒ„์–ต,,์„œ๋ฒ„์–ต,,, ๐Ÿš™

Notifications You must be signed in to change notification settings

TeamChaRo/ChaRo-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


์ฐจ๋กœ ChaRo

์ฐจ์—์„œ์˜, ์ฐจ๋กœ์œ„์—์„œ์˜ ์ฆ๊ฑฐ์›€์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜ ๋“œ๋ผ์ด๋ธŒ ์ฝ”์Šค ๊ณต์œ  ํ”Œ๋žซํผ
Core Value : ์ฐจ๋กœ์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” '์ฆ๊ฑฐ์›€๊ณผ ํŽธ๋ฆฌํ•จ'์ž…๋‹ˆ๋‹ค.

SOPT 28th APPJAM
ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„: 2021.06.26 ~ 2021.07.17


Instagram: Charo_Official


ChaRo-Server Contributors



โœจService IA



๐Ÿ“ƒ API DOC LINK

ChaRo-Server API Doc



๐ŸŒˆ Server Architecture

  • Async & Await
  • request(HTTP)
  • Node.js - Chrome V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„
  • Express.js - Node.js ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • NPM - ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž
  • vscode - ํŽธ์ง‘๊ธฐ
  • mySQL - DataBase
  • Sequelize - Sequelize ORM
  • AWS EC2 - ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ


โš™๏ธ Dependency Module

  "dependencies": {
    "@angular/common": "^12.1.1",
    "@angular/core": "^12.1.1",
    "@types/express": "^4.17.11",
    "@types/multer": "^1.4.6",
    "@types/multer-s3": "^2.7.9",
    "aws-sdk": "^2.938.0",
    "bcryptjs": "^2.4.3",
    "dotenv": "^9.0.2",
    "express": "^4.17.1",
    "express-validator": "^6.10.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.12.10",
    "morgan": "^1.10.0",
    "multer": "^1.4.2",
    "multer-s3": "^2.9.0",
    "mysql2": "^2.2.5",
    "nodemon": "^2.0.7",
    "pakage.json": "^1.0.0",
    "request": "^2.88.2",
    "rxjs": "^7.2.0",
    "sequelize": "^6.6.4",
    "sequelize-cli": "^6.2.0"
  }


๐Ÿงฌ ERD & Models

models



๐Ÿงฉ DTO

ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด DTO๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
API์˜ request์™€ response์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— DTO๋ฅผ ์„ค๊ณ„ํ•จ์œผ๋กœ์จ
data์˜ mapping์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

postDTO

 export default interface postDTO{
    title?: string;
    userId?: string;
    province?: string;
    region?: string;
    isParking?: boolean;
    parkingDesc?: string;
    courseDesc?: string;
}

mainDTO

import briefInformationDTO from "./briefInformationDTO";
import bannerDTO from "./bannerDTO";

type briefCollectionDTO = briefInformationDTO[];
type bannerCollectionDTO = bannerDTO[];

export default interface mainDTO {
    banner: bannerCollectionDTO,
    todayCharoDrive: briefCollectionDTO,
    trendDrive: briefCollectionDTO,
    customThemeTitle: string,
    customThemeDrive: briefCollectionDTO,
    localTitle: string,
    localDrive : briefCollectionDTO
}
๐Ÿ–ผ DTO Interface
models


๐Ÿ’ป Coding Convention

๐Ÿ—‚ ํด๋”๊ตฌ์กฐ

๐Ÿ—‚ node_modules
   
๐Ÿ—‚ src

    - api ๐Ÿ—‚

    - config ๐Ÿ—‚

    - Loaders ๐Ÿ—‚
    
    - middleware ๐Ÿ—‚

    - models ๐Ÿ—‚

    - service ๐Ÿ—‚
   
    - controller ๐Ÿ—‚
   

indes.ts
   
.env
   
nodemon.json
   
package.json
   
tsconfig.json

๐Ÿ–‹ ๋„ค์ด๋ฐ

Class & Contructor

  • Class, Contructors๋Š” **Pascal Case (=UpperCamelCase)**๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ข‹์€ ์˜ˆ

    CamelCase

    ๋‚˜์œ ์˜ˆ

    camelCase

**ํ•จ์ˆ˜ & ๋ณ€์ˆ˜ & ์ƒ์ˆ˜**
  • ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜์—๋Š” lowerCamelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋™์‚ฌ+๋ช…์‚ฌํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ex) getUserInformation()
  • ๊ธ€์ž์˜ ๊ธธ์ด

    • ๊ธ€์ž์˜ ๊ธธ์ด๋Š” 20์ž ์ด๋‚ด๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
    • 4๋‹จ์–ด ์ด์ƒ์ด ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜, ๋ถ€๋“์ดํ•˜๊ฒŒ 20์ž ์ด์ƒ์ด ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํŒ€์›๊ณผ์˜ ์ƒ์˜๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • flag๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜

    • Boolean์˜ ๊ฒฝ์šฐ ์กฐ๋™์‚ฌ+flag ์ข…๋ฅ˜๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ex) isNum, hasNum
  • ์•ฝ์นญ์˜ ์‚ฌ์šฉ

    • ์•ฝ์–ด๋Š” ๋˜๋„๋ก ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์ข‹์€ ์˜ˆ

    let index;
    let count;
    let array;
    let seoulToBucheon;

    ๋‚˜์œ ์˜ˆ

    let idx;
    let cnt;
    let arr;
    let seoul2Bucheon;

๐Ÿท ์ฃผ์„

  • ํ•œ์ค„์€ //๋กœ ์ ๊ณ , ๊ทธ ์ด์ƒ์€ /** */๋กœ ์ ์Šต๋‹ˆ๋‹ค.
// ํ•œ์ค„ ์ฃผ์„์ผ ๋•Œ
/**
 * ์—ฌ๋Ÿฌ์ค„
 * ์ฃผ์„์ผ ๋•Œ
 */
  • ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ฃผ์„
    • backend์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    • ํ•˜๋‚˜์˜ ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ฃผ์„์œผ๋กœ ์ƒ์„ธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

      • ํ•จ์ˆ˜์˜ ์ „์ฒด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…
      • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช… (type: ..., ์—ญํ• )
      • router ๋˜๋Š” api์ผ ๋•Œ์—๋Š” ์„ฑ๊ณต ์—ฌ๋ถ€๋„ ์ ์–ด์ค๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ ์ฝ”๋“œ
      /**
       *  @route Post api/auth
       *  @desc Authenticate user & get token(๋กœ๊ทธ์ธ)
       *  @access Public
       */
      router.get(
       
      );

๐Ÿ“Ž ๊ธฐํƒ€

  • ํƒญ ์‚ฌ์ด์ฆˆ๋Š” 2๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ ์ค„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 80์ž๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ๋Œ€ tab depth ์ œํ•œ

    • tab์˜ ์ตœ๋Œ€ depth๋Š” 4๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์ด์ƒ์œผ๋กœ depth๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ ์ด์ƒ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ, ํŒ€์›๋“ค๊ณผ์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
       function func() {
         //tab1
         if() {
           //tab2
           array.reduce((pre, cur) => {
             //tab3
             if(cur == status) {
               //tab4
             }
           }
         }
       }
  • ๊ด„ํ˜ธ ์‚ฌ์šฉ

    • (if, while, for)๋ฌธ ๊ด„ํ˜ธ ๋’ค์— ํ•œ์นธ์„ ๋„์šฐ๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
       if (left == true) {
         // logic
       }
  • ๋„์–ด์“ฐ๊ธฐ

    let a = 5;  ( = ์–‘์ชฝ ์‚ฌ์ด๋กœ ๋„์–ด์“ฐ๊ธฐ ํ•˜๊ธฐ)
    if (a == 3) {
        // logic
    }

๐Ÿ‘‰๐Ÿป Coding Convention ํ•œ ๋ˆˆ์— ๋ณด๊ธฐ
๐Ÿ‘‰๐Ÿป ๋‹ค์Œ Style Guide๋ฅผ ์ฐธ๊ณ ํ—€์Šต๋‹ˆ๋‹ค.


โœ‰๏ธ Commit Messge Rules

๐Ÿš™ Charo-Server Git Commit Message Rules ๐Ÿš™

  • ๋ฐ˜์˜์‚ฌํ•ญ์„ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์€ ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ผ๋„ ๊ตฌํ˜„๋˜๋ฉด ์ปค๋ฐ‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์™„๋ฒฝํ•˜์ง€ ์•Š์„ ๋•, ๊ฐ์ž ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์„ ํ•ด์ฃผ์„ธ์š”.

๐Ÿ“œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๋ช…๋ น์–ด ๋ชจ์Œ

- feat    : ๊ธฐ๋Šฅ (์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ)
- fix     : ๋ฒ„๊ทธ (๋ฒ„๊ทธ ์ˆ˜์ •)
- refactor: ๋ฆฌํŒฉํ† ๋ง
- style   : ์Šคํƒ€์ผ (์ฝ”๋“œ ํ˜•์‹, ์„ธ๋ฏธ์ฝœ๋ก  ์ถ”๊ฐ€: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€๊ฒฝ ์—†์Œ)
- docs    : ๋ฌธ์„œ (๋ฌธ์„œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ)
- test    : ํ…Œ์ŠคํŠธ (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€๊ฒฝ ์—†์Œ)
- chore   : ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ (๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • ๋“ฑ)

โ„น๏ธ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ํ˜•์‹

  • [์ปค๋ฐ‹๋ฉ”์„ธ์ง€] ์„ค๋ช… ํ˜•์‹์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์˜ˆ >

  [Feat] ๋ฉ”์ธ๋ทฐ ์กฐํšŒ API ๊ตฌํ˜„ ์™„๋ฃŒ

๋‚˜์œ ์˜ˆ >

  ๋ฉ”์ธ๋ทฐ API ๊ตฌํ˜„ ์„ฑ๊ณต

Github mangement

๐Ÿš™ Charo-Server Gitflow ๐Ÿš™

  • main ๋ธŒ๋žœ์น˜
  • develop ๋ธŒ๋žœ์น˜
    • feat ๋ธŒ๋žœ์น˜
default๋Š” main๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.

ํ•˜์œ„์— develop๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์‹œ โ†’ feat/๋ฒˆํ˜ธ ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

* ๋‹จ feat์€ ์ž์„ธํ•œ ๊ธฐ๋Šฅ ํ•œ ๊ฐ€์ง€๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด develop๋ธŒ๋žœ์น˜๋กœ Pull Request๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 
* ๋‹ค๋ฅธ ํŒ€์›์ด pr์„ ํ™•์ธํ•˜๊ณ , ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•œ ๋’ค ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด develop ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ์„ ํ•ฉ๋‹ˆ๋‹ค.

- Main
- develop
   โ””โ”€โ”€ feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ

๊ฐ์ž ์ž์‹ ์ด ๋งก์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์„ฑ๊ณต์‹œ! ๋ธŒ๋žœ์น˜ ๋‹ค ์“ฐ๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋ธŒ๋žœ์น˜ ๋งŒ๋“ฆ
git branch ๊ธฐ๋Šฅ(or ์ด๋ฆ„ ๋ธŒ๋žœ์น˜)
  • ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ push
git push --set-upstream origin ๋ธŒ๋žœ์น˜์ด๋ฆ„(feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜)
git push -u origin ๋ธŒ๋žœ์น˜์ด๋ฆ„(feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜)
  • ๋ธŒ๋žœ์น˜ ์ „ํ™˜
git checkout feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • ์ฝ”๋“œ ๋ณ€๊ฒฝ (ํ˜„์žฌ feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜)
git add .
git commit -m "์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€" origin feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • ํ‘ธ์‹œ (ํ˜„์žฌ feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜)
git push origin feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • ๋ทฐ์ด๋ฆ„ ๋ธŒ๋žœ์น˜์—์„œ ํ•  ์ผ ๋‹ค ํ–ˆ์œผ๋ฉด develop ๋ธŒ๋žœ์น˜๋กœ ์ „ํ™˜
git checkout develop
  • ๋จธ์ง€ (ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜)
git merge feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • ๋‹ค ์“ด ๋ธŒ๋žœ์น˜ ์‚ญ์ œ (local) (ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜)
git branch -d feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • ๋‹ค ์“ด ๋ธŒ๋žœ์น˜ ์‚ญ์ œ (remote) (ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜)
git push origin :feat/๊ธฐ๋Šฅ๋ฒˆํ˜ธ ๋ธŒ๋žœ์น˜
  • main pull (ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜)
git pull or git pull origin develop
  • main push (ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜)
git push or git push origin develop


๐Ÿš™ ๊ธฐ๋Šฅ๋ณ„ ๊ฐœ๋ฐœ์—ฌ๋ถ€ + ๋‹ด๋‹น์ž

ChaRo-Server ๊ฐœ๋ฐœ ์ผ์ง€

๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์—ฌ๋ถ€ ๋‹ด๋‹น์ž
๋ชจ๋ธ ์„ค๊ณ„ ์˜ค์˜ˆ์›,ํ™ฉ์ง€์€
DB ์—ฐ๊ฒฐ ์˜ค์˜ˆ์›
์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์˜ค์˜ˆ์›
๋กœ๊ทธ์ธ API ํ™ฉ์ง€์€
ํšŒ์›๊ฐ€์ž… API ํ™ฉ์ง€์€
๋‹‰๋„ค์ž„ ์ค‘๋ณต๊ฒ€์‚ฌ API ํ™ฉ์ง€์€
์•„์ด๋”” ์ค‘๋ณต๊ฒ€์‚ฌ API ํ™ฉ์ง€์€
ํšŒ์›๊ฐ€์ž… API ํ™ฉ์ง€์€
๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑํ•˜๊ธฐ API ์˜ค์˜ˆ์›
๋ฉ”์ธ๋ทฐ ์กฐํšŒ API ํ™ฉ์ง€์€, ์˜ค์˜ˆ์›
๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ์ •๋ณด ์กฐํšŒ API ํ™ฉ์ง€์€
๋”๋ณด๊ธฐ ๊ฒŒ์‹œ๋ฌผ ๋‚ด ์ตœ์‹ ์ˆœ ํ•„ํ„ฐ API ์˜ค์˜ˆ์›
๋”๋ณด๊ธฐ ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ๋ฐ ์ข‹์•„์š” API ์˜ค์˜ˆ์›
๊ฒ€์ƒ‰ํ•˜๊ธฐ ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ๋ฐ ์ข‹์•„์š” API ํ™ฉ์ง€์€
๊ฒ€์ƒ‰ํ•˜๊ธฐ ๊ฒŒ์‹œ๋ฌผ ๋‚ด ์ตœ์‹ ์ˆœ ํ•„ํ„ฐ API ํ™ฉ์ง€์€
์ตœ๊ทผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ €์žฅ API ์˜ค์˜ˆ์›
์ตœ๊ทผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์กฐํšŒ API ์˜ค์˜ˆ์›
๊ฒŒ์‹œ๋ฌผ ์ €์žฅํ•˜๊ธฐ API ์˜ค์˜ˆ์›
๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” API ์˜ค์˜ˆ์›
๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ (์ธ๊ธฐ์ˆœ, ์ตœ์‹ ์ˆœ) API ์˜ค์˜ˆ์›
๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ •ํ•˜๊ธฐ API ์˜ค์˜ˆ์›


๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ChaRo-Server Dev

์˜ค์˜ˆ์› ํ™ฉ์ง€์€
yaeoni hwangji-dev



About

๐Ÿš™ ์„œ๋ฒ„๊ฐ€ ๊ฑธ์–ด๋‹ค๋‹ˆ๋ฉด? ์„œ๋ฒ„์–ต,,์„œ๋ฒ„์–ต,,, ๐Ÿš™

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published