Skip to content

junwoo0127/Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

μš°ν•˜ν•œ ν˜•μ œλ“€ - μ˜ν™” μΆ”μ²œ μ›Ή μ„œλΉ„μŠ€

개발 ν™˜κ²½(μ‚¬μš© ν”„λ‘œκ·Έλž¨)

Django 3.2.12 (λ°±μ—”λ“œ)

vue/cli 4.5.8 (ν”„λ‘ νŠΈμ—”λ“œ)

git/gitlab(ν˜‘μ—… 툴)

git ν˜‘μ—… μ‹œμž‘

  1. νŒ€μž₯이 git repositary 생성 및 νŒ€μ› μ΄ˆλŒ€
  2. νŒ€μ› git clone

git branch 생성

  • git branch λ§Œλ“€κΈ° : git checkout -b branch이름
  • κΈ°λŠ₯ κ΅¬ν˜„
  • git add .
  • git commit -m 'commit message'
  • git push origin branch이름
  • merge request
  • git master둜 이동 : git checkout master
  • git μ΅œμ‹ ν™” : git pull origin master
  • μž‘μ—…ν•œ git branch μ‚­μ œ : git branch -d branch이름
  • λ‹€μ‹œ branch μƒμ„±ν•˜λ©΄μ„œ λ‹€μŒ μž‘μ—… μ‹œμž‘

commit message 행동 [Vue, DRF] - κΈ°λŠ₯

  • add : κΈ°λŠ₯ μΆ”κ°€

  • update : κΈ°λŠ₯ μˆ˜μ •

  • remove : κΈ°λŠ₯ μ‚­μ œ

  • error : μ—λŸ¬ ν•΄κ²°

  • μ˜ˆμ‹œ : add DRF - url ν˜„μž¬ μƒμ˜ μ˜ν™”

image-20220526214025467

1. νŒ€μ› 정보 및 업무 λΆ„λ‹΄λ‚΄μ—­

νŒ€μž₯: ν•œν•˜ν‰ (λ°±μ—”λ“œ)

  • DRF 총괄

  • λ°μ΄ν„°λ² μ΄μŠ€ 관리 및 ꡬ성

  • ERD μž‘μ„±

  • λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§

  • API 데이터 관리 κ°€μ Έμ˜€κΈ°

​

νŒ€μ›: κΉ€μ€€μš°

  • Vue.js 총괄
  • UI/UX 관리
  • μ»΄ν¬λ„ŒνŠΈ ꡬ쑰 μž‘μ„±
  • CSS/HTML μž‘μ„±
  • μ „λ°˜μ μΈ 화면ꡬ성 기획

2. λͺ©ν‘œ μ„œλΉ„μŠ€ κ΅¬ν˜„ 및 μ‹€μ œ κ΅¬ν˜„ 정도

λͺ©ν‘œ ꡬ성

  • 둜그인 λ‘œκ·Έμ•„μ›ƒ : google둜 λ‘œκ·ΈμΈν•˜κΈ°
  • μ˜ν™” μΆ”μ²œ : μ˜ν™” μΆ”μ²œ μ•Œκ³ λ¦¬μ¦˜
  • κ²Œμ‹œνŒ : μ˜ν™”λ¦¬λ·°
  • λŒ“κΈ€
  • μ’‹μ•„μš”, 평점 λ“±
  • 유튜브 μ˜μƒ 링크
  • μœ„μΉ˜ 기반 μ£Όλ³€ μ˜ν™”κ΄€ 검색 + μΈμŠ€νƒ€, λΈ”λ‘œκ·Έ ν›„κΈ° 연동
  • λ°°κ²½μŒμ•…
  • UI (ex : μ‹Έμ΄μ›”λ“œ λ“±)
  • νŒμ—…μ°½

μ‹€μ œ ꡬ성

  • 둜그인 λ‘œκ·Έμ•„μ›ƒ
  • μ˜ν™” μΆ”μ²œ : μ˜ν™” μΆ”μ²œ μ•Œκ³ λ¦¬μ¦˜ (μ’‹μ•„μš” 기반)
  • κ²Œμ‹œνŒ : μ˜ν™”λ¦¬λ·°
  • λŒ“κΈ€
  • μ’‹μ•„μš”, 평점 λ“±
  • 유튜브 μ˜μƒ 링크
  • UI (bootstrap κΉ”λ”ν•œ μŠ€νƒ€μΌ)
  • λ¬΄ν•œ 슀크둀
  • μž₯λ₯΄λ³„ μ˜ν™”
  • μ˜ν™” 검색 κΈ°λŠ₯

3. λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§(ERD)

ERD

img

μ»΄ν¬λ„ŒνŠΈ ꡬ쑰

image-20220519105933297

accounts/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    pass

articles/models.py

from django.db import models
from django.conf import settings

class Article(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='articles')
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    like_users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='like_articles')
    views = models.IntegerField(default=0)
    


class Comment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='comments')
    article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
    content = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

movies/models.py

from django.db import models
from django.conf import settings

# Create your models here.
class Genre(models.Model):
    name = models.CharField(max_length=50)

class Actor(models.Model):
    name = models.CharField(max_length=100)
    profile_path = models.CharField(max_length=200, null=True)

class Movie(models.Model):
    title = models.CharField(max_length=100)
    overview = models.TextField()
    poster_path = models.CharField(max_length=200)
    release_date = models.DateField()
    genres = models.ManyToManyField(Genre, related_name='movies')
    actors = models.ManyToManyField(Actor, related_name='movies')
    popularity = models.FloatField()
    vote_average = models.FloatField()
    video_id = models.TextField()
    runtime = models.IntegerField()
    views = models.IntegerField(default=0)
    like_users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='like_movies')

class Review(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='reviews')
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='reviews')
    score = models.IntegerField(null=True)

4. ν•„μˆ˜ κΈ°λŠ₯에 λŒ€ν•œ μ„€λͺ…

메인 ν™”λ©΄

image-20220526211735357

λͺ¨λ“  μ˜ν™” 데이터듀을 가져와 λ¬΄ν•œ 슀크둀 ν˜•νƒœλ‘œ μ˜ν™”λ“€μ„ 보여쀀닀.

Navbar

image-20220526211845553

  • μ „μ²΄μ˜ν™” 쑰회
  • μž₯λ₯΄λ³„ μ˜ν™”
  • ν˜„μž¬ μƒμ˜ μ˜ν™”
  • μ˜ν™” κ²Œμ‹œνŒ
  • μ˜ν™” 검색
  • μΆ”μ²œ μ˜ν™”
  • ν”„λ‘œν•„
  • 둜그인/λ‘œκ·Έμ•„μ›ƒ/νšŒμ›κ°€μž…

μž₯λ₯΄λ³„ μ˜ν™”

image-20220526211951478

μ˜ν™” μž₯λ₯΄λ₯Ό μ„ νƒν•˜λ©΄ 같은 μž₯λ₯΄ μ˜ν™”λ₯Ό λͺ¨λ‘ 보여쀀닀.

image-20220526212034694

ν˜„μž¬ μƒμ˜ μ˜ν™”

image-20220526212103971

released dateλ₯Ό κΈ°μ€€μœΌλ‘œ μ„€μ •ν•œ κΈ°κ°„ 이후에 μ˜ν™”λ“€μ„ λ°˜ν™˜ν•΄μ€˜μ„œ ν˜„μž¬ μƒμ˜μ€‘μΈ μ˜ν™” νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ—ˆλ”°.

μ˜ν™” κ²Œμ‹œνŒ

image-20220526212210154

μ˜ν™” κ²Œμ‹œνŒμ„ λ§Œλ“€μ–΄μ„œ λŒ“κΈ€, μ’‹μ•„μš”, μ‘°νšŒμˆ˜κ°€ λ‚˜μ˜€κ²Œ λ§Œλ“€μ—ˆλ‹€.

κ²Œμ‹œκΈ€ μž‘μ„±,μˆ˜μ •,μ‚­μ œλ„ κ°€λŠ₯ν•˜λ©°, λŒ“κΈ€ μΆ”κ°€ μ‚­μ œ μˆ˜μ •λ„ κ°€λŠ₯ν•˜λ‹€.

image-20220526212408106

image-20220526212431592

μ˜ν™” 검색

image-20220526212506077

navbar에 μ›ν•˜λŠ” μ˜ν™” 이름을 κ²€μƒ‰ν•˜λ©΄ κ·Έ μ˜ν™”κ°€ λ‚˜μ˜¨λ‹€.

image-20220526212531904

μ˜ν™” μΆ”μ²œ

image-20220526212554061

μœ μ €κ°€ μ’‹μ•„μš”ν•œ μ˜ν™”λ₯Ό 기반으둜 λΉ„μŠ·ν•œ μž₯λ₯΄μ˜ μ˜ν™”λ“€μ„ μΆ”μ²œν•΄μ€€λ‹€.

μœ μ € ν”„λ‘œν•„

image-20220526212629381

