본문 바로가기
반응형

분류 전체보기101

Django ORM 최적화: GenericForeignKey를 활용한 데이터 모델링 문제 사항커뮤니티 관련 사이드 프로젝트를 진행하면서 모델링에서 발생한 문제를 정리해보려고 합니다.예를 들어, 댓글 기능을 글, 사진, 비디오 등 다양한 콘텐츠에 적용할 수 있는 서비스를 만든다고 가정해봅시다.이 경우, 댓글을 저장하는 테이블이 있고, 이를 각각의 콘텐츠(글, 사진, 비디오) 테이블과 개별적으로 연결해야 하는 문제가 발생합니다.즉, 매번 새로운 콘텐츠 모델을 추가할 때마다 댓글 테이블과 별도의 관계(ForeignKey)를 설정해야 하는 불편함이 생깁니다.이 문제를 해결할 방법을 고민하던 중, Django의 GenericRelation을 활용하면 유연한 설계가 가능하다는 것을 발견했습니다.이번 글에서는 GenericRelation을 적용하기 전 테스트했던 코드와 함께, 어떻게 더 효율적으로 .. 2025. 2. 19.
View가 깔끔해지는 Django 필터링 전략! get_queryset() vs filter_queryset() 문제 상황새로운 프로젝트를 진행하던 중, 회사의 레거시 프로젝트를 살펴볼 기회가 있었다.기존 방식대로 문제를 해결할 수도 있었지만, 개인적으로는 View에 모든 비즈니스 로직이 집중되면 가독성과 유지보수성이 떨어진다고 판단했다.따라서 Django의 filter를 활용하여 파라미터별로 필요한 조건을 동적으로 적용할 수 있도록 구현하는 것이 더 적절하다고 결정했다. 사실 위의 내용들은 각각 쿼리 파라미터의 값들에 맞춰서 적절하게 조건이 나눠지면 된다. 해결 방안from django_filters.rest_framework import filterset, filtersclass UserFilter(filterset.FilterSet): locations = filters.CharFilter(method=.. 2025. 2. 18.
Django 대량의 list 요청시 Cursor-based Pagination Django를 사용하다보면 기본적으로 사용하는 DRF Pagination을 사용해왔다. 그러나 대량의 데이터를 페이지네이션을 하게되면, 퍼포먼스 및 최적화 관점에서 좋지 않다.Pagination의 종류구현 방법오프셋 기반 페이지네이션(Offset-based Pagination)커서 기반 페이지네이션(Cursor-based Pagination)문제 상황기존의 오프셋 기반 페이지네이션과 커서 기반의 페이지네이션의 차이는 무엇이고 왜 대용량의 페이지를 처리할때는 오프셋 기반보다 커서 기반으로 처리하는것이 좋은걸까?기본적으로 많이 사용하는 Pagination은 Offset 기반의 Pagination이다.Offset을 MySQL에서라면 간단하게 LIMIT 쿼리에 콤마를 붙여 ‘건너 뛸’ row 숫자를 지정하면 된.. 2025. 2. 18.
핑크뮬리 씨앗부터 심기까지, 알아야 할 모든 것! 예쁜 핑크뮬리로 가을 정원 완성하는 꿀팁! 생동감 넘치는 핑크색과 우아한 흔들림을 지닌 핑크뮬리 잔디는 가을 정원과 야외 공간에 인기 있는 선택입니다. 배수가 잘되는 토양에서 잘 자라며 일단 자리잡으면 광범위한 관리가 필요하지 않기 때문에 초보자도 성공적으로 재배할 수 있습니다. 이 놀라운 식물을 키우고, 돌보고, 즐기는 방법에 대한 가이드는 다음과 같습니다.핑크뮬리란?북미가 원산지인 핑크뮬리(Muhlenbergia capillaris)는 늦여름부터 초가을까지 분홍색의 푹신한 꽃을 피우는 다년생 풀입니다. 탄력성으로 인해 조경 디자인, 특히 정원, 공원 및 카페의 악센트 식물로 널리 사랑 받고 있습니다.핑크뮬리는 매력적인 분홍빛을 띠며 가을 정원에 환상적인 색감을 더해주는 식물입니다. 초보자도 키우기 쉬운 이 식물은 강한 생명력과 빠른 성장 속도.. 2024. 11. 6.
[Spring] Entity를 설계할때 주의할점!! 어노테이션 뭘 써야하고 왜 쓰는거야??? 글에서 나온 코드는 Github에서 확인 할 수 있습니다. 최근에 Spring을 시작하고 Entity를 설계하면서 아래와 같이 어노테이션을 활용하여 설계를 하였는데,문득 궁금해지기도하고 올바른 설계가 맞는지에 의문이 들어서, 학습을 하던 도중 좋은 설계방향이 아니여서 글을 작성하게 되었다. 리팩토링 전 코드@AllArgsConstructor // 객체 내부의 인스턴스 멤버들을 모두 가지고 있는 생성자를 생성, 불필요한 멤버들까지 매번 생성@Builder // 모든 필드에 빌더 클래스 적용이 아니라 필수 필드만 빌더에서 설정하도록 하여 불변성을 보장@Entity@Table(name = "account")@NoArgsConstructor(access = AccessLevel.PROTECTED)// 무분별한 .. 2024. 11. 6.
[Spring] Entity - 빌더 패턴 마스터하기: 유연하고 불변적인 코드 구조 구축 왜 Builder 패턴을 사용해야하는가? 전체 코드는 Github에서 볼 수 있습니다. Builder 패턴을 사용하면 다음과 같은 장점이 있습니다.인자가 많을 경우 쉽고 안전하게 객체를 생성할 수 있습니다.인자의 순서와 상관없이 객체를 생성할 수 있습니다.적절한 책임을 이름에 부여하여 가독성을 높일 수 있습니다Entity 설계시 어떤 어노테이션을 활용해야하고 왜 활용해야하는지 모르겠다면 아래 글을 참고하면 좋을듯하다.!!  [Spring] Entity를 설계할때 주의할점!! 어노테이션 뭘 써야하고 왜 쓰는거야???글에서 나온 코드는 Github에서 확인 할 수 있습니다. 최근에 Spring을 시작하고 Entity를 설계하면서 아래와 같이 어노테이션을 활용하여 설계를 하였는데,문득 궁금해지기도하고 올바른 .. 2024. 11. 4.
반응형