๐Ÿ‘ 2์ฃผ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

BenKimยท2020๋…„ 8์›” 23์ผ
1
post-thumbnail

์ฃผ์ œ์„ ์ •

์ฝ”๋“œ์Šคํ…Œ์ด์ธ ์˜ immersive๊ณผ์ •์„ ๋ชจ๋‘ ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด 2์ฃผ,4์ฃผ ๋‘๋ฒˆ์˜ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.
์ฃผ์ œ๋Š” ์ˆ˜๊ฐ•์ƒ๋“ค์ด ์ž์œ ๋กญ๊ฒŒ ์•„์ด๋””์–ด๋ฅผ ๋‚ด๊ณ , ๋งˆ์Œ์— ๋“œ๋Š” ์•„์ด๋””์–ด์— ์ง€์›ํ•˜๊ณ  ํŒ€์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š” ๊ณผ์ •์ด๋‹ค.
์ฒซ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์ธ 2์ฃผํ”„๋กœ์ ํŠธ ์—์„œ๋Š” ๊ทธ๋™์•ˆ ๋ฐฐ์šด๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ๋ณต์Šตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋ณธ์— ์ค‘์ ์„ ๋‘” ํ”„๋กœ์ ํŠธ์— ์ง€์›์„ ํ–ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ todoCalendar์ธ๋ฐ todo๋ฅผ CRUDํ•˜๊ณ , ๋‹ฌ๋ ฅ๋„ ์ถ”๊ฐ€ํ•ด ๋‚ ์งœ๋ณ„๋กœ ๊ด€๋ฆฌํ• ์ˆ˜ ์žˆ๋Š” ์›น์•ฑ์ด๋‹ค.
ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ๋‹ฌ๋ ฅ๋ถ€๋ถ„์€ front-end์—์„œ์˜ ๊ตฌํ˜„์ด ์‹œ๊ฐ„๋‚ด์— ๋๋‚˜์ง€ ์•Š์„๊ฒƒ๊ฐ™์•„ ์ค‘๊ฐ„์— ์ œ์™ธํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค..

๊ธฐ์ˆ ์Šคํƒ

front-end

back-end

Deploy

UI






๋‚ด๊ฐ€ ๋‹ด๋‹นํ•œ ๋ถ€๋ถ„

๋ฐฑ์—”๋“œ
๋‚˜๋Š” ๋‘๋ฒˆ์˜ ํ”„๋กœ์ ํŠธ ๋™์•ˆ์— ํ”„๋ก ํŠธ,๋ฐฑ ๋‘˜๋‹ค ํ•ด๋ณด๊ณ ์‹ถ์—ˆ๋‹ค.
4์ฃผํ”„๋กœ์ ํŠธ์—๋Š” ํ”„๋ก ํŠธ๋ฅผ ํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ 2์ฃผํ”„๋กœ์ ํŠธ์—๋Š” ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ž‘์—…๋‚ด์šฉ

  • todo, todoCalender API ์ž‘์„ฑ (calendar ๋ถ€๋ถ„์—์„œ ์›”๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์–ด๋ ค์› ๋Š”๋ฐ Sequelize์˜ {op}๋กœ ๋‚ ์งœ๋ฐ์ดํ„ฐ์˜ ์•ž๋ถ€๋ถ„์„ ์ž˜๋ผ๋‚ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.)

  • crypto ๋ชจ๋“ˆ๊ณผ salt๊ฐ’์„ ์ด์šฉํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”

  • AWS ๋ฐฐํฌ (EC2์™€ RDS์˜ ๋ณด์•ˆ๊ทธ๋ฃน์„ ๋งŒ๋“œ๋Š”๊ฒŒ ์ฒ˜์Œ์ด๋ผ ์–ด๋ ค์› ์ง€๋งŒ ๋‹ค์Œ๋ฒˆ์—” ๋” ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค, Filezilla์™€ vim ๋ฅผ ์ด์šฉํ•ด์„œ EC2์„œ๋ฒ„๋ฅผ ์—ด์–ด๋ณด๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค.)

  • Jest๋กœ ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋งŒ๋“ค๊ธฐ ( supertest๋ผ๋Š” ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„์— ์ง์ ‘ ์š”์ฒญ์„ ๋„ฃ๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด๋ดค๋‹ค. ํ•˜์ง€๋งŒ ์„ธ์…˜์ธ์ฆ ๊ธฐ๋ฐ˜ API๋ผ ์š”์ฒญ์— ์„ธ์…˜์„ ๋‹ด์•„๋ณด๋‚ด์•ผ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๊ด€๊ณ„์ƒ ๊ทธ๋ถ€๋ถ„์€ ๊ณต๋ถ€ํ•˜์ง€ ๋ชปํ•ด์„œ ๋ชจ๋“  API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค์ง€๋Š” ๋ชปํ–ˆ๋‹ค.)

