게시글 좋아요 기능 구현 시 모델을 작성할 때
ManyToManyField
로 User 모델을 연결하거나ForeignKey
로 Post와 User의 intermediate model(중간 모델)을 만들거나두 가지 방법 중 왜 2번 방법을 사용해야 하는지 알아보자!
Like 모델을 사용하면 좋아요를 누른 시간, IP 주소, 사용자 에이전트 등과 같은 추가 정보를 저장하는 것이 더 쉽다. 나중에 좋아요에 관한 분석이나 추가 기능을 구현할 때 더 유용하다.
Like 모델을 사용하면 좋아요의 수를 계산할 때 annotate
나 aggregate
와 같은 Django ORM 기능을 사용하여 데이터베이스 수준에서 쿼리를 최적화할 수 있다.
ManyToManyField는 내부적으로 중간 테이블을 사용하여 두 모델 간의 관계를 나타내며, 쿼리 최적화 없이 Django가 자동으로 관련 테이블을 조인하여 결과를 가져온다. 예를 들어, Post 모델의 like 필드가 User 모델과의 ManyToManyField 관계라면, Django는 이 관계를 나타내는 중간 테이블을 자동으로 생성한다.
Like 모델을 사용하면 필요한 경우에만 명시적으로 조인을 수행할 수 있어 불필요한 조인을 피하고 쿼리 성능을 향상시킬 수 있다. 또한 데이터베이스 수준에서 좋아요와 관련된 집계를 수행하기 때문에 Python 수준에서의 처리보다 훨씬 빠르게 결과를 얻을 수 있다.
Like 모델을 사용하면 좋아요와 관련된 로직이나 쿼리가 명확해진다. 예를 들어, 특정 사용자가 특정 게시물에 좋아요를 눌렀는지 확인하거나, 특정 기간 동안 가장 많은 좋아요를 받은 게시물을 찾는 등의 쿼리가 더 직관적으로 작성될 수 있다.
Like 모델을 사용하면 unique_together
와 같은 제약 조건을 중간 테이블에 적용하여 데이터 무결성을 보장할 수 있다. 이렇게 하면 한 사용자가 동일한 게시물에 여러 번 좋아요를 누르는 것을 방지한다.