PROJECTS

Team Project 5 | ๐Ÿ‘จ๐Ÿป‍๐ŸŽจ KPT | ์œ ํ™” ์ œ์ž‘ ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ

nicesugi 2022. 7. 6. 16:09

๐Ÿ‘‹ ํฌ์ŠคํŒ… ๋‚ด์šฉ : Github ์ฃผ์†Œ | ๊ฒฐ๊ณผ๋ฌผ ์˜์ƒ | ํŠœํ„ฐ๋‹˜๋“ค ํ”ผ๋“œ๋ฐฑ | KPT | ๊ฒฐ๊ณผ๋ฌผ ์บก์ณ | ๊ณต๋ถ€ํ•ด์•ผํ•  ๊ฒƒ | ํŒ€ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

๐Ÿ‘จ๐Ÿป‍๐ŸŽจ Github

https://github.com/2JYK/The-season-of-N.11_backend

https://github.com/2JYK/The-season-of-N.11_frontend

 

ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ

๐Ÿ–ผ ํŠœํ„ฐ๋‹˜๋“ค ํ”ผ๋“œ๋ฐฑ

  • ์ด์ƒ๋ก ํŠœํ„ฐ
    • ๋ฐฐํฌ๊นŒ์ง€ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์ธ์ฆ์ด ์•ˆ๋˜์—ˆ์„๋•Œ๋Š” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋กœ์ง๊ณผ style์ž…๋ ฅํ•ด์„œ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๋„๋ก ๋กœ์ง์„ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์šฉํ•  ์Šคํƒ€์ผ ์‚ฌ์ง„์„ ์„ ํƒํ•˜๊ฒŒ ํ•ด์„œ ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ์ˆ˜์žˆ์—ˆ๋˜์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. nested serializer์™€ SerializerMethodFieldํด๋ž˜์Šค ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•˜์…”์„œ ์›ํ•˜๋Š” Response ๋ฐ์ดํ„ฐ๋ฅผ ์„ค๊ณ„ํ•œ๋Œ€๋กœ ์ž˜ ๋ฝ‘์•„์ฃผ์…จ์Šต๋‹ˆ๋‹ค. is_anonymous์™€ ๊ฐ™์€ ์†์„ฑ๋„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณด์‹œ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ์ž‘์„ฑํ•˜๊ธฐ์œ„ํ•ด์„œ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์–ด๋–ค ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด์„œ ์„œ๋กœ ํ† ๋ก ํ•ด๋ณด๊ณ  ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ์ž„ํฌํŠธ ํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์ „์ฒด์ ์ธ ์ฝ”๋“œ ๋ ˆ์ด์•„์›ƒ์—๋„ ์‹ ๊ฒฝ์„ ๋งŽ์ด ์“ด ๋…ธ๋ ฅ์ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ• ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ print๋ฌธ๋„ ์ „๋ถ€ ์‚ญ์ œ ์ž˜ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธํ•˜๋ฉด์„œ ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด๋กœ ๋Œ“๊ธ€ ๋ชจ๋‹ฌ ์ฐฝ ๊ตฌํ˜„ํ•˜๊ธฐ ํž˜๋“œ์…จ์„ ํ…๋ฐ ๋๊นŒ์ง€ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์…จ๊ณ  ์ˆ˜๊ณ  ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. pylint๋‚˜ ์ •์  ๋ถ„์„๋„๊ตฌ๋กœ ์“ฐ์ง€์•Š๋Š” importํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์ •๋ฆฌํ•ด์ฃผ์‹œ๋ฉด ๋” ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์ด์ƒํ˜ธ ํŠœํ„ฐ
    • ์Šคํƒ€์ผ์— ์ œํ•œ์„ ๋‘์…”์„œ inference ์†๋„๋‚˜ ํ€„๋ฆฌํ‹ฐ ์ธก๋ฉด์—์„œ ์กฐ๊ธˆ ๋” ์™„์„ฑ๋„ ์žˆ๋Š” ์•„์›ƒํ’‹์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์•Œ๋ ค๋“œ๋ฆฐ ๋ชจ๋ธ ์™ธ์— ์ƒˆ๋กœ์šด ๋ชจ๋ธ ์ฐพ์•„๋ณด์‹œ๋ฉด์„œ ์„œ๋น„์Šค์— ์ ํ•ฉํ•œ ๋ชจ๋ธ ์ฐพ์•„๋ณด์‹  ๋ถ€๋ถ„ ์ž˜ํ•˜์‹  ๊ฒƒ ๊ฐ™๊ณ , ์Šคํƒ€์ผ์ด ์ž˜ ์ž…ํ˜€์ง„ ๊ฒƒ๋„ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ํ…Œ์ŠคํŠธํ•ด ๋ณด์‹œ๋ฉด์„œ ์‹ ๊ฒฝ์„ ๋งŽ์ด ์จ์ฃผ์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์–‘๋ด‰ํ˜„ ํŠœํ„ฐ
    • ๋ฐฐํฌ ๋งˆ๋ฌด๋ฆฌํ•˜์‹  ์  ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค!
      ๋™์˜์ƒ์œผ๋กœ๋งŒ ๋ด์„œ ๊ทธ๋ ‡๊ธด ํ•œ๋ฐ ํšŒ์›๊ฐ€์ž…์ด ์ž˜ ๋˜์—ˆ๋‹ค๋ฉด ์ž˜ ๋˜์—ˆ๋‹ค๋Š” alert๋„ ๋„์›Œ์ฃผ๊ณ 
      ๋กœ๊ทธ์ธ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
      View ๊ฐ ํด๋ž˜์Šค ๋‚ด ํ•จ์ˆ˜๋งˆ๋‹ค ํ•ด๋‹น ๋‚ด์šฉ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์ฃผ์„์œผ๋กœ ์ž˜ ์ž‘์„ฑํ•ด์ฃผ์–ด ๋ณด๊ธฐ
      ํŽธํ•˜์˜€๊ณ , ํผ๋ฏธ์…˜, ์ธ์ฆํด๋ž˜์Šค ์ž˜ ์‚ฌ์šฉํ•˜์‹  ์  ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
      Article, Comment ํ…Œ์ด๋ธ” ๋‚ด ์ˆ˜์ •์ผ์ž ์ปฌ๋Ÿผ๋ช… ์˜คํƒ€์žˆ์Šต๋‹ˆ๋‹ค.
      ์ „์ฒด์ ์œผ๋กœ Serializer ์‚ฌ์šฉ์ด๋ผ๋˜๊ฐ€ ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ ๋“ฑ์„ ์ข…ํ•ฉํ•˜์—ฌ ๋ณด๊ธฐ ํŽธํ•œ ์ฝ”๋“œ๊ฐ€
      ๋งŽ์•„์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ์•„์šธ๋Ÿฌ ๋ชจ๋‹ฌ์ฐฝ ์—ด๊ณ  ๋‹ซ๋Š”๋ฐ ์žˆ์–ด ์ „๋ฐ˜์ ์œผ๋กœ ๋ชจ๋‹ฌ ๊ตฌํ˜„์— ๋Œ€ํ•ด
      ๊ณ ์ƒํ•˜์‹  ๋ถ€๋ถ„ ์ธ์ง€ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋งˆ๋ฌด๋ฆฌ ์ž˜ํ•˜์…จ์Šต๋‹ˆ๋‹ค!!
  • ์ด์ฐฝํ˜ธ ํŠœํ„ฐ
    • README์— ERD, API ๋ช…์„ธ์„œ ๋“ฑ ํ”„๋กœ์ ํŠธ์˜ ํ๋ฆ„์„ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•ด์ฃผ์‹  ๊ฒƒ์€ ๋„ˆ๋ฌด ์ข‹์Šต๋‹ˆ๋‹ค!
      ์ „๋ฐ˜์ ์œผ๋กœ serializer๋‚˜ CBV๋ฅผ ํ™œ์šฉํ•ด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ ํ•ด์ฃผ์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!
      ๋‹ค์Œ๋ฒˆ ๋ฐฐํฌ ๋•Œ๋Š” loaddata์™€ dumpdata๋ฅผ ํ™œ์šฉํ•ด์„œ Mysql์„ ์‚ฌ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ๊ถŒ์žฅ๋“œ๋ ค์š”!
      ์ง€๊ธˆ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„ํ•˜์‹œ๋Š๋ผ ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค!

 

