git νμ μμ
- νμ₯μ΄ git repositary μμ± λ° νμ μ΄λ
- νμ 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 νμ¬ μμ μν
νμ₯: ννν (λ°±μλ)
-
DRF μ΄κ΄
-
λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ λ° κ΅¬μ±
-
ERD μμ±
-
λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈλ§
-
API λ°μ΄ν° κ΄λ¦¬ κ°μ Έμ€κΈ°
β
νμ: κΉμ€μ°
- Vue.js μ΄κ΄
- UI/UX κ΄λ¦¬
- μ»΄ν¬λνΈ κ΅¬μ‘° μμ±
- CSS/HTML μμ±
- μ λ°μ μΈ νλ©΄κ΅¬μ± κΈ°ν
- λ‘κ·ΈμΈ λ‘κ·Έμμ : googleλ‘ λ‘κ·ΈμΈνκΈ°
- μν μΆμ² : μν μΆμ² μκ³ λ¦¬μ¦
- κ²μν : μν리뷰
- λκΈ
- μ’μμ, νμ λ±
- μ νλΈ μμ λ§ν¬
- μμΉ κΈ°λ° μ£Όλ³ μνκ΄ κ²μ + μΈμ€ν, λΈλ‘κ·Έ νκΈ° μ°λ
- λ°°κ²½μμ
- UI (ex : μΈμ΄μλ λ±)
- νμ μ°½
- λ‘κ·ΈμΈ λ‘κ·Έμμ
- μν μΆμ² : μν μΆμ² μκ³ λ¦¬μ¦ (μ’μμ κΈ°λ°)
- κ²μν : μν리뷰
- λκΈ
- μ’μμ, νμ λ±
- μ νλΈ μμ λ§ν¬
- UI (bootstrap κΉλν μ€νμΌ)
- 무ν μ€ν¬λ‘€
- μ₯λ₯΄λ³ μν
- μν κ²μ κΈ°λ₯
accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
passarticles/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)λͺ¨λ μν λ°μ΄ν°λ€μ κ°μ Έμ 무ν μ€ν¬λ‘€ ννλ‘ μνλ€μ 보μ¬μ€λ€.
- μ 체μν μ‘°ν
- μ₯λ₯΄λ³ μν
- νμ¬ μμ μν
- μν κ²μν
- μν κ²μ
- μΆμ² μν
- νλ‘ν
- λ‘κ·ΈμΈ/λ‘κ·Έμμ/νμκ°μ
μν μ₯λ₯΄λ₯Ό μ ννλ©΄ κ°μ μ₯λ₯΄ μνλ₯Ό λͺ¨λ 보μ¬μ€λ€.
released dateλ₯Ό κΈ°μ€μΌλ‘ μ€μ ν κΈ°κ° μ΄νμ μνλ€μ λ°νν΄μ€μ νμ¬ μμμ€μΈ μν νμ΄μ§λ₯Ό λ§λ€μλ°.
μν κ²μνμ λ§λ€μ΄μ λκΈ, μ’μμ, μ‘°νμκ° λμ€κ² λ§λ€μλ€.
κ²μκΈ μμ±,μμ ,μμ λ κ°λ₯νλ©°, λκΈ μΆκ° μμ μμ λ κ°λ₯νλ€.
navbarμ μνλ μν μ΄λ¦μ κ²μνλ©΄ κ·Έ μνκ° λμ¨λ€.
μ μ κ° μ’μμν μνλ₯Ό κΈ°λ°μΌλ‘ λΉμ·ν μ₯λ₯΄μ μνλ€μ μΆμ²ν΄μ€λ€.
νλ‘ν νμ΄μ§μ λ€μ΄κ°λ©΄ μ μ κ° μμ±ν κΈ, μ’μμν κΈ, μ’μμν μνλͺ©λ‘μ΄ λμ¨λ€.
λ‘κ·ΈμΈ,λ‘κ·Έμμ, νμκ°μ κΈ°λ₯μ΄ νμ±νλλ€.
μ§κΈκΉμ§ λ°±μλμ νλ‘ νΈμλμ κ²½κ³μ μ΄ μμλ€. DRFλ₯Ό ν΅ν΄ νλ©΄μ 보μ¬μ£Όλκ²λ κ°λ₯νκ³ , vue.jsλ₯Ό ν΅ν΄ μνλ λΉλκΈ°μμ² νμ΄μ§λ₯Ό μ½κ² ꡬννλ€. νμ§λ§ μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ²μλΆν° κ°μ§κ³ μ€λ μμ κ³Ό λ°±μλμ νλ‘ νΈμλμ λΆμΌλ₯Ό λλ μ κ°λ°μ ν΄μΌνλ μ΄μ λ₯Ό μμλ€. μμ λμ΄ μ΄λ§μ΄λ§νκ³ , κΈ°λ₯ ꡬνμ κ²½κ³μ μ λ무λ νμ€νλ€. μ²μμλ νμ΄μ ν¨κ» κ°μ΄ λ€νμλ μκ°μ΄μμ§λ§, κ·Έλ κ² νκ²λλ©΄ μκ°λλΉμ ν¨μ¨μ΄ λ§μ΄ λ¨μ΄μ‘λ€. μ΄λ² νλ‘μ νΈλ₯Ό ν΅ν΄ λΆμΌμ κ²½κ³λ₯Ό νμ€ν μκ²λμλ€.
νμ μ νλ©΄μ git/gitlabμ νμ©νλ€. λ§€λ² κ΅μλμ΄ μ¬λ €μ£Όμ μ½λλ₯Ό cloneνκ³ pullνλκ² λ€μλλ° μ΄μ λ νμ΄μ ν¨κ» μμ μ νκ² λμ΄μ git merge λ° branch νμ©μ νλ€. μ²μμλ λ무 볡μ‘νκ³ μ΄λ€ ννλ‘ μ΄λ£¨μ΄μ§λμ§ μ μκ° μμκ³ , μΆ©λμ΄ μλΉν λ§μ΄λ¬λ€. κ·Έλ΄λλ©΄ μ΄ λ¬Έμ λ§ ν΄κ²°νλλ° 2~3μκ°μ μΌμλλ° κ·Έλ κ² λ§μ μνμ°©μ€λ₯Ό κ²ͺκ³ λλ μ νμ ν λ gitμ μ°λμ§ μ΄ν΄νλ€.λ²μ κ΄λ¦¬λ λ무λ μ€μνκ³ , νμ΄μ μμ κ³Ό λμ μμ μ μ°λμμΌμ£Όλ gitμ λ무λ μ μ©νκ³ μ’μ ν΄μ΄μλ€.
μμ μκ°μ λ°°μ΄ λ΄μ©λ§μΌλ‘λ κ²½νμ΄ μλΉν λΆμ‘±νλ€. λ λ§μ κΈ°λ₯λ€μ ꡬννκΈ° μν΄μλ 곡μλ¬Έμλ₯Ό μλ°±λ²λ λκ² λ€μ΄κ°μ μ‘°μ¬μ 곡λΆλ₯Ό ν΄μΌλ§νλ€. κ΅μλλ μ§λ¬Έμ λ°μμ£Όμ§ μλ μν©μμ μ λ§ νμ μ λκ°λ€λ©΄ μ΄λ° κ³ μΆ©μ΄ μμκ±°λΌλ μκ°μ νλ€. μ€λ‘μ§ νμ΄μ λλ§μ λ―Ώμμ± λ¬Έμ λ₯Ό ν΄κ²°ν΄ λκ°λ€. κ·Έ κ³Όμ μμ λ§λμλλ μ€νλ‘ 3μκ°μ νλΉνμ μ΄ μκ³ , μ λ§ μ¬μν κΈ°λ₯ νλλ₯Ό λ§λλλ° κ·Έ μ΄μμ΄ κ±Έλ¦¬κΈ°λ νλ€. μ΄ κ³Όμ μμ μ΄λ»κ² μλ£μ‘°μ¬λ₯Ό ν΄μΌνκ³ , νλ‘μ νΈμ μμ΄μ μ°μ μμκ° λ¬΄μμΈμ§ μκ² λμλ€.
νμ΄μμ νλμ¬μ νλ‘μ νΈμ μμ΄μ λ무λ μ€μνλ€. μ견 μΆ©λμ΄ μ΄λ£¨μ΄μ§κ±°λ μλ‘μ λ¬Έμ μ μ 보μν΄μ£Όκ³ ν΄κ²°ν΄μ£Όλ λ₯λ ₯μ κ°μ§λκ²μ΄ μΌλ§λ μ€μνμ§ μκ² λμλ€. μ΄λ² νλ‘μ νΈλ λμ΄μ μ§ννλλ°μλ μν΅κ³Ό νλμ¬μ΄ νμλ‘ νλ€. 2νκΈ°λ λκ·λͺ¨λ‘ μ§νλλ νλ‘μ νΈμμλ νμκ³Όμ μν΅κ³Ό μλ‘λ₯Ό λ―Ώκ³ λκΉμ§ νλ‘μ νΈλ₯Ό λ§λ¬΄λ¦¬ ν μμλ μ§κ΅¬λ ₯μ 보μ ν΄μΌ νλ€.

