๐Ÿง ์ด์Šˆ & ํ•ด๊ฒฐ

1. ์ƒˆ๋กœ์šด feature branch๋ฅผ ๋งŒ๋“ค๊ณ , ์ƒ์œ„ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๋ ค git checkout ์ƒ์œ„๋ธŒ๋žœ์น˜ ๋ฅผ ํ–ˆ์œผ๋‚˜ ์ด๋™๋˜์ง€ ์•Š์•˜๋‹ค.

  • ์ปค๋ฐ‹์„ ํ•˜๋‚˜ ํ•˜๊ณ  ์ด๋™ํ•˜๋‹ˆ ๋˜์—ˆ๋‹ค.

2. git clone์„ ํ•˜๊ณ  ์ •ํ™•ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ๋Š”๋ฐ ์œ ํšจํ•˜์ง€์•Š์€ ์œ ์ €์ •๋ณด๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜์™”๋‹ค.

  • ๊ตฌ๊ธ€๋ง ํ•ด๋ณธ ๊ฒฐ๊ณผ, ๋กœ๊ทธ์ธ 2์ค‘ ๋ณด์•ˆ์„ค์ •์„ ํ•ด๋‘๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋ณด์•ˆ์— ์ข‹์„๊ฒƒ๊ฐ™์•„ ์ตœ๊ทผ์— ์„ค์ • ํ–ˆ๋Š”๋ฐ ๋ถˆํŽธํ•ด์กŒ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ์•ˆ์œผ๋กœ๋Š” git์—์„œ token์„ ๋งŒ๋“ค๊ณ  ๊ทธ ๊ฐ’์„ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋Œ€์‹  ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

3. commit์„ vim์œผ๋กœ ํ• ์ˆ˜์žˆ๋‹ค๋Š”๊ฑธ ๋“ฃ๊ณ  git commit์—์„œ ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋ €๋Š”๋ฐ vim์ด ์•ˆ๋‚˜์™”๋‹ค.

  • ๊ธฐ๋ณธํŽธ์ง‘๊ธฐ๊ฐ€ GRU nano๋ผ๋Š” ๊ฑฐ์˜€๋Š”๋ฐ vim์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์ดํ›„ ์ปค๋ฐ‹ ํ…œํ”Œ๋ฆฟ๋„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.
    ๋น„์–ด์žˆ๋Š” ์ค„์„ ์ž๋™์œผ๋กœ ์ธ์‹ํ•ด์„œ ์ œ๋ชฉ๊ณผ ์„ค๋ช…, ์„ธ๋ถ€์„ค๋ช…์œผ๋กœ ๋‚˜๋‰˜๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค.

