기술
-
Django Rest Framework 의 APITestCase 에서 API 를 요청할 때 Body 데이터를 보내는 두가지 방법기술/Django 2021. 9. 24. 20:17
APITestCase 에서 POST, PATCH, PUT 을 사용하여 데이터를 보낼 때는 보내는 데이터가 multipart 가 아니면 반드시 content_type 을 지정해주어야 합니다. 이 때 내부 동작을 살펴보며 왜 기본이 multipart 가 선택되는지, 다른 두가지 방법은 어떻게 동작하는지에 대해 설명합니다. APITestCase 에서 API 를 요청하는 두가지 방법 rest framework 에서 API 를 테스트를 할 때는 APITestCase 를 상속받아 client 를 통해 아래와같이 호출하게 됩니다. self.client.post(revese('post-list'), data=data) 이 때 self.client 는 rest_framework.test.APIClient 의 인스턴스 입..
-
Django 에서 Jupyter Notebook 을 사용할 때 서브 디렉터리를 기본으로 설정하는 방법기술/Django 2021. 9. 24. 20:12
장고에서 django-extensions 를 설치했다면 아래의 명령어를 수행하여 Jupyter notebook 에서 Django 를 로딩할 수 있습니다. $ python manage.py shell_plus --notebook 이 때 노트북이 로딩되는 기본 폴더를 서브디렉터리로 할 경우 Django 를 제대로 로딩할 수 없는 문제가 있습니다. 방법 프로젝트 레이아웃 장고 프로젝트의 구조가 현재 아래와 같이 되어있을 때 project/notebooks 폴더를 노트북을 켰을 때 기본으로 설정하고 싶다고 가정합니다. /project /users /notebooks # 이 폴더를 노트북의 기본 폴더로 설정하고 싶습니다. SampleNotebook.ipynb manage.py settings.py django-e..
-
ECS 에 Key Pair 를 추가하거나 변경하기기술/Infra 2021. 9. 24. 20:04
ECS 로 생성된 EC2 에 SSH 로 접속할 때 Key Pair 를 추가하거나 변경해야할 필요가 있습니다. 하지만 Key Pair 를 연결하려면 EC2 가 반드시 종료되어 있어야합니다. ECS 는 EC2 를 종료시키면 새 EC2 를 원하는 개수를 유지하기 위해 새 EC2 를 띄우기 때문에 종료 하고 나서 직접 Key Pair 를 붙일 수 없습니다. 그럼 ECS 가 생성될 때 Key Pair 를 연결하는 부분을 찾아 설정해주면 된다고 예측했습니다. ( 생각보다 이 내용에 대한 자료가 없었습니다.. ) ECS 에 Key Pair 추가하기 ( + 변경하기 ) ECS 는 Cloudformation 에 의해 AWS 리소스를 생성하고 제어합니다. 때문에 Cloudformation 에서 EC2 를 생성할 때 어떻게..
-
EC2 의 용량 확장하기기술/Infra 2021. 9. 24. 19:58
EC2 를 사용할 때 용량이 부족하게 되어 용량을 늘리는 방법에 대해 설명합니다. 검색했을 때 여러 방법이 있었지만 저는 해당 방법을 사용하여 해결했습니다. AWS Management Console 에서 해야하는 일들 1. 우선 EC2 Dashboard 에 접근합니다. 2. 용량을 변경하고자 하는 인스턴스를 클릭합니다. ( 하나만 체크해주세요! ) 3. 여기서 사용중인 볼륨을 선택합니다. `New EC2 Dashboard` 를 사용하는 경우 - 하단의 `스토리지` 탭을 선택한 합니다. - 내리다보면 `블록 디바이스` 섹션이 존재하는데, 변경하고자 하는 볼륨 ID 의 링크를 클릭합니다. `과거 EC2 Dashboard` 를 사용하는 경우 - 하단의 `설명` 탭을 선택한 후 내리다보면 `블록 디바이스` 가 ..
-
Traefik vs Caddy기술/Django 2021. 9. 24. 19:53
개인 프로젝트에서 사용할 Web Server 를 선택하기 위해 django template 을 찾아보면서 유명한 프로젝트의 설정을 찾아보았습니다. 그 중 가장 유명한 cookiecutter-django 는 traefik 을 wemake-django-template 은 caddy 를 선택하였습니다. 여기에서 있었던 이슈와 선택에 이유에 대해 정리하고자 합니다. Web Server 왜 Web Server 를 사용하나요? 보안 - 내부 서버로의 직접 접근을 허용하지 않음 분산처리 - 백엔드 서버가 여럿일 경우 트래픽을 분산 가용성 - 문제 발생 시 다른 서버가 처리 성능 - 정적 파일의 서빙을 대신함 Nginx vs Caddy vs Traefik 각 웹서버의 특징을 찾아봤습니다. 만약 웹서버를 선택해야하는 상..
-
django 에서 select_related, prefetch_related 에서 추가적인 ORM 을 사용하기기술/Django 2021. 9. 24. 19:49
Django 의 ORM 을 사용하면서 select_related, prefetch_related 를 쓸 때 성능상의 이점을 위해 테이블을 복잡하게 다룰 필요가 있을 때가 자주 존재합니다. 그 때 사용하기 유용한 FilteredRelation 과 Prefetch 를 소개하고자 합니다. FilteredRelation FilteredRelation 은 Django ORM 에서 JOIN 절에 추가적인 조건을 줄 수 있는 방법입니다. 만약 OUTER JOIN 하는 테이블의 크기가 크다면 FilteredRelation 을 사용하여 성능을 개선할 수 있습니다. Filter 의 위치 Where vs Join OUTER JOIN 을 사용할 때 Where 절을 사용한다면 OUTER JOIN 을 완성한 다음 필터링을 합니다..
-
django-filters 를 사용하여 복잡한 환경에서 OrderingFilter 사용하기기술/Django 2021. 9. 24. 19:43
django-filters 를 사용한다면 OrderingFilter 를 FilterSet 쪽에 붙이는 것이 더 직관적이고 편할 수 있습니다. django-filters 라이브러리에서 OrderingFilter 에 대해 간단한 설명이 있지만 조금 더 복잡하게 사용할 필요가 있었기 때문에 어떻게 사용했는지 공유하고자 합니다. 기본 사용법 OrderingFilter 를 한 키로 정의하고 그 안에 fields 속성에 Ordering 에 사용할 필드들을 나열합니다. 위 처럼 작성하면 ?ordering=username,-first_name 와 같이 QueryString 에 포함시킬 수 있습니다. 대부분의 간단한 정렬은 가능하지만, 예외 케이스가 몇개 존재합니다. class UserFilter(FilterSet): ..
-
Django 에서 일시적으로 auto_now, auto_now_add 를 disable 시키는 법기술/Django 2021. 9. 24. 19:39
종종 엑셀에서 가끔 데이터를 마이그레이션 할 때가 있습니다. 그 때 특정 필드를 마이그레이션 데이터 값으로 채워넣어야하지만 auto_now, auto_now_add 가 설정되어 있다면 저장 시 데이터가 마이그레이션 데이터가 아니라 최신 값의 Datetime 으로 설정됩니다. 그래서 그 때마다 사용할 수 있는 문법이 필요했습니다. TemporarilyDisableAutoNowAndAutoNowAdd 주어진 모델의 save, bulk_ 메서드를 사용할 때 auto_now, auto_now_add 필드를 비활성화하는 Context Manager 를 생성하기로 했습니다. 매개변수 Model: auto_now, auto_now_add 를 비활성하고싶은 Django 의 모델을 제공합니다. field_names: 여..