๐Ÿ–ผ Keep

  • ๊ธฐํš
    • ๊ธฐ๋Šฅ๋ช…์„ธ์„œ + ํ”ผ๊ทธ๋งˆ + ERD + ์ปจ๋ฒค์…˜ ๋“ฑ
    • ๊ธฐํš์— ๋งž์ถฐ ๊ตฌํ˜„ํ•œ ํ›„ ๋ณด์™„์  ๋ฐ ์ถ”๊ฐ€์ ์„ ์ฐพ์•„ ๋ฐ˜์˜ํ•˜๋Š” ๋ถ€๋ถ„
  • ๊ธฐ๋ณธ ๊ตฌํ˜„ ์™„์„ฑ ํ›„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • ํ•„์š”ํ•œ ์ตœ์†Œ ๊ธฐ๋Šฅ์„ ๋ชฉํ‘œ์น˜๋กœ ์žก์•„์„œ ๊ตฌํ˜„
    • ๊ตฌํ˜„๋œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰
  • API ๋ฐ DB ์„ค๊ณ„์— ๋Œ€ํ•œ ๋กœ์ง
    • ๊ธฐํš์— ์ตœ๋Œ€ํ•œ ๋งž์ถ”๋ฉฐ ๋‚˜์ค‘์— ๋ฐ”๋€Œ๋Š” ์ƒํ™ฉ์ด ์˜ค๋”๋ผ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜
  • RESTful ์„ ์œ„ํ•œ ์„ฑ์žฅ
    • backend, frontend ๋ถ„๋ฆฌ
    • serializer ํ™œ์šฉ
  • ๋ฐฐํฌ
    • Gunicorn
    • AWS - EC2, S3, Cloud9 IDE
  • ๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ ์ ์šฉ
  • ํŒ€์›Œํฌ
    • Pair programming ์ด์šฉํ•˜์—ฌ 2์ธ 1์กฐ๋กœ ๋‚˜๋ˆ„์–ด ์ง„ํ–‰

 