ν”„λ‘œν•„ νŽ˜μ΄μ§€μ— λ“€μ–΄κ°€λ©΄ μœ μ €κ°€ μž‘μ„±ν•œ κΈ€, μ’‹μ•„μš”ν•œ κΈ€, μ’‹μ•„μš”ν•œ μ˜ν™”λͺ©λ‘μ΄ λ‚˜μ˜¨λ‹€.

Login/Logout/Signup

둜그인,λ‘œκ·Έμ•„μ›ƒ, νšŒμ›κ°€μž… κΈ°λŠ₯이 ν™œμ„±ν™”λœλ‹€.

image-20220526212728618

image-20220526212742917

image-20220526212755977

5. λŠλ‚€μ 

1. λΆ„μ•Ό λ‚˜λˆ„κΈ°μ˜ μ€‘μš”μ„±

μ§€κΈˆκΉŒμ§€ λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œμ˜ 경계선이 μ—†μ—ˆλ‹€. DRFλ₯Ό 톡해 화면을 λ³΄μ—¬μ£ΌλŠ”κ²ƒλ„ κ°€λŠ₯ν–ˆκ³ , vue.jsλ₯Ό 톡해 μ›ν•˜λŠ” λΉ„λ™κΈ°μš”μ²­ νŽ˜μ΄μ§€λ₯Ό μ‰½κ²Œ κ΅¬ν˜„ν–ˆλ‹€. ν•˜μ§€λ§Œ μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ²˜μŒλΆ€ν„° κ°€μ§€κ³ μ˜€λŠ” μž‘μ—…κ³Ό λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œμ˜ λΆ„μ•Όλ₯Ό λ‚˜λˆ μ„œ κ°œλ°œμ„ ν•΄μ•Όν•˜λŠ” 이유λ₯Ό μ•Œμ•˜λ‹€. μž‘μ—…λŸ‰μ΄ μ–΄λ§ˆμ–΄λ§ˆν–ˆκ³ , κΈ°λŠ₯ κ΅¬ν˜„μ˜ 경계선은 λ„ˆλ¬΄λ‚˜ ν™•μ‹€ν–ˆλ‹€. μ²˜μŒμ—λŠ” νŽ˜μ–΄μ™€ ν•¨κ»˜ 같이 λ‹€ν•˜μžλŠ” μƒκ°μ΄μ—ˆμ§€λ§Œ, κ·Έλ ‡κ²Œ ν•˜κ²Œλ˜λ©΄ μ‹œκ°„λ‚­λΉ„μ™€ 효율이 많이 λ–¨μ–΄μ‘Œλ‹€. 이번 ν”„λ‘œμ νŠΈλ₯Ό 톡해 λΆ„μ•Όμ˜ 경계λ₯Ό ν™•μ‹€νžˆ μ•Œκ²Œλ˜μ—ˆλ‹€.

2. ν˜‘μ—… 툴의 μ€‘μš”μ„±(λ°μ΄ν„°μ˜ μ €μž₯ 및 관리)

ν˜‘μ—…μ„ ν•˜λ©΄μ„œ git/gitlab을 ν™œμš©ν–ˆλ‹€. 맀번 κ΅μˆ˜λ‹˜μ΄ μ˜¬λ €μ£Όμ‹  μ½”λ“œλ₯Ό cloneν•˜κ³  pullν•˜λŠ”κ²Œ λ‹€μ˜€λŠ”λ° μ΄μ œλŠ” νŽ˜μ–΄μ™€ ν•¨κ»˜ μž‘μ—…μ„ ν•˜κ²Œ λ˜μ–΄μ„œ git merge 및 branch ν™œμš©μ„ ν–ˆλ‹€. μ²˜μŒμ—λŠ” λ„ˆλ¬΄ λ³΅μž‘ν•˜κ³  μ–΄λ–€ ν˜•νƒœλ‘œ μ΄λ£¨μ–΄μ§€λŠ”μ§€ μ•Œ μˆ˜κ°€ μ—†μ—ˆκ³ , 좩돌이 μƒλ‹Ήνžˆ λ§Žμ΄λ‚¬λ‹€. κ·ΈλŸ΄λ•Œλ©΄ 이 문제만 ν•΄κ²°ν•˜λŠ”λ° 2~3μ‹œκ°„μ„ μΌμ—ˆλŠ”λ° κ·Έλ ‡κ²Œ λ§Žμ€ μ‹œν–‰μ°©μ˜€λ₯Ό κ²ͺκ³  λ‚˜λ‹ˆ μ™œ ν˜‘μ—…ν• λ•Œ git을 μ“°λŠ”μ§€ μ΄ν•΄ν–ˆλ‹€.λ²„μ „κ΄€λ¦¬λŠ” λ„ˆλ¬΄λ‚˜ μ€‘μš”ν–ˆκ³ , νŽ˜μ–΄μ˜ μž‘μ—…κ³Ό λ‚˜μ˜ μž‘μ—…μ„ μ—°λ™μ‹œμΌœμ£ΌλŠ” git은 λ„ˆλ¬΄λ‚˜ μœ μš©ν•˜κ³  쒋은 νˆ΄μ΄μ—ˆλ‹€.