4. ์ฝ”๋”ฉํ•˜๊ณ ์žˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ 339๊ฐœ๊ฐ€ stage์ƒํƒœ๋กœ ๋˜์–ด์žˆ์—ˆ๋‹ค.

  • ๊นœ์ง๋†€๋ผ์„œ .gitignore๋ฅผ ๋งŒ๋“ค๊ณ  node_modules๋ฅผ ์ ์–ด์ฃผ์—ˆ๋‹ค.
    ์ •๋ง ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ƒํƒœ์—์„œ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋‹ˆ ๋ฐฐ์šฐ๋Š”์ ์ด ์ •๋ง ๋งŽ๋‹ค.

5. ์ž‘์„ฑ๋œ ์„œ๋ฒ„์— ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”๋ฐ ๋ชจ๋“  ์‘๋‹ต์ด /๋ผ์šฐํ„ฐ์—๋Œ€ํ•œ ์‘๋‹ต์ด์—ˆ๋‹ค

app.use(/) ๋ถ€๋ถ„์„ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๋‹ˆ ์ž˜ ์ž‘๋™ํ•˜๋Š”๊ฑธ ๋ณด๊ณ  app use์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋‹ˆ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ์ด๊ฒŒ ์‹œ์ž‘์ ์ด๊ณ  ๊ทธ ๋’ค์— ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ๋“ค์„ ๋ง๋ถ™์—ฌ๋‚˜๊ฐ€๋Š”๊ตฌ์กฐ๊ฐ™๋‹ค. ์ง€๊ธˆ๋‹น์žฅ ์šฐ๋ฆฌ์—๊ฒ ๋ถˆํ•„์š”ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ app.get์œผ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

6.postman ํ…Œ์ŠคํŠธ ๋„์ค‘ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์˜ body๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋ฉด์„œ type error๊ฐ€ ๋‚ฌ๋‹ค.


  • ์š”์ฒญ์ชฝ์— console.log๋Š” ์‹ ํ˜ธ๋ฅผ ๋ฐ›๊ณ  ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ , req์˜ body๊ฐ€ undefined๋กœ ๋‚˜์˜ค๋Š”๊ฑธ๋กœ ๋ด์„œ ์š”์ฒญ์˜ body ์ž‘์„ฑ๋ฒ•์ด๋‚˜ ์„œ๋ฒ„์ชฝ์˜๋ฌธ์ œ๋ผ ๋ณด์˜€๋Š”๋ฐ ํ™•์ธ๊ฒฐ๊ณผ body์˜ chunk๊ฐ’์„ jsonํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์—†์–ด์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์˜€๋‹ค. ํŒŒ์‹ฑํ•ด์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋ถ™์ด๊ณ ๋‚˜๋‹ˆ ์ž˜ ์ž‘๋™ํ•˜์˜€๋‹ค.

7. EC2์—์„œ upstream์„ pull ํ•ด์˜ค๋ฉด์„œ ์ถฉ๋Œ์ด ์ƒ๊ฒผ๋‹ค.EC2์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋ณ‘ํ•ฉํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํด๋”๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ pullํ•˜๋ ค๊ณ ํ–ˆ๋Š”๋ฐ ํด๋”๋ฅผ ์ง€์›Œ๋„ git๊ธฐ๋ก์—๋Š” ํŒŒ์ผ์ด ๋ฐ›์•„์˜จ๊ฑฐ๋กœ ๊ธฐ๋ก๋˜์–ด์žˆ์–ด์„œ ๋‹ค์‹œ pull์ด ์•ˆ๋๋‹ค.

  • ๊นƒ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ๋„ฃ์–ด์คฌ๋‹ค. ๊นƒ๊ธฐ๋ก์„ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.
//1. ๊ธฐ์กด์˜ ๊นƒํžˆ์Šคํ† ๋ฆฌ ์‚ญ์ œ
$ rm -rf .git
//2. ์ƒˆ๋กœ์šด ๊นƒ ์„ค์ •
$ git init

8. EC2์— ๋ฐ›์•„๋‘” ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋œ๋‹ค.

  • config.json ํŒŒ์ผ์„ vim์„ ์ด์šฉํ•ด rds์˜ ์—”๋“œํฌ์ธํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์—ˆ๋‹ค.

9. ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ์š”์ฒญ์‘๋‹ตํ•˜๋Š”๋ฐ ์ฟ ํ‚ค๊ฐ€ ์งง์€์‹œ๊ฐ„์— ์ž๊พธ ๋งŒ๋ฃŒ๋˜์—ˆ๋‹ค.

  • ์ฟ ํ‚ค ์†Œ๋ฉธ์‹œ๊ฐ„์„ 1์‹œ๊ฐ„์œผ๋กœ ๋Š˜๋ ค์ฃผ๋Š” ๋ถ€๋ถ„์„ ์ž‘์„ฑํ–ˆ๋‹ค.

10. ๋ถ„๋ช… dev๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  clone ํ•ด์™”๋Š”๋ฐ master๋ธŒ๋žœ์น˜๋งŒ ๋ณด์ธ๋‹ค.

๋ ˆํฌ๋ฅผ cloneํ•œํ›„ ๊ฑฐ๊ธฐ์„œ dev๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๋ฉด dev๋‚ด์šฉ๋“ค์ด ์ƒ๊ธด๋‹ค (checkout dev)

11.Sequelize.updateํ›„ .then์œผ๋กœ ๊ฒฐ๊ณผdata๋ฅผ ์ „์†กํ•ด์คฌ๋Š”๋ฐ ๊ฐ’์ด ๋น„์–ด์žˆ์—ˆ๋‹ค.

  • update๋จผ์ € ํ•œํ›„ findOne์œผ๋กœ update๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์™€์„œ ์ „์†กํ•ด์ฃผ์—ˆ๋‹ค.

12.๋กœ์ปฌ์—์„œ ์™„์„ฑ๋œ ์„œ๋ฒ„๋ฅผ config.json๋„ RDS์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  filezilla๋กœ EC2์— ๋„ฃ์–ด์ฃผ์—ˆ๋Š”๋ฐ sequelize db:migrate๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค.

  • db์™€์˜ ์—ฐ๊ฒฐ์ด ๋ฌธ์ œ๋ผ ์ƒ๊ฐ๋˜์„œ config.jsonํŒŒ์ผ๋งŒ ์‚ดํŽด๋ดค๋Š”๋ฐ, ๊ฒฐ๊ตญ๋ฌธ์ œ๋Š” ์‚ฌ์šฉํ•˜๋Š” db์— ์ด๋ฏธ ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ ์Šคํ‚ค๋งˆ๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ์–ด์„œ ๊ทธ๋žฌ๋˜๊ฑฐ์˜€๋‹ค. db๋ฅผ ๋น„์›Œ์ฃผ๊ณ  ๋‹ค์‹œ migrateํ–ˆ๋”๋‹ˆ ์ž˜ ๋˜์—ˆ๋‹ค.

13. cors samesite๋ฌธ์ œ

ํ…Œ์ŠคํŠธ์ค‘ ์„œ๋ฒ„์ชฝ์„ ๋‹ด๋‹นํ•˜๋Š” ๋‚˜์™€ ํŽ˜์–ด์˜ 2๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์˜€์—ˆ๋Š”๋ฐ
ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ ์ด๋ถ€๋ถ„ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
์ฐพ์•„๋ณด๋‹ˆ ์ด๋Ÿฐ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ๊ฐ„ ์š”์ฒญ์œ„์กฐ(CSRF)๋ฅผ ํ• ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ์ ์œผ๋กœ ์ทจ์•ฝํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

14. supertest๋กœ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  test๋ฅผ ๋Œ๋ ค ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”๋ฐ postman์œผ๋กœ ๋ณด๋‚ผ๋•Œ์™€ ์‘๋‹ต์ด ๋‹ค๋ฅด๊ณ  .catch() ๋ฌธ์—๊ฑธ๋ ค ์—๋Ÿฌ๋ฅผ ์‘๋‹ตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๋จผ์ € ์—๋Ÿฌํ•ธ๋“ค๋ง์— ๋Œ€ํ•ด