๐Ÿ–ผ Problem

  • git issue ํ™œ์šฉ๋„ ๋‚ฎ์Œ
    • bug ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐํ•˜๋Š๋ƒ issue ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ
  • ๋ชจ๋ธ๋ง
    • ๋ถ๋งˆํฌ ๋ฐ ์ข‹์•„์š” ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Œ → user model ์•ˆ์— ์ƒ์„ฑํ•ด ์œ ์—ฐํ•œ serializer ํ™œ์šฉ
  • ์šด์˜์ฒด์ œ์— ๋”ฐ๋ฅธ datetime์˜ strftime ์‚ฌ์šฉ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด
    • mac : datetime.now().strftime('%Y-%m-%d%H:%M:%s')
    • window : datetime.now().strftime('%Y%m%d%H%M%S')
  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์ˆ˜๋ฉด ํฌ๊ธฐ → ์‹œ๊ฐ„๊ด€๋ฆฌ
  • Javascript
  • Bookmark serializer๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด ๋ถˆ๋Ÿฌ์™€์•ผ ํ•จ
    • User model ์•ˆ์— ๋ถ๋งˆํฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„์ค˜ Article serializer๋ฅผ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•  ์˜ˆ์ •

 

๐Ÿ–ผ Try

  • git hub
    • Issues ์ž‘์„ฑ
  • ๋ชจ๋ธ๋ง
    • ForeignKey ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ManyToMany ํ˜น์€ OneToOne Feild๋ฅผ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ์ฐธ์กฐ ๊ด€๊ณ„์— ์ต์ˆ™ํ•ด์ง€๊ธฐ
  • ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต ๋ฐ ์ „์†ก ์ตœ์ ํ™”
    • ํ•ด๋‹น ๋ถ€๋ถ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ ์ ˆํ•˜๊ฒŒ ๊ตํ™˜ ํ•„์š”

 

๐Ÿ‘จ๐Ÿป‍๐ŸŽจ ๊ฒฐ๊ณผ๋ฌผ

์ขŒ-๋กœ๊ทธ์ธ / ์šฐ- ํšŒ์›๊ฐ€์ž…

- ๋กœ๊ทธ์ธ์ด ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ๋ฐ”๋กœ ์ด๋™์‹œ, ๋กœ๊ทธ์ธํ™”๋ฉด์œผ๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

- ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ์‹œ ๊ฒฝ๊ณ ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.


์ขŒ - ๋ฉ”์ธ ํŽ˜์ด์ง€ / ์šฐ - ๋ฐ˜์‘ํ˜•์›น + JWT ๋ฐœ๊ธ‰ํ™•์ธ