3. λ©˜νƒˆκ³Ό μ‹€νŒ¨μ˜ μ€‘μš”μ„±(λŠμž„μ—†λŠ” 검색과 λ¬Έμ œν•΄κ²°λŠ₯λ ₯)

μˆ˜μ—…μ‹œκ°„μ— 배운 λ‚΄μš©λ§ŒμœΌλ‘œλŠ” κ²½ν—˜μ΄ μƒλ‹Ήνžˆ λΆ€μ‘±ν–ˆλ‹€. 더 λ§Žμ€ κΈ°λŠ₯듀을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ³΅μ‹λ¬Έμ„œλ₯Ό μˆ˜λ°±λ²ˆλ„ λ„˜κ²Œ λ“€μ–΄κ°€μ„œ 쑰사와 곡뢀λ₯Ό ν•΄μ•Όλ§Œν–ˆλ‹€. κ΅μˆ˜λ‹˜λ„ μ§ˆλ¬Έμ„ λ°›μ•„μ£Όμ§€ μ•ŠλŠ” μƒν™©μ—μ„œ 정말 ν˜„μ—…μ— λ‚˜κ°”λ‹€λ©΄ 이런 고좩이 μžˆμ„κ±°λΌλŠ” 생각을 ν–ˆλ‹€. μ˜€λ‘œμ§€ νŽ˜μ–΄μ™€ λ‚˜λ§Œμ„ 믿은채 문제λ₯Ό ν•΄κ²°ν•΄ λ‚˜κ°”λ‹€. κ·Έ κ³Όμ •μ—μ„œ λ§λ„μ•ˆλ˜λŠ” μ˜€νƒ€λ‘œ 3μ‹œκ°„μ„ ν—ˆλΉ„ν•œμ μ΄ 있고, 정말 μ‚¬μ†Œν•œ κΈ°λŠ₯ ν•˜λ‚˜λ₯Ό λ§Œλ“œλŠ”λ° κ·Έ 이상이 걸리기도 ν–ˆλ‹€. 이 κ³Όμ •μ—μ„œ μ–΄λ–»κ²Œ μžλ£Œμ‘°μ‚¬λ₯Ό ν•΄μ•Όν•˜κ³ , ν”„λ‘œμ νŠΈμ— μžˆμ–΄μ„œ μš°μ„ μˆœμœ„κ°€ 무엇인지 μ•Œκ²Œ λ˜μ—ˆλ‹€.

4. νŽ˜μ–΄μ™€μ˜ νŒ€μ›Œν¬

νŽ˜μ–΄μ™€μ˜ ν˜‘λ™μ‹¬μ€ ν”„λ‘œμ νŠΈμ— μžˆμ–΄μ„œ λ„ˆλ¬΄λ‚˜ μ€‘μš”ν–ˆλ‹€. 의견 좩돌이 μ΄λ£¨μ–΄μ§€κ±°λ‚˜ μ„œλ‘œμ˜ λ¬Έμ œμ μ„ 보완해주고 ν•΄κ²°ν•΄μ£ΌλŠ” λŠ₯λ ₯을 κ°€μ§€λŠ”κ²ƒμ΄ μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ μ•Œκ²Œ λ˜μ—ˆλ‹€. 이번 ν”„λ‘œμ νŠΈλŠ” λ‘˜μ΄μ„œ μ§„ν–‰ν•˜λŠ”λ°μ—λ„ μ†Œν†΅κ³Ό ν˜‘λ™μ‹¬μ΄ ν•„μš”λ‘œ ν–ˆλ‹€. 2ν•™κΈ°λ•Œ λŒ€κ·œλͺ¨λ‘œ μ§„ν–‰λ˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œλŠ” νŒ€μ›κ³Όμ˜ μ†Œν†΅κ³Ό μ„œλ‘œλ₯Ό λ―Ώκ³  λκΉŒμ§€ ν”„λ‘œμ νŠΈλ₯Ό 마무리 ν•  μˆ˜μžˆλŠ” 지ꡬλ ₯을 λ³΄μœ ν•΄μ•Ό ν•œλ‹€.

About

All the projects I have done

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors