IM14 ์ •๊ฑดํœ˜ ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธย 

ํ”„๋ก ํŠธ์˜ ์ž…์žฅ์—์„œ
๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋‹ค

HOLLYSHIP ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ๋ฐœํ‘œ

[ ์ฒซ ๋ฐฑ์—”๋“œ ๋‹ด๋‹น์˜ ๊ฑฑ์ •๊ฑฐ๋ฆฌ ]

2. ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ๊ธฐ๋ณธ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐฐํฌํ•ด์•ผํ• ๊นŒ?

3. ํ•ด๋‹น API์˜ ์‘๋‹ต์„ ์–ด๋–ค๊ฑธ๋กœ ์ค˜์•ผ ํ”„๋ก ํŠธ๊ฐ€ ์ž˜ ์‚ฌ์šฉํ• ๊นŒ?

// TODO:  GET '/holly'
app.get(
  '/holly',
  (req: Request, res: Response, next: NextFunction): Response =>
    res.send('HOLLYSHIP')
);

4. 'req.body'๋กœ ์›ํ•˜๋Š”๊ฑธ ์š”๊ตฌํ•˜๋ฉด ํ”„๋ก ํŠธ์—์„œ ์ค„ ์ˆ˜ ์žˆ๋Š”๊ฑธ๊นŒ?

5. ์˜ˆ์™ธ ์‘๋‹ต์€ ๋ฌด์—‡์œผ๋กœ, ์–ด๋–ป๊ฒŒ, ์–ผ๋งˆ๋‚˜ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ• ๊นŒ?

1. ์ดˆ๊ธฐ ์Šคํ‚ค๋งˆ ๋””์ž์ธํ•œ๊ฒŒ ์ž˜ ๋งŒ๋“ค์–ด์ง„๊ฑธ๊นŒ?

์ดˆ๊ธฐ ์Šคํ‚ค๋งˆ ์„ค๊ณ„ ๐Ÿค”ย 

๊ฐ ๊ธ€์ด ๋ชจ๋‘ Emotion์„ ๊ฐ€์ง€๋‹ˆ๊นŒย  Emotion๋ณ„ ID๋ฅผ ์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค!

๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ์ˆ˜์ •ํ•œ ์Šคํ‚ค๋งˆ ๐Ÿ‘๐Ÿป

ENUM์„ ์ด์šฉํ•ด ์—ด๊ฑฐํ˜•์œผ๋กœ ์ฒ˜๋ฆฌ!

3์ฃผ๋™์•ˆ์˜ ๋ฐฑ์—”๋“œ์˜ ์ƒ๊ฐ ๐Ÿ‘บ

"API ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ด๋‘๋ฉด ๋‹ค ๋ณด๊ณ  ์•Œ์•„์„œ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€!"

"์ผ๋‹จ Response๋กœ ๋‹ค ๋ณด๋‚ด๊ณ  ๋‚˜๋ฉด ํ”„๋ก ํŠธ์—์„œ ์ž˜ ์กฐํ•ฉํ•ด ์“ฐ๊ฒ ์ง€!"

"ํฌ์ŠคํŠธ๋งจ์—์„œ ๋˜๋ฉด ์„œ๋ฒ„์—์„  ๋ฌธ์ œ ์—†๋‹จ ๊ฑฐ๋‹ˆ๊นŒ ํ”„๋ก ํŠธ๊ฐ€ ๋ฌธ์ œ์ผ๊ฑฐ์•ผ"

๐Ÿšถ๐Ÿปโ€โ™‚๏ธ๐Ÿšถ๐Ÿปโ€โ™‚๏ธ๐Ÿšถ๐Ÿปโ€โ™‚๏ธ๊ทธ๋ ‡๊ฒŒ 3์ฃผ์ฐจ ๋ง‰๋ฐ”์ง€์— ํ”„๋ก ํŠธ ์ž‘์—…์— ํ•ฉ๋ฅ˜ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ...

HAPPEN. #1

AWS EC2 ์„œ๋ฒ„์˜ ๊ฐ‘์ž‘์Šค๋Ÿฐ ์—๋Ÿฌ! โ˜ ๏ธ

HAPPEN. #2

ex. ์œ ์ € ์ •๋ณด์— ์ด๋ฆ„, ์‚ฌ์ง„๋งŒ ๋„์›Œ์ค„๊ฑด๋ฐ

์™œ์ด๋ ‡๊ฒŒ ๋งŽ์ด ๋“ค์–ด์™€์š”? ๐Ÿคฎ

{
     "id": 1,
     "email": "code@code.com",
     "password": "$2b$12$y4axtBdzuU5z9WqjFhgT..jSbOCDIq.j7hvtmwsiLSXh4TY2WT/0m",
     "username": "code",
     "userImage": null,
     "intro": null,
     "createdAt": "2019-09-29T03:24:23.000Z",
     "updatedAt": "2019-09-29T03:24:23.000Z",
     "likeMusics": [],
     "likePosts": []
}
{
     "id": 1,
     "username": "code",
     "userImage": null,
     "createdAt": "2019-09-29T03:24:23.000Z",
}

sequelize example code

/******************************************************************************
 * ?                      Get ALL Posts Info - "GET /post/"
 ******************************************************************************/
postRouter.get('/', async (req, res) => {
  try {
    // TODO: Find all Post with User & Comment data
    const posts = await Post.findAll({
      include: [
        {
          model: User,
          attributes: ['email', 'username', 'userImage'],
        },
        { model: Comment, attributes: ['comment', 'commentUsername'] },
        {
          model: UserPostLike,
          attributes: ['id', 'userId'],
          include: [{ model: User, attributes: ['email', 'username'] }],
        },
      ],
    });
    return res.json(posts);
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'SERVER ERROR' });
  }
});

HAPPEN. #3

USER ID๋ฅผ ์–ด๋–ป๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค˜์š”? ๐Ÿคท๐Ÿปโ€โ™€๏ธ

API ๋ฌธ์„œ ์˜ˆ์‹œ

์œ ์ €๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

ย [POST] /user/:id/list

body : listname

API ๋ฌธ์„œ ์˜ˆ์‹œ

์œ ์ €๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

ย [POST] /list

body : listname

userId : session.passport

HAPPEN. #4

๊ณ„์† ์„œ๋ฒ„ ์‘๋‹ต์ด ๊ฐ™์€ ์—๋Ÿฌ๋งŒ ๋ณด๋‚ด์š”.ย ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป

" KEY : ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ?! ๐Ÿ˜ˆ ๐Ÿ˜ˆ ๐Ÿ˜ˆ "

SUMMERY ๐Ÿ“š

" ๋ฐฐํฌ๋Š” ๊ฐ€๋Šฅํ•œ ๋นจ๋ฆฌ! "

" ์‘๋‹ต์€ ๊ฐ€๋Šฅํ•œ ํ•„์š”ํ•œ๊ฒƒ๋งŒ ๊น”๋”ํ•˜๊ฒŒ "

" ์š”์ฒญ ์‹œ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ƒ๊ฐํ•œ๋‹ค. "

" ์„ฑ๊ณต์ด ์•„๋‹Œ ์‹คํŒจ์˜ ๊ฒฝ์šฐ๋กœ ์ƒ๊ฐํ•œ๋‹ค. "

๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ

" ๊ฐ€์žฅ ์šฐ์„ ์‹œ ํ•ด์•ผํ•  ๊ฒƒ์€ ์†Œํ†ต์ž…๋‹ˆ๋‹ค. "

deck

By geonhwi

deck

  • 556