Skip to content

[SSAFY 12๊ธฐ ๊ด€ํ†ต PJT] ๐ŸŽฌ์˜ํ™” ์ถ”์ฒœ ๋ฐ ๋ฆฌ๋ทฐ ๊ด€๋ฆฌ ์›น ์‚ฌ์ดํŠธ

Notifications You must be signed in to change notification settings

hong00z/CINECODE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฌ CINECODE

Samsung SWยทAI Academy For Youth 12th - ๊ด€ํ†ต ํ”„๋กœ์ ํŠธ

์˜ํ™” ์ถ”์ฒœ ๋ฐ ๋ฆฌ๋ทฐ ๊ด€๋ฆฌ ์›น์‚ฌ์ดํŠธ

2024.11.17 ~ 2024.11.27


ํŒ€์›

๊น€๋ฏผ์ฃผ : (DB) ์˜ํ™”, ์žฅ๋ฅด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ / (FE&BE) MovieDetail, Review CRUD, Navbar, Home

์ตœ์—ฐ์ง€ : (FE&BE) LoginยทSignup, Profile, Home, Search, Speech Recognition


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

PythonDjangoVue.js

  • Python 3.11.X
  • Django 4.2.X
  • Vue 3.X

ERD

ERD

์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋„

Component


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

AI๋ฅผ ํ™œ์šฉํ•œ ์‚ฌ์šฉ์ž ์Œ์„ฑ ์ธ์‹ ๊ธฐ๋ฐ˜ ๊ฐ์ • ๋ถ„์„ ์ถ”์ฒœ

  1. Web Speech API์™€ MediaRecorder API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์Œ์„ฑ์„ ๋…น์Œํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, 5์ดˆ๊ฐ„์˜ ์Œ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. (back/moveis/views.py analyze_sentiment ์ฐธ๊ณ )
  2. ์ˆ˜์ง‘๋œ ์Œ์„ฑ ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์–ด ๊ฐ์ • ๋ถ„์„(sentiment analysis)์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ถ„์„๋œ ๊ฐ์ • ์ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ํ™”๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. (back/moveis/views.py recommend_movies ์ฐธ๊ณ )
  3. ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์บ๋Ÿฌ์…€ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, localStorage๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ์—๋„ ์ด์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. (front/src/views/movies/SearchView.vue ์ฐธ๊ณ )

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

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

image image

2. ๋ฉ”์ธํ™”๋ฉด

  • ๋กœ๊ทธ์ธ ์ „

localhost_5173_movies_945961 (2)

  • ๋กœ๊ทธ์ธ ํ›„

localhost_5173_movies_945961 (1)

3. ์˜ํ™” ์ƒ์„ธ ํ™”๋ฉด

localhost_5173_movies_945961

  • ์žฌ์ƒ, ์ฐœํ•˜๊ธฐ ์ƒํƒœ ๊ด€๋ฆฌ
  • ๋ฆฌ๋ทฐ ์กฐํšŒ(์ตœ์‹ ์ˆœ/์ข‹์•„์š”์ˆœ ์ •๋ ฌ), ์ž‘์„ฑ, ์ข‹์•„์š” ๋ฒ„ํŠผ

4. ๋งˆ์ดํŽ˜์ด์ง€ ํ™”๋ฉด

localhost_5173_ localhost_5173_ (1) localhost_5173_ (2)

  • ๋ฆฌ๋ทฐ ์ˆ˜์ •, ์‚ญ์ œ, ์ข‹์•„์š” ๊ด€๋ฆฌ
  • ํšŒ์› ์ •๋ณด ์ˆ˜์ • (ํ”„๋กœํ•„ ์ด๋ฏธ์ง€, ๋‹‰๋„ค์ž„, ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ)

5. ์˜ํ™” ์ถ”์ฒœ ๋ฐ ๊ฒ€์ƒ‰

localhost_5173_search

  • ์ œ๋ชฉ์œผ๋กœ ๊ฒ€์ƒ‰
  • ์Œ์„ฑ ์ธ์‹์œผ๋กœ ๊ฐ์ • ๋ถ„์„ ํ›„ ์žฅ๋ฅด ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ํ™” ์ถ”์ฒœ (ํ™”๋ฉด ์‚ฌ์ง„์€ ์ถ”ํ›„ ์—…๋กœ๋“œ ์˜ˆ์ •)

Daily Report

1117(์ผ)

[๋ฏผ์ฃผ]

  • ํ”ผ๊ทธ๋งˆ&์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ์ž‘์„ฑ - ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…