- simplejwt ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์ด๋ฏธ์ง€ ๋ณ€ํ™˜ ์‹œํ‚ฌ ์‚ฌ์ง„๊ณผ ๋‚ด์šฉ ์ž‘์„ฑ

- ์Šคํƒ€์ผ์€ ์ด 11๊ฐœ๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ€๋กœ ์Šคํฌ๋กค์„ ์ด์šฉํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ๋งˆ์ดํŽ˜์ด์ง€๋Š” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€๋“ค์˜ ๋ชจ์Œ๊ณผ ๋ถ๋งˆํฌ ๋ชจ์Œ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ์žˆ๊ณ , ๊ธฐ๋ณธ ํ™”๋ฉด์€ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€๋“ค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค(์ขŒ)


์ขŒ- ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ธ€ ๋ชจ์•„๋ณด๋Š” ํŽ˜์ด์ง€ / ์šฐ- ๋ถ๋งˆํฌ ๋ชจ์•„๋ณด๋Š” ํŽ˜์ด์ง€

- ์žฌ๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ˆ˜์ •๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ œ๋ชฉ,๋‚ด์šฉ์„ ์ˆ˜์ •-์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

- ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‚จ์˜ ์ž‘์„ฑ๊ธ€ ์‚ญ์ œ X)


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ณต๋ถ€ํ•ด์•ผํ•  ๊ฒƒ

  • ๋ชจ๋ธ๋ง
  • ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฆฌ๋ทฐ์™€ ๋ณด์ˆ˜๋ฅผ ํ†ตํ•œ DRF ๊ณต๋ถ€
  • Django test( ์ž๋™ํ™” ํ…Œ์ŠคํŠธ )
  • JWT
  • Javascript
  • ๋ฐฐํฌ
  • AWS

 

๐Ÿ’ญ Feel

  • ์œค์Šฌ๊ธฐ

์ ์  ์™„์„ฑ๋„๊ฐ€ ๋†’์•„์ ธ๊ฐ€๋Š” ๊ฒฐ๊ณผ๋ฌผ๋“ค์— ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” JWT์™€ NST์„ ์ด์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ํŒŒํŠธ๋ฅผ ๋‹ด๋‹นํ–ˆ์—ˆ๋Š”๋ฐ, simplejwt๋ฅผ ์ด์šฉํ•˜๋‹ˆ url๊ณผ view๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”์—†์ด ๋กœ๊ทธ์ธ-๋กœ๊ทธ์•„์›ƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ข‹์•˜์Šต๋‹ˆ๋‹ค. nst๊ฒฐ๊ณผ๋ฌผ์„ ์„œ๋ฒ„,DB,๋ธŒ๋ผ์šฐ์ €์— ๋„ฃ๋Š” ์ž‘์—…์ด ์–ด๋ ค์› ๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต์— ๋Œ€ํ•œ ์ŠคํŠธ๋ ˆ์Šค๋„ ๋งŽ์ด ๋ฐ›์•˜์—ˆ์œผ๋‚˜ ์ €ํฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ์—์„œ ๊ตฌํ˜„์„ ์™„์„ฑ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์ด ์ •๋ง ๊ต‰์žฅํžˆ ๋ฐ•์ˆ˜๋ฅผ ์น  ์ •๋„๋กœ ๊ฐ๋™์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ ์šฉํ•˜๋Š” ๋ชจ๋ธ๋ง, ๋งค์ง ๋ฉ”์†Œ๋“œ, ํ•„๋“œ ์˜ต์…˜, ์ปค์Šคํ…€ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๋ถ€๋ถ„์€ ์™„๋ฒฝํ•˜๋‹ค๋ผ๊ณ  ์ „ํ˜€ ํ•  ์ˆ˜ ์—†๋Š” ๋“ฏ ํ•˜์—ฌ ๋” ์‚ฌ์šฉํ•ด๋ณด๊ณ  ๋” ์ž‘์„ฑํ•ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Django๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ์žฅ๊ณ  ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•œ ์žฅ์ ๋“ค์ด ์žˆ์—ˆ๊ณ  DRF๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋‹ˆ Serializer๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์„ ๋น„๊ตํ•ด ๋ณผ ์ˆ˜ ์žˆ์–ด ํ“จ์–ด์žฅ๊ณ ์™€ drf ๊ฐ๊ฐ์˜ ์ฝ”๋“œ๋กœ๋„ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์‹ถ์€ ์ƒ๊ฐ๋„ ๋“ญ๋‹ˆ๋‹ค.

