MINJOO-KIM / Movie

test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿ“š ๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  2. ํŒ€

  3. ์„œ๋น„์Šค ์†Œ๊ฐœ

    1. ์„œ๋น„์Šค ๊ธฐํš ๋ชฉํ‘œ

    2. ERD

    3. Component Structure

    4. ๊ตฌํ˜„ ๊ธฐ๋Šฅ

    5. ์˜ํ™” ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  4. ์„ค์น˜ ๋ฐ ์‹คํ–‰

  5. ๋Š๋‚€ ์ 


ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

1. ๊ธฐ๊ฐ„

2024.05.16 ~ 2024.05.23

2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Vue 3.4.27
  • Pinia 2.1.7
  • Django 4.2.13
  • Sqlite3 3.21.0
  • HTML/CSS/JavaScript

3. ํŒ€ ๋…ธ์…˜

OTTogether

4. ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์กฐ

Frontend

๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚assets
 โ”ƒ โ”ฃ ๐Ÿ“œarrow-left-circle.svg
 โ”ƒ โ”ฃ ๐Ÿ“œbox-arrow-in-right.svg
 โ”ƒ โ”ฃ ๐Ÿ“œcaret-down-square.svg
 โ”ƒ โ”ฃ ๐Ÿ“œcoin.svg
 โ”ƒ โ”ฃ ๐Ÿ“œdisneyplus.svg
 โ”ƒ โ”ฃ ๐Ÿ“œmain-img.png
 โ”ƒ โ”ฃ ๐Ÿ“œmovie-repeat.svg
 โ”ƒ โ”ฃ ๐Ÿ“œnetflix.svg
 โ”ƒ โ”ฃ ๐Ÿ“œperson-add.svg
 โ”ƒ โ”ฃ ๐Ÿ“œrecommend-rewrite.svg
 โ”ƒ โ”— ๐Ÿ“œwatcha.svg
 โ”ฃ ๐Ÿ“‚components
 โ”ƒ โ”ฃ ๐Ÿ“‚common
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMovieNavbar.vue
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œOTTNavbar.vue
 โ”ƒ โ”ฃ ๐Ÿ“‚movies
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMovieCard.vue
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMovieDetailInfo.vue
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMovieRecommend.vue
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œRecommend.vue
 โ”ƒ โ”— ๐Ÿ“‚otts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMyPartyCard.vue
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMyPartyCreated.vue
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMyPartyJoined.vue
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œPartyCard.vue
 โ”ฃ ๐Ÿ“‚router
 โ”ƒ โ”— ๐Ÿ“œindex.js
 โ”ฃ ๐Ÿ“‚stores
 โ”ƒ โ”— ๐Ÿ“œmovie.js
 โ”ฃ ๐Ÿ“‚views
 โ”ƒ โ”ฃ ๐Ÿ“œAIRecommendView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œHomeView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œLoginView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œMovieDetailView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œMyPageView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œOTTHomeView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œPartyCreateView.vue
 โ”ƒ โ”ฃ ๐Ÿ“œPartyJoinView.vue
 โ”ƒ โ”— ๐Ÿ“œSignupView.vue
 โ”ฃ ๐Ÿ“œApp.vue
 โ”— ๐Ÿ“œmain.js



ํŒ€

์ด๋ฆ„ ์—ญํ• 

FE : ๊น€๋ฏผ์ฃผ

  • UI/UX ๋””์ž์ธ, CSS
  • ์˜ํ™” ์ทจํ–ฅ ์ž…๋ ฅ, ์ถ”์ฒœ, ์ƒ์„ธ ํŽ˜์ด์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • OTT ๊ณต์œ  ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

BE : ๊น€์„ ๋ฏผ

  • API ์„œ๋ฒ„ ๊ฐœ๋ฐœ
  • ์ทจํ–ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœ
  • Open AI API ๋ฅผ ํ™œ์šฉํ•œ AI ๊ธฐ๋ฐ˜์˜ ์˜ํ™” ์ถ”์ฒœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  • ์ „๋ฐ˜์ ์ธ CSS ์ž‘์—…