[์—ฐ์ง€]

  • ERD ์„ค๊ณ„

1118(์›”)

[๋ฏผ์ฃผ]

  • DB - ์ดˆ๊ธฐ ์˜ํ™”, ์žฅ๋ฅด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ํ”ผ๊ทธ๋งˆ&์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ์ž‘์„ฑ - ํ™ˆ

[์—ฐ์ง€]

  • ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • ๋กœ๊ทธ์ธ,ํšŒ์›๊ฐ€์ž… ํ”„๋ก ํŠธ

1119(ํ™”)

[๋ฏผ์ฃผ]

  • HomeView - ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ
  • ํ”ผ๊ทธ๋งˆ&์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋„ ์ž‘์„ฑ - ์ปค๋ฎค๋‹ˆํ‹ฐ, ์˜ํ™” ์ƒ์„ธ ์ •๋ณด, ํ”„๋กœํ•„

[์—ฐ์ง€]

  • ํšŒ์›๊ฐ€์ž… ๋ฐฑ์•ค๋“œ
  • ERD ์ˆ˜์ •

1120(์ˆ˜)

[๋ฏผ์ฃผ]

  • HomeView ๋งˆ๋ฌด๋ฆฌ
  • Navbar - ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ

[์—ฐ์ง€]

  • LoginView - ๋กœ๊ทธ์ธ ๊ตฌํ˜„
  • Navbar - ๋ฉ”์ธํ™”๋ฉด์— ๋กœ๊ทธ์ธ๋œ๊ฑฐ ๋„์šฐ๊ธฐ

1121(๋ชฉ)

[๋ฏผ์ฃผ]

  • MovieDetail - ์˜ํ™” ์ •๋ณด, ์˜ˆ๊ณ ํŽธ ํ”„๋ก ํŠธ
  • MovieDetail - ์˜ํ™” ์ •๋ณด, ์˜ˆ๊ณ ํŽธ ๋ฐฑ์—”๋“œ
  • DB - fixtures ๋ฐ์ดํ„ฐ ์ˆ˜์ •

[์—ฐ์ง€]

  • UpdateView - ํšŒ์›์ •๋ณด ์ˆ˜์ •
  • ProfileVIew - ํ”„๋กœํ•„ ํ”„๋ก ํŠธ,๋ฐฑ์•ค๋“œ

1122(๊ธˆ)

[๋ฏผ์ฃผ]

  • MovieDetail - ์ฐœํ•˜๊ธฐ, ์‹œ์ฒญ ์ƒํƒœ ํ”„๋ก ํŠธ
  • MovieDetail - ์ฐœํ•˜๊ธฐ, ์‹œ์ฒญ ์ƒํƒœ ๋ฐฑ์—”๋“œ

[์—ฐ์ง€]

  • ์Œ์„ฑ API ๋Œ๊ณ  ์˜ค๊ธฐ, ์—ฐ๊ฒฐ
  • UpdateView - ํ”„๋กœํ•„ ์‚ฌ์ง„ ์ˆ˜์ •

1123(ํ† )

[๋ฏผ์ฃผ]

  • SearchView - URL ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ

[์—ฐ์ง€]

  • ์Œ์„ฑ์ธ์‹ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž‘์„ฑ, ์Šคํฌ๋กค

1124(์ผ)

[๋ฏผ์ฃผ]

  • ReviewReadCard - ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ
  • ReviewCreateCard - ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ

[์—ฐ์ง€]

  • SearchView - ์Œ์„ฑ์ธ์‹ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
  • ProfileView - css ์ˆ˜์ •

1125(์›”)

[๋ฏผ์ฃผ]

  • SearchView - URL ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์žฌ์ˆ˜์ •
  • ReviewUDCard - ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ

[์—ฐ์ง€]

  • HomeView - ๊ฒ€์ƒ‰์ฐฝ ์ž‘์—…
  • HomeView - ๊ฒ€์ƒ‰์ฐฝ css ์ž‘์—…

1126(ํ™”)

[๋ฏผ์ฃผ]

  • DB - ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์ž‘์—…
  • MovieDetail - ์˜ˆ๊ณ ํŽธ ๋งํฌ ์ˆ˜์ •
  • HomeView - MovieCard css ์ž‘์—… (์ •๋ ฌ ์ˆ˜์ •)

[์—ฐ์ง€]

  • DB - ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์ž‘์—…
  • ReviewCard - css ์ž‘์—…
  • Navbar - ์‹œ๊ณ„ ์ถ”๊ฐ€
  • PPT ์ž‘์—…

1127(์ˆ˜)