Javascript๋Š” ์ฒ˜์Œ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋ณด๋‹ค ๋” ์–ด๋ ค์šด ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— front์—์„œ back์— ์š”์ฒญํ•  ๊ฒฝ์šฐ๊นŒ์ง€ ์ƒ๊ฐํ•ด ๋กœ์ง์„ ๊ตฌ์ƒํ•˜๋Š” ํŽธ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

Pair Programming์„ ์ด์šฉํ•˜์—ฌ ํŒ€ ๋‚ด์—์„œ 2์ธ 1์กฐ๋กœ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ ๋„ˆ๋ฌด ํŽธ๋ฆฌํ–ˆ๊ณ  ๋™์‹œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ˆ ์†Œํ†ต๋„ ๋” ๋งŽ์ด ํ•  ์ˆ˜ ์žˆ์–ด ๊ตฌํ˜„์— ํฐ ๋„์›€์ด ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„๊นŒ์ง€ ๋ชฉํ‘œ๋กœ ์‚ผ์•˜์œผ๋‚˜ ๋ชป ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ถ€๋ถ„์— ์žˆ์–ด ์•„์‰ฌ์›€์ด ๋‚จ์Šต๋‹ˆ๋‹ค.

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

 

 

  • ์ •๋Œ€๊ทผ

์ด๋ฒˆ์— ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์› ๋˜ Django Rest Framework์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ๋งŽ์ด ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋˜ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Serializer์˜ ํ™œ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ Django์˜ ORM๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ๊ฒƒ์„ ๋ถˆ๋Ÿฌ์™€ ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Django์˜ template ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ธฐ์กด Django Session์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  JWT๋ฅผ ํ™œ์šฉํ•ด ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ๋งˆํฌ์™€ ์ข‹์•„์š” ๊ธฐ๋Šฅ์„ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ตฌํ˜„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง์„ ์งœ๋Š”์ง€ ๊ฐ์ด ์žกํžŒ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ถ๋งˆํฌ์™€ ์ข‹์•„์š”๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹Œ user model ์•ˆ์— ๋งŒ๋“ค๊ณ  serializer๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ง„ํ–‰ํ•ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ํ•ด์™”์—ˆ๋Š”๋ฐ, ํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ๋ถ„๋ฆฌํ•ด ์ง„ํ–‰ํ•ด ๋ณด์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

 

  • ์ •์ฃผํ˜„

๊ธฐํš๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋‹ค๋ค„๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ๋ฐฐ์› ๋˜ DRF ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์ง์ ‘ ํ•ด๋ณด๋ฉด์„œ DRF์˜ ๊ฐ ์š”์†Œ๋“ค(ํŠนํžˆ, serializer, orm)์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด์— ๋งž์ถฐ ํ”„๋ก ํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ณผ์ •์—์„œ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  api๋กœ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ•œ๊ณ„๋ฅผ ๋งŽ์ด ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ์ฝ”๋“œ๋ผ๋Š” ๊ฒƒ์„ ์Šค์Šค๋กœ ์ธ์ง€ํ–ˆ์ง€๋งŒ ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ•ด ์Šค์Šค๋กœ ์•„์‰ฌ์›€์„ ๊ฐ–๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํŽ™ํ† ๋ง๊ณผ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ์ถ”ํ›„ ๊ผญ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ ํ•˜๋ฉด์„œ๋„ ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๊ฒช์€ ๋งŒํผ aws(ec2, s3)์™€ gunicorn์— ๋Œ€ํ•œ ๊ฐ์„ ์žก๊ณ  ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์งง์•˜๋˜ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„๋งŒํผ ์•„์‰ฌ์šด ์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ์ด๋ฒˆ ์ฃผ ์‹œ๊ฐ„์„ ํ™œ์šฉํ•ด ๋ณด์™„ํ•ด์„œ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—๋Š” ๊ฐœ์„ ๋œ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€, ๋งŒ์„ธ๐Ÿ‘๐Ÿ‘๐Ÿ‘

 

 

  • ๊น€๊ฒฝ์ˆ˜

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์™„์„ฑ๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋†’์€ ๊ฑฐ ๊ฐ™์•„์„œ ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฑ์•ค๋“œ์™€ ํ”„๋ก ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€๋Š”๋ฐ ์ด๊ฒƒ์„ ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด์„œ ๋ฐฑ ๊ณผ ํ”„๋ก ํŠธ์˜ ์ƒํ˜ธ์ž‘์šฉ ์„œ๋กœ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ๋งŽ์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ„ ๊ณต๋ถ€ํ•˜๊ณ  ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ๋“ค์ด ๋Œ์•„์˜จ ๊ฒŒ ๋Š๊ปด์ ธ์„œ ์ €์—๊ฒŒ๋„ ๊ต‰์žฅํžˆ ์ข‹๊ณ  ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐœํŒ์ด ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ Django Rest Framwork ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ์œผ๋กœ ์‹œ์ž‘ ํ•œ ํ”„๋กœ์ ํŠธ์—ฌ์„œ DRF์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค๊ณผ ๋งค๋ ฅ์„ ์ถฉ๋ถ„ํžˆ ๋Š๊ผˆ๊ณ  ์žฌ๋ฐŒ๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