์„œ๋น„์Šค ์†Œ๊ฐœ

1. ์„œ๋น„์Šค ๊ธฐํš ๋ชฉํ‘œ

  • ์„ค๋ฌธ์„ ํ†ตํ•ด ์„ ํ˜ธํ•˜๋Š” ์žฅ๋ฅด, ๊ฐ๋…, ๋ฐฐ์šฐ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์˜ํ™” ์ถ”์ฒœ
  • ์ถ”์ฒœ๋œ ์˜ํ™”๋ฅผ ์‹œ์ฒญํ•  ์ˆ˜ ์žˆ๋Š” OTT ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต
  • OTT ๊ณ„์ • ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์ถ”์ฒœ ๋ฐ›์€ ์˜ํ™”๋ฅผ ๋ณด๋‹ค ์ €๋ ดํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ ์ œ๊ณต

๋ชฉํ‘œ ๊ตฌํ˜„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[Account]

  • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ
  • Token ๋ชจ๋ธ ์ปค์Šคํ…€์„ ํ†ตํ•œ ์œ ํšจ ๊ธฐ๊ฐ„ ์„ค์ •
  • https ๋ฐ refresh token ์ ์šฉ์„ ํ†ตํ•œ ๋ณด์•ˆ ๊ฐ•ํ™”

[OTT]

  • OTT ๊ณ„์ • ๊ณต์œ  ์„œ๋น„์Šค CRUD

[Recommendation]

  • ์ทจํ–ฅ ์„ค๋ฌธ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ ๊ธฐ๋Šฅ
  • ๊ธฐ ์ถ”์ฒœ ์˜ํ™” ๋ชฉ๋ก ๋ฐ”ํƒ• ์ค‘๋ณต ์ถ”์ฒœ ๋ฐฉ์ง€
  • ๋™์  ์ฟผ๋ฆฌ ์ž‘์„ฑ์„ ํ†ตํ•œ ์˜ํ™” ํ•„ํ„ฐ๋ง ์ฝ”๋“œ ๋‹จ์ˆœํ™”
  • Open AI API, TMDB API ๋ฅผ ํ™œ์šฉํ•œ ์˜ํ™” ์ถ”์ฒœ ๋ฐ DB ํ™•์žฅ

[Development]

  • ์ƒํ™ฉ์— ๋งž๋Š” status code ๋ฐ response data ์‘๋‹ต
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์—๋„ ์„œ๋น„์Šค ์ด์šฉ์— ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ๊ตฌํ˜„
  • Pinia ๋ฐ Local Storage ๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ
  • SPA ๊ตฌํ˜„ ๋ฐ ํ™•์žฅ์„ฑ์„ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐํ™”
  • ์ค‘๋ณต ๋กœ์ง ํ•จ์ˆ˜ํ™”๋ฅผ ํ†ตํ•œ ์œ ์ง€๋ณด์ˆ˜ ํŽธ์˜์„ฑ ์ฆ๋Œ€

[Search]

  • ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ DB ๊ฒ€์ƒ‰
  • DB์— ์กด์žฌํ•˜๋Š” ๊ฐ’ ๋ฐ”ํƒ•์œผ๋กœ ์œ ์ € ์ž…๋ ฅ๊ฐ’ ์ž๋™์™„์„ฑ

2. ERD

OTTogether ERD

image



3. Component Structure

Untitled



4. ๊ตฌํ˜„ ๊ธฐ๋Šฅ

Chat GPT ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ ์ทจํ–ฅ ์„ค๋ฌธ
์ทจํ–ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ ์˜ํ™” ์ƒ์„ธ ์กฐํšŒ
ํšŒ์›๊ฐ€์ž… ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ
๊ณ„์ • ๊ณต์œ  ํŒŒํ‹ฐ ๊ฐœ์„ค ๊ณ„์ • ๊ณต์œ  ํŒŒํ‹ฐ ์กฐํšŒ
๊ณ„์ • ๊ณต์œ  ํŒŒํ‹ฐ ์ฐธ์—ฌ ๋งˆ์ด ํŽ˜์ด์ง€
๊ณ„์ • ๊ณต์œ  ํŒŒํ‹ฐ ์ˆ˜์ • ๊ณ„์ • ๊ณต์œ  ํŒŒํ‹ฐ ํƒˆํ‡ด



5. ์˜ํ™” ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‚ฌ์šฉ์ž ์ทจํ–ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ

  • ์ทจํ–ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•„ํ„ฐ๋ง์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ '์ตœ๊ทผ ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ณธ ์˜ํ™”'๋กœ๋ถ€ํ„ฐ '์žฅ๋ฅด, ๊ฐ๋…, ๋ฐฐ์šฐ' ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ถ”๊ฐ€ ์„ ํƒ ์ž…๋ ฅ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ถ”์ถœํ•œ ์ •๋ณด์™€ DB ์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋น„๊ตํ•ด ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋Œ€์ƒ์ด ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด์˜ ๋Œ€์ƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ (์žฅ๋ฅด, ๊ฐ๋…, ๋ฐฐ์šฐ) => (์žฅ๋ฅด, ๊ฐ๋…) => (์žฅ๋ฅด, ๋ฐฐ์šฐ) => (์žฅ๋ฅด) ์ˆœ์œผ๋กœ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์˜ํ™”๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ 5๊ฐœ๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„ ์ถ”๊ฐ€ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š๊ณ  ์ถ”์ฒœ ์˜ํ™”๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ ์ถ”์ฒœ ๋ฐ›์€ ์˜ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์˜ํ™”๋Š” ์ œ์™ธํ•˜๊ณ  ์กฐํšŒํ•˜์—ฌ ์ค‘๋ณต ์ถ”์ฒœ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

โ€ป ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๋ž€?

๋‘ ๋น„๊ต๊ตฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ต์ฒด ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์„ ์ˆ˜๋ก ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์œผ๋กœ ์˜ํ™” ์ œ๋ชฉ, ์„ ํ˜ธํ•˜๋Š” ๊ฐ๋…, ๋ฐฐ์šฐ ๋“ฑ์˜ ์ •๋ณด๋Š” ์ž…๋ ฅ ์‹œ DB ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด๊ณผ ์•„์ฃผ ๊ทผ์†Œํ•œ ์˜ค์ฐจ๊ฐ€ ์กด์žฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜์—ฌ ์ ์šฉ


AI ์˜ํ™” ์ถ”์ฒœ

  • Open AI API ๋ฅผ ํ™œ์šฉํ•œ ์˜ํ™” ์ถ”์ฒœ
  • ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ์ฟผ๋ฆฌ์— ์ž์ฒด ์ œ์ž‘ํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ ์šฉํ•ด ์˜ํ™” ์ œ๋ชฉ์„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ฐ›๊ณ , TMDB API ๋ฅผ ์ด์šฉํ•ด ์˜ํ™”์˜ ID ๋ฐ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์ž์ฒด DB ์— ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์˜ํ™”์ธ ๊ฒฝ์šฐ DB ์— ์ €์žฅ ํ›„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ DB ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด AI ๊ธฐ๋ฐ˜ ์ถ”์ฒœ์€ ๋ฌผ๋ก  ์„œ๋น„์Šค ์šด์˜์„ ์ง€์†ํ•  ์ˆ˜๋ก ์ž์ฒด DB ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ํ”„๋กœ์ ํŠธ ๋‹ค์šด๋กœ๋“œ

git clone [GITHUB_URL]

2. ํŒจํ‚ค์ง€ ์„ค์น˜

# django ํ”„๋กœ์ ํŠธ(backend) ๋กœ ์ด๋™ ํ›„
pip install -r requirements.txt
// vue ํ”„๋กœ์ ํŠธ(front/movie-recommend) ๋กœ ์ด๋™ ํ›„
npm install

3. .env ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ API ํ‚ค ์ž‘์„ฑ

