전체 글 (260) 썸네일형 리스트형 [Python] Exception Chaining (raise ... from ...) python 개발을 하면서 예외처리를 하다가 raise 와 from 이 같이 쓰이는 문법을 봤다. 어떤 용도로 쓰이는지 어떻게 동작하는지 궁금해서 관련한 내용들을 찾아보고 예제도 작성해보았다.1. Exception Chainingexcept 문 영역에서 처리되지 않는 예외가 발생하게되면, 처리중인 예외에 해당 내용이 에러 메시지에 추가되어 함께 처리되게 된다. 두 예외의 에러 메시지는 'During handling of the above exception, another exception occurred:' 라는 메시지로 연결되어 함께 출력되게 된다. 이 상황에서 raise 문에 from 을 함께 쓴다면 별개의 두 에러가 발생한 것이 아닌 에러의 인과관계를 연결하여 에러메시지를 처리할 수 있게 된다.자세.. [Django] Django Model Field - FileField 사용예제 (2) 지난 글에서 Django 의 모델 필드 중 FileField 에 대해서 알아보았다. FileField 는 필드에 파일을 연결하고 이를 저장하는 기능을 하는 타입으로 이 글에서는 이 필드를 사용하여 파일을 저장해보려한다.FileField 사용예제Django model 에서 FileField 를 사용하여 파일을 저장하는 예제이다. 먼저 장고의 settings.py 에서 FileField 의 파일을 저장할 기본 경로와 URL 인 MEDIA_ROOT 와 MEDIA_URL 값을 저장해준다. # settings.pyMEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, "media") 그 다음 FileField 필드를 가지는 django model 클래스를 정의했다. .. [Django] Django Model Field - FileField (1) 1. FileFieldFileField 는 파일 업로드를 위한 필드이다. FileField 는 두가지 선택 인자가 있는데 upload_to 와 storage 이다.- FileField.upload_to파일 업로드 디렉토리와 파일 이름을 설정하는 속성으로 두가지 방법으로 설정할 수 있다. 두가지 방법 모두 설정한 값들이 Storage.save() 메서드로 전달된다. 만약 아래와 같이 strftime() 형식을 포함한 문자열 값이나 Path 객체로 값을 설정한 경우, 파일 업로드시의 날짜/시간으로 해당 형식이 대체된다. class MyModel(models.Model): # 파일은 MEDIA_ROOT/uploads 경로에 저장된다. upload = models.FileField(upload_to="uploa.. [DB] 데이터 스캔방식과 인덱스 - MySQL 예제 백엔드 개발을 하다보면 성능에 대해서 고민을 하게된다. 대표적으로 비즈니스 로직의 시간복잡도, 외부 서비스들과의 통신, 그리고 DB 쿼리의 성능 등이 있을 것이다. 오늘 이 글에서는 DB 쿼리의 성능 최적화, SQL 튜닝의 대표적인 방법인 인덱스에 대해서 정리해 보려고 한다. ORM 을 많이 사용하다보니 기반이 되는 SQL 과 그 최적화에 대해서 소홀했던 부분이 있어서 기존에 알고있던 인덱스에 대한 정보들을 정리해서 작성해보고자 한다.1. 인덱스인덱스는 이름 그대로 원하는 데이터를 빠르게 찾기 위한 자료구조이다. 인덱스로 설정한 데이터들을 실제 데이터와 따로 보관 및 관리하여 테이블 전체를 스캔하지 않고도 데이터를 찾을 수 있도록 한다. 기본적으로 B-tree 구조로 구성되어 있으며, leaf node .. [MySQL] EXPLAIN 최근에 통계 관련 기능을 개발하기 위해 쿼리의 성능을 확인해가며 개발을 진행했다. 이때는 ORM 을 사용했기 때문에 프레임워크의 로깅 기능을 통해서 ORM 으로 작성한 쿼리에서 실제 발생하는 SQL 쿼리를 확인하면서 개발을 했다. 이번에는 한번 더 나아가서 SQL 쿼리가 실제 DB 에서 수행될 때 어떻게 수행되는지를 확인해보고자 한다. SQL 의 실행계획을 보기 위해서는 EXPLAIN 명령어를 사용하면 된다. 이 글에서는 EXPLAIN 에 대해서 설명하고 EXPLAIN 사용 방법과 결과를 해석하는 방법 등에 대해서 정리한다.1. EXPLAINEXPLAIN 은 MySQL 에서 쿼리를 실제 실행하기 전 MySQL 이 어떤 방식으로 작업을 실행할지 보여주는 도구이다. 쿼리의 성능 최적화를 위해서 많이 사용되며.. [Celery] celery beat 1. celery beatcelery beat 는 스케줄러이다. celery beat 가 주기적으로 작업을 시작하면, 가용한 워커에서 작업을 수행한다. celery beat 를 사용하기 위해서는 작업 일정에 대한 entry 를 등록해야 한다. 기본적으로 beat_schedule 설정에서 entry 들을 가져오지만, SQL DB 등과 같이 커스텀 저장소에서 entry 들을 가져올수도 있다. celery beat 를 사용할 때는 한번에 하나의 스케줄러만 동작하도록 해야한다. 만약 여러개의 스케줄러가 동작하는 경우 작업들이 중복으로 실행되어서 동기화와 락 문제가 발생할 수 있다. 이를 방지하기 위해서 하나의 스케줄러를 통한 중앙집중식으로 구성해야 한다.2. celery beat 설정1) Time Zone스케줄.. [uWSGI] max-requests 와 min-worker-lifetime uwsgi 는 설정에 따라 여러 개의 worker 프로세스로 동작한다. 이 과정에서 worker 프로세스의 memory leak 이 발생할 수 있다. 이러한 문제를 해결하기 위해서 특정 조건에 도달하면 프로세스를 삭제하고 재실행하는 설정이 있는데, 그 중 하나가 max-requests 이다. 이 글에서는 max-requests 에 대해서 정리한다.1. max-requestsmax-requests 는 이름 그대로 worker 프로세스가 처리할 요청의 최대개수를 설정한다. worker 프로세스는 요청을 처리하다가 요청의 개수가 max-requests 에 도달하면 해당 프로세스는 삭제되고 새로운 프로세스로 재실행된다. 이 과정을 통해서 해당 프로세스에 의한 memory leak 을 방지할 수 있다.2. max.. [Django] select_related() 와 prefetch_related() Django 로 백엔드를 개발하던 중, 연관관계가 복잡한 엔티티들의 조회를 구현해야하는 경우가 발생했다. 성능을 생각해서 raw query 로 작성을 하려다가 이번기회에 Django ORM 에서 안 써본 기능 들을 쓰고싶어서 ORM 으로 개발하기로 했다. 연관관계를 가지는 엔티티들을 조회할 때, 일반 방식으로 접근하면 lazy loading 으로 N+1 문제가 발생하게 된다. 이때문에 한번에 객체들을 조회할 수 있도록 eager loading 방식으로 구현해야 한다. Djnago ORM 에서는 eager loading 방식을 select_related() 와 prefetch_related() 두가지 기능으로 제공해주어 이에 대한 정리를 해보려한다.1. eager loading (즉시 로딩)ORM 에서 외.. 이전 1 2 3 4 ··· 33 다음