DRF๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐ ์š”์†Œ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ž‘์šฉํ•˜๋Š”์ง€, ๊ฐ ์š”์†Œ๋“ค์˜ ๊ด€๊ณ„๋“ค์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ์–ด์„œ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๋•Œ๋Š” ์ด ์ ์„ ๊นŠ๊ฒŒ ํŒŒ๊ณ ๋“ค์–ด๊ฐ€์„œ DRF์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋Š๋‚€ DRF์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ serializer, orm์ž…๋‹ˆ๋‹ค. serializer๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์— ๊ต‰์žฅํžˆ ํŽธ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ ์—์„œ๋Š” ์ค‘๋ณต ID๊ฐ’ ์ฒ˜๋ฆฌ, str์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ number๋กœ ๋ณ€ํ™˜, ํ† ํฐ๊ฐ’์ด ์—†๋Š” ์œ ์ € ์ ‘๊ทผ๊ธˆ์ง€, ๋ฐฑ์—์„œ ๋ฐ›์€ response์„ ํ”„๋ก ํŠธ์—์„œ ์ œ์–ดํ•ด ์ฃผ๋Š” ๊ณผ์ • ๋“ฑ๋“ฑ ํ”„๋ก ํŠธ๋„ ๋งค์šฐ ์žฌ๋ฏธ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” ๋ฐฐํฌ๋ฅผ ๋‹ด๋‹นํ–ˆ๋Š”๋ฐ ๋ฐฐํฌ๋Š” AWS๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ  ํ”„๋ก ํŠธ๋Š” S3, ๋ฐฑ์•ค๋“œ๋Š” EC2๋ฅผ ์‚ฌ์šฉ ํ•˜์˜€๊ณ  cloud9์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ตํ•ฉ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์•ค๋“œ๋ฅผ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” Route 53์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ์„ ์ž…ํ˜”์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ๋… ์ˆ˜๋„ ์—†์ด ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. (ํŠนํžˆ ๋ฐฐํฌ…) ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋“ค์„ ๋งŒ๋‚˜๋ฉด ํฌ๊ธฐํ•˜๊ธฐ๋ณด๋‹จ ์–ด๋–ป๊ฒŒ๋“  ํ•ด๊ฒฐํ•˜๊ณ  ๋ฐฉ์•ˆ์„ ์ฐพ๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์„ฑ์žฅํ–ˆ๊ณ  ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ์„ฑ์ทจ๊ฐ์„ ๋Š๋ผ๊ณ  ์„ฑ์žฅํ•˜๋Š” ๊ธฐ๋ถ„์„ ๋Š๊ปด์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋”์šฑ๋” ์™„์„ฑ๋„๊ฐ€ ๋†’์•˜๊ณ  ์˜†์—์„œ ์—ด์‹ฌํžˆ ํ•˜๋Š” ํŒ€์›๋“ค์„ ๋ณด๋ฉฐ ์ € ๋˜ํ•œ ๋ชจ๋“  ๋…ธ๋ ฅ์„ ์Ÿ์•„๋ถ€์—ˆ๊ณ  ์žฌ๋ฐŒ๋Š” ๊ฐœ๋ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค~~

 

 

 

๋ฐ˜์‘ํ˜•