django ํ”„๋กœ์ ํŠธ(backend) ๋ฐ”๋กœ ์•„๋ž˜์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

OPEN_AI_API_KEY='your_open_ai_api_key'
TMDB_API_TOKEN='your_tmdb_api_token'

4. Migration

# django ํ”„๋กœ์ ํŠธ(backend) ๋กœ ์ด๋™ ํ›„
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata data.json

5. ์‹คํ–‰

# django ํ”„๋กœ์ ํŠธ(backend) ๋กœ ์ด๋™ ํ›„
python manage.py runserver
// vue ํ”„๋กœ์ ํŠธ(front/movie-recommend) ๋กœ ์ด๋™ ํ›„
npm run dev



๋Š๋‚€ ์ 

๊น€๋ฏผ์ฃผ

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



๊น€์„ ๋ฏผ

API ์„œ๋ฒ„๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํ™ฉ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์˜ˆ์™ธ ์ƒํ™ฉ๋“ค์— ๋Œ€ํ•ด ๊ณ ๋ คํ•˜๊ณ  ๊ฐ ์ƒํ™ฉ์— ๋งž๋Š” ์‘๋‹ต์„ ํ•˜๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ํŒŒํ‹ฐ ์ฐธ์—ฌ์™€ ๊ฐ™์ด ๋™์ผํ•œ 400 code ๋”๋ผ๋„ ์ด๋ฏธ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ํŒŒํ‹ฐ๋ผ์„œ ์ฐธ์—ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ๊ฑด์ง€, ํŒŒํ‹ฐ์— ์ธ์›์ด ๊ฐ€๋“ ์ฐจ์„œ ์ฐธ์—ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ๊ฑด์ง€ ๋“ฑ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ response data ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์œ ์ € ์ž…์žฅ์—์„œ ํ˜„์žฌ ๋‚ด๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ์— ๋ด‰์ฐฉํ•œ ์ƒํ™ฉ์ธ์ง€๋ฅผ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์œ ์ €๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๋œ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.



์˜ˆ์ƒ๋˜๋Š” ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ 2๊ฐ€์ง€

[Frontend]

Q. props๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A.

props ๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

vue ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ state ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ props ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ  props ํ†ตํ•ด state ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ์ „๋‹ฌ ๋ฐ›์€ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.



Q. Vue ์—์„œ pinia ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A.

pinia ๋Š” ์ „์—ญ ์ƒํƒœ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ํ•„์š”ํ•œ ๋กœ์ปฌ ์ƒํƒœ๋„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ƒํƒœ ๊ณต์œ ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

pinia ๋Š” Vue 3 ์˜ reactive ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ด๋ฅผ ํ†ตํ•ด ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ๋ฐ˜์‘ํ˜•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ•˜์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

[Backend]

Q. ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์—์„œ Q ๊ฐ์ฒด๋ฅผ ์ด์šฉํ–ˆ๋‹ค. QuerySet ์— filter ๋ฅผ ํ†ตํ•ด์„œ๋„ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•œ๋ฐ Q ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A.

Q ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์ด๋กœ ์ธํ•ด ์œ ์ง€๋ณด์ˆ˜๋„ ๋ณด๋‹ค ํŽธ๋ฆฌํ•ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์€ ์žฅ๋ฅด, ๊ฐ๋…, ๋ฐฐ์šฐ 3๊ฐ€์ง€์ธ๋ฐ ๊ฐ ์š”์†Œ์˜ ์ž…๋ ฅ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ด 8๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ์ผ€์ด์Šค์— ๋Œ€ํ•œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ if-elif-else ๋ฌธ์ด ๋‚จ๋ฐœ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ณ , ํ•„ํ„ฐ๋ง ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฝ”๋“œ์˜ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Q ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ์ด ์กด์žฌํ•  ๋•Œ๋งŒ ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„ํ„ฐ๋ง ์š”์†Œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์†์‰ฝ๊ฒŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

About

test


Languages

Language:Vue 50.6%Language:Python 41.3%Language:JavaScript 7.2%Language:HTML 0.8%