์ตœ์ข… ๋ฐœํ‘œ


์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•œ TIL

1123(ํ† )

[๋ฏผ์ฃผ]

router๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ URL์— query๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

HomeView.vue์—์„œ SearchView.vue๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌ

  1. router์˜ params๋ฅผ ์‚ฌ์šฉ

1-1. ๋จผ์ € ๋ผ์šฐํ„ฐ ์„ค์ •์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค:

{
 path: '/search/:searchData?',  // optional parameter
 name: 'Search',
 component: SearchView
}

1-2. HomeView.vue๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค:

router.push({
    name: 'Search',
    params: {
      searchData: btoa(JSON.stringify(searchData)) // base64๋กœ ์ธ์ฝ”๋”ฉ
    },
    replace: true // URL ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š์Œ
  });

1-3. SearchView.vue์—์„œ params๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

onMounted(() => {
  if (route.params.searchData) {
    const searchData = JSON.parse(atob(route.params.searchData)); // base64 ๋””์ฝ”๋”ฉ
    transcript.value = searchData.transcript;
    sentiment.value = searchData.sentiment;
    movies.value = searchData.movies;
  }
});
  1. router.push ์‹œ์— replace: true์™€ ํ•จ๊ป˜ query๋ฅผ ์‚ฌ์šฉํ•œ ํ›„, ์ฆ‰์‹œ query๋ฅผ ์ œ๊ฑฐ

2-1. router ์„ค์ •์— props: true ์ถ”๊ฐ€

router.push({
   name: 'Search',
   query: {
     transcript: data.transcript,
     sentiment: data.sentiment_score,
     movies: JSON.stringify(data.movies)
   },
   replace: true
 }).then(() => {
    // query ์ œ๊ฑฐ
    router.replace({ name: 'Search' });
  });

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜๊ธฐ ์ „์— query๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Œ.

  1. HomeView.vue๋Š” ๊ธฐ์กด ๊ทธ๋Œ€๋กœ ์œ ์ง€
  2. SearchView.vue์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•œ ํ›„ URL์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค:
onMounted(() => {
  // URL์˜ query params์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
  const queryTranscript = route.query.transcript;
  const querySentiment = route.query.sentiment;
  const queryMovies = route.query.movies;

  if (queryTranscript && querySentiment && queryMovies) {
    // ๋ฐ์ดํ„ฐ ์„ค์ •
    transcript.value = queryTranscript;
    sentiment.value = Number(querySentiment);
    movies.value = JSON.parse(queryMovies);

    // ๋ฐ์ดํ„ฐ ์„ค์ • ํ›„ URL ์ •๋ฆฌ
    router.replace({ path: '/search' });
  }
});

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด:

  • SearchView๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ๋จผ์ € query ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค
  • ๊ทธ ํ›„์— URL์„ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • ์ดํ›„ ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค

์œ„์˜ ๋ฐฉ๋ฒ•๋Œ€๋กœ ํ–ˆ๋Š”๋ฐ JSON ํŒŒ์‹ฑ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ claude-3.5-sonnet ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ cursor๊ฐ€ ์•Œ๋ ค์ค€ ์ฝ”๋“œ๋กœ ์ˆ˜์ •
์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ ํ›„ ๊นจ๋—ํ•œ URL๋กœ ๋ณ€๊ฒฝ (SearchView.vue onMounted ์ฐธ๊ณ )


์‹œ๊ฐ„ ๋‚จ์œผ๋ฉด ์ถ”๊ฐ€ ํ•  ๊ฑฐ

  • LoginView -ํšŒ์›๊ฐ€์ž… ์•ˆ ๋œ ๊ณ„์ • ์—๋Ÿฌ ์ฒ˜๋ฆฌ
  • SignupView - ID ์ค‘๋ณต ์ฒ˜๋ฆฌ (์ด๋ฏธ ๊ฐ€์ž…๋œ ๊ณ„์ • ๊ตฌ๋ถ„)
  • ์‚ฌ์šฉ์ž ID๋ž‘ Email ํ•„๋“œ ์„œ๋กœ ๋ฐ”๊พธ๊ธฐ
  • ์†Œ์…œ ๋กœ๊ทธ์ธ

์†Œ๊ฐ

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

About

[SSAFY 12๊ธฐ ๊ด€ํ†ต PJT] ๐ŸŽฌ์˜ํ™” ์ถ”์ฒœ ๋ฐ ๋ฆฌ๋ทฐ ๊ด€๋ฆฌ ์›น ์‚ฌ์ดํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •