Hello Ocean! ๐ŸŒผ

[TIL] ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ ํšŒ๊ณ ๋ก ๋ณธ๋ฌธ

TIL

[TIL] ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ ํšŒ๊ณ ๋ก

bba_dda 2021. 11. 12. 02:07
๋ฐ˜์‘ํ˜•

11์›” 1์ผ, ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ OT๊ฐ€ ๋๋‚œ ์งํ›„ ์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค. 

 

๊ณผ์ œ ๋‚ด์šฉ ๐ŸŽˆ

์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ ๋‚ด์šฉ์€, ์‚ฌ์ „๊ณผ์ œ๋กœ ์ œ์ถœํ–ˆ๋˜ ๊ฒŒ์‹œํŒ CRUD์— ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

๊ฒŒ์‹œ๊ธ€ ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰, ๋Œ“๊ธ€๊ณผ ๋Œ€๋Œ“๊ธ€, ์กฐํšŒ์ˆ˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผํ–ˆ๋‹ค. 

 

์ง„ํ–‰ ๊ณผ์ • ๐Ÿš…

ํŒ€ ๊ตฌ์„ฑ์ด ๋ฐœํ‘œ๋˜๊ณ  ํŒ€์žฅ์„ ๋ฝ‘์•„์•ผ ํ–ˆ๋Š”๋ฐ, ์ž์›ํ•ด์„œ ํŒ€์žฅ์ด ๋˜์—ˆ๋‹ค.

ํ•œ ํŒ€์ด 6๋ช…์ด์—ˆ๋Š”๋ฐ, ๋˜๋‹ค์‹œ ๋‘˜๋กœ ๋‚˜๋‰˜์–ด 3๋ช…์”ฉ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ–ˆ๋‹ค.

์‚ฌ์ „๊ณผ์ œ๋ฅผ 4๋ช…์€ express, 2๋ช…์€ nestjs๋กœ ์ œ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 

expressํŒ€, nestjsํŒ€์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ํ•œ ๋ช…์ด nestjsํŒ€์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์ •ํ–ˆ๋‹ค.

 

์ฒ˜์Œ ๋ณด๋Š” ์‚ฌ๋žŒ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ํŒ€์—์„œ ํ˜‘์—…ํ•˜๋Š” ๊ฒฝํ—˜์€ ์ฒ˜์Œ์ด์—ˆ๋‹ค. 

๋‚ด๊ฐ€ ์‚ฌ์ „๊ณผ์ œ๋กœ ์ œ์ถœํ–ˆ๋˜ ๋ ˆํฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

์šฐ๋ฆฌํŒ€ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋“ค ์นœ์ ˆํ•˜๊ณ , ์—ด์‹ฌํžˆ ์ฐธ์—ฌํ•œ ๋•๋ถ„์— ํ˜‘์—…๊ณผ์ •์—์„œ ํฐ ๊ฐˆ๋“ฑ์€ ์—†์—ˆ๋‹ค.

 

๋‹ค๋งŒ, ๊ณผ์ œ๋ฅผ ์ดํ‹€๋งŒ์— ์™„์„ฑํ•ด์•ผํ•˜๋Š” ๊ฝค๋‚˜ ์ด‰๋ฐ•ํ•œ ์ƒํ™ฉ์—์„œ, ๋‚˜๋Š” ๊ณผ์ œ ๋ช…์„ธ์„œ์— ๋ช…์„ธ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํŒ€์› ํ•œ ๋ถ„์ด ์„ฌ์„ธํ•˜๊ฒŒ ์‹ ๊ฒฝ์“ฐ์…”์„œ ์ด๊ฒƒ์ €๊ฒƒ ์ˆ˜์ •ํ•  ๊ฒƒ์ด ๋งŽ์•˜๋‹ค. 