//๋‚˜์˜์ฝ”๋“œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๋Š”๊ณผ์ •์€ ์—†์—ˆ๋‹ค.
.catch(()=>{
  res.status(400).send({error: '400 Bad Request'})
  
/*ํ”„๋กœ์ ํŠธ ์˜คํ”ผ์Šค์•„์›Œ์— ์งˆ๋ฌธํ•œ ๊ฒฐ๊ณผ ์ด๋Ÿฐ๊ฒฝ์šฐ console.log๋ฅผ API์ดˆ์ž…์— ๋„ฃ์–ด์„œ ์š”์ฒญ์ด 
API๊นŒ์ง€ ์ž˜ ๋“ค์–ด์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ดํ›„ req.body๋ฅผ ํ†ตํ•ด ์š”์ฒญ ๊ฐ’๋“ค์ด ์ž˜ ๋“ค์–ด์˜ค๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด ์—๋Ÿฌ์ฝ”๋“œ๋ฅผ๋ณด๊ณ  ํ•ด๋‹น๋ถ€๋ถ„์— ๊ฐ€์„œ err๋ฅผ console.log๋กœ ํ™•์ธํ•ด๋ณธ๋‹ค.*/
.catch((err)=>{
    console.log(err);
    res.status(400).send({error: '400 Bad Request'});
// console.log์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋‚˜์™”๊ณ  ํ™•์ธ๊ฒฐ๊ณผ test๋ชจ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์–ด์žˆ์—ˆ๋‹ค.

  • config.jsonํŒŒ์ผ์—๋Š” ๊ฐœ๋ฐœ์‹œ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ…Œ์ŠคํŠธ์‹œ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋‹ค.
    ๋‚ด๊ฐ€ jest๋ฅผ ์‚ฌ์šฉํ•ด test๋ฅผ ๋Œ๋ฆฌ๋Š” ์ˆœ๊ฐ„ ์ด๋Š” ๋ณ€๊ฒฝ๋œ๋‹ค.

    ๊ทธ๋ž˜์„œ test๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ž…๋ ฅํ•ด์ฃผ์—ˆ๋”๋‹ˆ ์ž˜ ๋™์ž‘ํ•˜์˜€๋‹ค.

15.supertestํ…Œ์ŠคํŠธ๋ฌธ timeout์—๋Ÿฌ

  • ์•„๋งˆ ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์œผ๋กœ 5์ดˆํ›„์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ ๊ทธ ์‹œ๊ฐ„์•ˆ์— supertest๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ธ๊ฒƒ ๊ฐ™๋‹ค. ๊ตฌ๊ธ€๋งํ•ด๋ณธ๊ฒฐ๊ณผ ๊ด€๋ จ๋‚ด์šฉ์ด ์žˆ์–ด ์‹œ๊ฐ„์„ ๋„‰๋„‰ํ•˜๊ฒŒ 30์ดˆ๋กœ ๋ณ€๊ฒฝ์‹œ์ผฐ๋‹ค.
 describe('POST /login', () => {
        test('login success', async (done) => {
            const response = await request(app).post('/login').send({
                "email": "praconfi@gmail.com",
                "password": "dksld",
            })
            expect(response.status).toBe(200);
            expect(response.body).toHaveProperty('id', 'email', 'username');
            done();
        }, 30000);
    })

https://stackoverflow.com/questions/49603939/async-callback-was-not-invoked-within-the-5000ms-timeout-specified-by-jest-setti

16.ํ…Œ์ŠคํŠธ ์ข…๋ฃŒํ›„ ๋‚จ์•„์žˆ๋Š” ๋ฉ”์„ธ์ง€

๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด ํ…Œ์ŠคํŠธ๋‚ด์—์„œ ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค.
๊ตฌ๊ธ€๋ง๊ฒฐ๊ณผ ํ…Œ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰์— done();์„ ๋ถ™์ด๋ผ๊ณ  ํ•ด์„œ ๋‹ค ๋ถ™์˜€๋Š”๋ฐ๋„ ๊ฐ™์€์ฆ์ƒ์ด ๋ณด์—ฌ์„œ
์•„๋ž˜ ์„ค๋ช…์—์„œ ํ•˜๋ผ๋Š”๋Œ€๋กœ --detectOpenHandlers๋ฅผ ๋ถ™์ด๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

17. ์Šคํ‚ค๋งˆ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๋ฅผ ์ˆ˜์ •(db ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜)ํ–ˆ๋Š”๋ฐ ์ ์šฉ์ด ์•ˆ๋˜์—ˆ๋‹ค.

  • pm2๋ฅผ ์ข…๋ฃŒํ–ˆ๋‹ค ๋‹ค์‹œ์ผœ๋‹ˆ ์ ์šฉ๋˜์—ˆ๋‹ค. pm2๋„ ๋…ธ๋“œ๋ชฌ์ฒ˜๋Ÿผ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜์ธ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹Œ๊ฐ€๋ณด๋‹ค.

18. ํ•˜๋‚˜๋งŒ ์ง€์šฐ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ๋Š”๋ฐ ๋ชจ๋“ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ ธ๋ฒ„๋ฆฐ๋‹ค.

  • delete๋ฉ”์†Œ๋“œ๋ฅผ์ด์šฉํ•ด body์— ์ œ๊ฑฐํ•  todo์˜ id๋ฅผ ์‹ค์–ด๋ณด๋ƒˆ๋Š”๋ฐ ๊ทธ id๊ฐ’์ด ์ œ๋Œ€๋กœ ์ „๋‹ฌ์ด ์•ˆ๋˜์–ด์„œ ๋ฐœ์ƒํ–ˆ๋˜ ์ด์Šˆ์˜€๋‹ค. axios์—์„œ body์— ๋‚ด์šฉ์„ ๋‹ด์„๋•Œ delete๋Š” post๋‚˜ patch๋“ฑ๊ณผ๋Š” ๋‹ค๋ฅธ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋Š”๊ฒƒ์ด์˜€๋‹ค. ๊ด€๋ จ๋งํฌ ๋ณด๋ฉฐ ๋‹ค์‹œ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

https://velog.io/@bigbrothershin/Axios-delete-%EC%9A%94%EC%B2%AD-%EC%8B%9C-body%EC%97%90-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%84%A3%EB%8A%94-%EB%B2%95

๐Ÿ™ ๋Š๋‚€์ 

์ข‹์•˜๋˜์ 

์ฒ˜์Œ์œผ๋กœ ํ•ด๋ณธ ํ”„๋กœ์ ํŠธ์˜€๋Š”๋ฐ ๊ทœ๋ชจ๋ฅผ ๋– ๋‚˜์„œ ๋‚ด๊ฐ€ ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ผ๋Š”๊ฒƒ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๊ธฐ๋Šฅ๊ตฌํ˜„์„ ํ•˜๊ณ  ๋ฐฐํฌ๊นŒ์ง€ ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๊ธฐ๋ถ„์ด ์ข‹๋‹ค.

์•„์‰ฌ์› ๋˜์ 

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

profile
์—ฐ์Šต๊ณผ ์ž์‹ ๊ฐ

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 8์›” 23์ผ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค^^ ์„œ๋ฒ„๋ž‘ ํด๋ผ๋ฅผ ๊ฐ™์ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊นŒ์ง€ ์ž‘์„ฑํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ ๋” ํƒ„ํƒ„ํ•ด์ง„ ๋ชจ์Šต์œผ๋กœ ๋งŒ๋‚˜์š”!! ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€