기술정리/Django13 Django 크롤링 & 스크랩핑 하기 크롤링 & 스크랩핑 이란?크롤링 (Web Crawling): 크롤링은 웹을 탐색하고 데이터를 수집하는 자동화된 프로세스다.크롤러 또는 스파이더라고 불리는 프로그램이 웹 페이지를 순회하며 링크를 따라 이동하면서 정보를 수집한다. 주로 검색 엔진이 웹을 색인화하고 사용자에게 검색 결과를 제공하기 위해 크롤링을 사용한다크롤러는 HTML을 분석하고 필요한 데이터를 추출하여 저장하거나 다른 시스템으로 전송한다. 스크래핑 (Web Scraping): 스크래핑은 웹 페이지에서 필요한 데이터를 추출하는 과정을 의미한다. 이는 주로 자동화된 방식으로 이루어진다.웹 페이지의 HTML을 읽고 분석하여 특정 데이터를 추출하거나 원하는 형식으로 가공한다.스크래핑은 크롤링 이후에 이루어지는 단계로, 크롤러가 수집한 데이터에서 필.. 2024. 5. 6. Django 다중 업로드 지원하기 장고에서의 다중업로드 지원장고에서는 단일 업로드만을 기본적으로 지원한다.프로필 이미지 같이 한 개의 이미지만 등록하는 경우라면 상관없겠지만 여러 이미지를 등록하기 위해서는 별도의 작업이 필요하다. 다중 업로드 구현`models.py`class TimeStampedModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = Trueclass Note(LifecycleModelMixin, TimeStampedModel): author = models.ForeignKey(Us.. 2024. 5. 6. Django Race condition 문제 해결하기 Race Condition이란?쇼핑몰에서 물건을 구매한다고 가정을 해본다.상품의 재고수량이 2개이고 A 사용자와 B 사용자가 해당 상품을 동시에 1개씩 구매를 하게 된다면 어떻게 될까?상품의 재고수량이 -2개가 되어서 최종 재고수량이 0개가 되기를 기대할 것인데 실제로는 그렇지 않다. 이유는 다음과 같다.Race condition은 동시에 여러 프로세스 또는 스레드가 공유 자원에 접근할 때 발생하는 문제이다. 이는 공유 자원에 대한 접근 순서가 보장되지 않아 예상치 못한 결과를 초래할 수 있다. 예를 들어, 두 개의 스레드가 동시에 공유 변수를 수정하는 경우, 각 스레드가 변수를 읽고 쓰는 시점이 서로 겹칠 수 있어 예상치 못한 값이 나올 수 있다. Transaction이란?트랜잭션은 데이터베이스에서 .. 2024. 4. 28. Django 이미지 최적화 하기 이미지 최적화가 필요한 이유 초고화질인 이미지를 사용자가 업로드할 수 도 있다.특히 갤러리의 경우 많은 이미지를 포함하게 되는데 위에 이미지와 같이 4.32MB 이상의 고용량의 이미지들이 누적되다 보면 그만큼의 리소스를 소비해야 한다. 따라서 이미지는 적당히 최적화할 필요성이 있다. 이미지 최적화 적용helper.py# 일관성 있게 이미지 저장def uuid_name_upload_to(instance: models.Model, filename: str) -> str: app_label = instance.__class__._meta.app_label cls_name = instance.__class__.__name__.lower() ymd_path = force_str(timezone... 2024. 4. 25. Django 테이블 조회 n + 1 문제 해결하기 n + 1 문제란? 하나의 쿼리로 n개의 객체를 검색한다. 그 후에 이 n개의 객체 각각에 대해 추가적인 쿼리가 실행된다. 이 추가적인 쿼리는 객체에 연결된 관계를 가져오거나 추가 정보를 가져오기 위한 것이다. 관계 필드는 모델을 조회할 때 자동으로 미리 조회되지 않고, 필드에 접근할 때 로딩된다. 이것을 지연 로딩 Lazy Loading이라 하고 반대의 경우에는 즉시 로딩 Eager Loading이라 한다. django 내에서 기본 쿼리 동작은 Lazy Loading으로 수행되며 Eager Loading 동작을 위해서는 select_related, prefetch_related을 사용할 수 있다. django 내에서 n + 1 문제를 발견하기 위해서는 조회 코드를 작성하고 SQL에 대한 디버그를 수행하.. 2024. 4. 9. Django ManyToManyField 커스텀 모델 이전하기 ManyToManyField ForeignKey, OneToOneField와 같이 Django 내에서는 데이터베이스 관계성을 지원하는 ManyToManyField를 지원한다. 여기서 ManyToManyField란 게시글의 좋아요, 태그 기능과 같이 두 테이블 간의 관계를 정의해야 할 때 사용할 수 있다. 해당 게시글에선 이미 정의된 기본 관계 테이블을 커스텀 관계 테이블로 이전하는 과정을 설명한다. 기본 관계 테이블 models.py class Post(models.Model): tag_set = models.ManyToManyField( "Tag", related_name="blog_post_set", related_query_name="blog_post", blank=True, ) # 생략 class.. 2024. 4. 8. 이전 1 2 3 다음