์ฒ˜์Œ์—๋Š” ์‚ด์ง ๋ถˆ๋งŒ๋„ ์žˆ์—ˆ์ง€๋งŒ, ๊ณผ์ œ๋ฅผ ํ•ด์น˜์šฐ๋“ฏ ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹จ ๊ณผ์ œ์—์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์†Œํ•œ ๊ฒƒ ๊นŒ์ง€ ์‹ ๊ฒฝ์จ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด ํŒ€์›๋ถ„ ๋•๋ถ„์— ์‚ฌ์†Œํ•œ ์„ค๊ณ„๋‚˜ ๊ตฌ์กฐ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ์™„์„ฑ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ”๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ์˜€๊ธฐ์— ์‹œ๊ฐ„๋ถ„๋ฐฐ๋ฅผ ์ž˜ ํ•˜์ง€ ๋ชปํ•ด์„œ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. 

 

๋ฐฐ์šด ์  / ์•„์‰ฌ์šด ์  ๐Ÿ’ก

mongoose update์˜ return ๊ฐ’

๋Œ“๊ธ€์„ updateํ•˜๋Š” API์˜ ์‘๋‹ต์œผ๋กœ, update๊ฐ€ ์™„๋ฃŒ๋œ ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ๋ณด๋‚ด์ฃผ๊ณ ์ž ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ findOndAndUpdate ํ•จ์ˆ˜์˜ return๊ฐ’์„ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ด์ฃผ์—ˆ๋Š”๋ฐ, ์ˆ˜์ •์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

์•Œ๊ณ ๋ณด๋‹ˆ DB์— ์ˆ˜์ •์€ ๋˜๊ณ  ์žˆ๋Š”๋ฐ, findOndAndUpdate์˜ return๊ฐ’์ด update๋˜๊ธฐ ์ „ originalํ•œ ๋Œ“๊ธ€ ๋‚ด์šฉ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

updateํ•จ์ˆ˜์— option ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ { new: true } ๊ฐ’์„ ์ฃผ์—ˆ๋”๋‹ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

mongoose์˜ ๋ชจ๋“  updateํ•จ์ˆ˜๊ฐ€ default๋กœ origin ๊ฐ’์„ returnํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ๋„ ์ด option์„ ์œ ์šฉํ•˜๊ฒŒ ์จ๋จน์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. 

const commentInfo = await comment.findOneAndUpdate(
    { commentId },
    { $set: {contents, updatedDt: Date.now() }},
    { new: true }
);

 

mongoose AUTO-INCREMENT ์†์„ฑ ์ ์šฉ

๋Œ“๊ธ€ ์Šคํ‚ค๋งˆ์—์„œ id๋ฅผ auto-increment ์†์„ฑ์„ ์ ์šฉํ•ด ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. 

mongodb์—์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” _id๊ฐ’์ด ๊ธธ๊ณ  ๋ณต์žกํ•˜๋‹ˆ๊นŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐพ์•„๋ณด๋‹ˆ ๊ณต์‹์ ์œผ๋กœ auto-increment๋ฅผ ์ง€์›ํ•ด์ฃผ๊ณ  ์žˆ์ง€ ์•Š์•„, ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. 

์šฐ๋ฆฌ ํŒ€์€ mongoose-auto-increment ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•ด์„œ ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋‹ค๋งŒ, ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๊ตณ์ด mongoDB๋ฅผ ์ด์šฉํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

mongoDB๋ฅผ ์“ฐ๋ฉด์„œ ์ข…์ข… ๋Š๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, NoSql์„ ์“ฐ๋ฉด์„œ ์ž๊พธ SQL์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋Ÿด๊ฑฐ๋ฉด SQL์„ ์„ ํƒํ•ด ์‚ฌ์šฉํ•˜๊ณ , NoSQL์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ์—๋งŒ NoSQL์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.

 

AWS๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ์œผ๋กœ AWS EC2๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•ด๋ณด์•˜๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , MobaXterm๋ฅผ ์ด์šฉํ•ด SSH ์ ‘์†์„ ํ–ˆ๋‹ค. 

 

๋ฐฐํฌ๋ฅผ ์™„๋ฃŒํ•˜๊ธฐ๊นŒ์ง€ ๋‘ ๋ฒˆ์˜ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์žˆ์—ˆ๋‹ค.

1. ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์„œ๋ฒ„ ์‹คํ–‰

git clone์„ ๋ฐ›๊ณ , npm installํ•˜๊ณ , npm start๋กœ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ์„œ๋ฒ„๊ฐ€ ์—ด๋ ธ๋‹ค!

๋๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐํ–ˆ์„ ๋•Œ, ๋‚ด๊ฐ€ sshํ„ฐ๋ฏธ๋„์„ ๋‹ซ์œผ๋ฉด ์„œ๋ฒ„๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋œ๋‹ค.

๊ทธ๋ž˜์„œ nohup ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰์‹œํ‚ค๋„๋ก ํ–ˆ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ, ์ด ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•ด ๋†“๊ณ  ํ•œ๋‘์‹œ๊ฐ„ ๋’ค์— ํ™•์ธํ•ด๋ดค๋”๋‹ˆ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์žˆ์—ˆ๋‹ค.

 

์ข€ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰์„ ์‹œํ‚ค๊ณ ,

์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ธ Nodejs์—์„œ ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก 

PM2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ๋กœ ์‹คํ–‰์‹œ์ผฐ๋‹ค.

 

2. ๋ณด์•ˆ๊ทธ๋ฃน ์„ค์ •

์„œ๋ฒ„๊ฐ€ ์—ด๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ , ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”๋ฐ ์‘๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ์˜ค์ง€ ์•Š์•˜๋‹ค.

ํ™•์ธํ•ด๋ณด๋‹ˆ, ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์„œ, ํ•ด๋‹น ์„œ๋ฒ„ ํฌํŠธ์— ๋ชจ๋“  ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค.

 

 

๊ณผ์ œ๋ฅผ ์™„๋ฃŒํ•œ ์†Œ๊ฐ ๐Ÿ˜

์ฒซ ๋ฒˆ์งธ ๊ณผ์ œ์˜€๋˜ ๋งŒํผ, ์šฐ๋‹นํƒ•ํƒ• ๊ตด๋Ÿฌ๊ฐ”๋˜ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

ํ•˜์ง€๋งŒ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „๋ณด๋‹ค ํ™•์‹คํžˆ ์„ฑ์žฅํ•œ ๊ธฐ๋ถ„์ด ๋“ค์—ˆ๋‹ค.

mongoose ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋„๋„ ๋†’์•„์กŒ๊ณ , AWS๋„ ์‚ฌ์šฉํ•ด๋ณด์•˜์œผ๋ฉฐ

jwt๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ์„ ํ•œ๋ฒˆ ๋” ๊ตฌํ˜„ํ•ด ๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

์•ž์œผ๋กœ๋„ ๊ทธ๋ƒฅ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™œ ์ด๋ ‡๊ฒŒ ์ฝ”๋”ฉํ•˜๋Š”์ง€, ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.

 

 

๊ฒฐ๊ณผ๋ฌผ ๐Ÿ’พ

๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ ˆํฌ

https://github.com/preOnboarding-Team13/Assignment_1_AIMMO_express

 

GitHub - preOnboarding-Team13/Assignment_1_AIMMO_express

Contribute to preOnboarding-Team13/Assignment_1_AIMMO_express development by creating an account on GitHub.

github.com

 

์šฐ๋ฆฌํŒ€์˜ ๋‹ค๋ฅธ ํŒ€์›๋ถ„๋“ค์ด ์ œ์ž‘ํ•œ ๋ ˆํฌ (nestjs) 

https://github.com/preOnboarding-Team13/Assignment_1_AIMMO_nest

 

GitHub - preOnboarding-Team13/Assignment_1_AIMMO_nest: Pre Onboarding Assignment AIMMO (Nest js)

Pre Onboarding Assignment AIMMO (Nest js). Contribute to preOnboarding-Team13/Assignment_1_AIMMO_nest development by creating an account on GitHub.

github.com

 

๋ฐ˜์‘ํ˜•