전체 글
-
터미널에서 특정 포트를 Kill 하는 방법기술 2021. 9. 24. 19:17
터미널에서 특정 포트가 사용되고 있을 때 그 포트를 사용하는 프로그램을 꺼야할 필요가 있습니다. 저의 경우 Remote Forwarding 을 사용할 때 서버의 포트와 로컬의 포트를 SSH 로 연결해 놓는데 이 연결이 잘못되었을 때 해당 포트를 사용하고 있는 것을 꺼주어야 다음 접속 때 정상적으로 재연결됩니다. lsof 를 사용하여 열린 포트의 프로세스 번호를 가져와서 포트 사용을 없애는 방식입니다. sudo kill -9 $(sudo lsof -t -i :)
-
Django 에서 String datetime 을 aware 한 datetime 으로 변경하는 방법기술/Django 2021. 9. 24. 19:16
REST API 를 사용하다보면 프론트에서 datetime 정보를 받을 때가 있습니다. API 로 받았기 때문에 해당 정보는 String 형태를 가지고 있습니다. 이를 Python 의 datetime 형태로 바꾸는 방법이 여럿 있겠지만 django 에서 지원해주는 util 이 있어 소개해드리고자 합니다. 시작하기 전, 사전 지식 navie vs aware naive datetime: timezone 정보를 포함하지 않는 datetime aware datetime: timezone 정보를 포함하는 datetime python 내장 datetime 를 가지고 ORM 필터를 할 때 "naive dateimte 을 aware 하게 바꿔주세요" 하며 Warning 으로 콘솔에 찍힐 때가 있습니다. DB 는 tim..
-
Django 에서 Chain 필터 시 추가적인 테이블 JOIN 방지하기 ( + _next_is_sticky )기술/Django 2021. 9. 24. 19:06
Django 에서 역관계에 있는 모델을 필터할 때 필터를 Chain 하여 사용할 경우 같은 테이블을 두고 필터하더라도 추가적으로 Join 하여 필터합니다. 이 때문에 예상과 결과가 달라질 수 있습니다. 주로 API 를 작성할 때 Django-Filters 를 사용하게 되는데 복잡한 QueryString 을 받는 경우, Chain Query 가 많이 일어나며 발생하였습니다. 간단한 샘플 모델 class Post(models.Model): pass class Comment(models.Model): post = models.ForeignKey(Post) Chain Filter 와 Chain Filter 를 하지 않은 것의 차이 Chain Filter 를 하지 않았을 때 추가적으로 Join 하지 않고 하나의 ..
-
Django Manager, Queryset기술/Django 2021. 9. 24. 18:51
Django 에서 ORM 을 깔끔하게 사용할 수 있는 공식적인 방법 두가지가 있는데 언제 어떻게 사용해야하는지에 대한 명확한 기준이 없어 고민하게 되었을 때 찾은 글입니다. Manager Django 는 Manager 를 통해 데이터베이스와 통신합니다. 응용프로그램과 데이터베이스 사이의 일종의 통신 게이트입니다. 따라서 모든 장고의 모델은 하나 이상의 Manager 가 존재합니다. Custom Manager 를 언제 사용하나요? 1. 초기 Queryset 을 수정하기 위한 목적 만약 Manager 에 따라 삭제된 것을 포함/미포함하여 가져오고 싶을 때, Manager 를 사용하여 첫 Queryset 에서 필터해서 가져오게 할 수 있습니다. from django.db import models class P..
-
Django 에서 Annotate 와 Union 을 함께 사용할 때 생기는 문제기술/Django 2021. 9. 24. 18:32
Django 에서 annotate 로 추가한 필드와 기존 필드들을 Union 후 같이 사용할 때 몇가지 이상한 동작이 있습니다. 똑같은 컬럼을 annotate 했지만 컬럼의 결과에 다른 컬럼의 값이 들어있는 문제가 발생했습니다. 파란색 네모가 status 값인데 일부가 address 에 존재하고 빨간색 네모가 address 값인데 일부가 status 에 존재했습니다. 동작하지만 원하는 결과가 나오지 않는 코드 Python 코드 가맹점쿼리 = 가맹점.objects.annotate( address=F('addr'), ).values( 'pk', 'status', 'address', 'name', ) 협력사쿼리 = 협력사.objects.annotate( status=Value(None, output_field..
-
Django 에서 Generic ForeignKey 를 사용을 권장하지 않는 이유기술/Django 2021. 9. 24. 18:25
다형성을 효율적으로 구현하기 위한 설계로 GenericForeignKey 를 찾게됩니다. 하지만 GenericForeignKey 를 사용하지 않아야할 이유와 대안에 대해서 이야기드리고자 합니다. GenericForeignKey 란? 한 특정 모델과 ForeignKey 를 연결해주는 것이 아니라 모든 모델과 범용적으로 ForeignKey 를 연결해주는 것이 GFK(GenericForeignKey) 입니다. 즉, ForeginKey 를 어떤 모델에나 연결하고싶다는 이야기입니다. 구현 방식 Django 에는 ContentType 이라는 모델이 있습니다. 이 모델은 DB 에 생성된 각 모델들의 정보를 가지고 있으며, 이 정보를 이용하여 여러 모델과 연결고리를 만들어 주는 것입니다. 세 필드를 가지고 Generi..
-
#6. Flutter 의 근간인 Dart - 내장 유형기술/Flutter 2021. 1. 27. 23:22
들어가기 전 원본 : Dart - Language Tour 위 문서를 번역하며 공부한 내용입니다. 해당 투어는 다른 언어로 프로그래밍하는 방법을 이미 알고 있다는 가정하에 문서를 진행합니다. 내장 유형 Dart 는 다음 유형에 대해 특별한 지원을 합니다. numbers strings booleans lists sets maps runes ( 문자열에서 유니코드 문자 표현용 ) symbols 리터럴을 사용하여 이러한 타입의 객체를 초기화 할 수 있습니다. 예를 들어 this is string 은 문자열 리터럴이고 true 는 부울 리터럴입니다. Dart 의 모든 변수는 Object 를 참조하기 때문에 일반적으로 생성자를 통해 변수를 초기화 할 수 있습니다. 일부 내장 타입에는 자체 생성자가 있습니다. 예를..
-
#5. Flutter 의 근간인 Dart - 변수기술/Flutter 2021. 1. 27. 01:03
들어가기 전 원본 : Dart - Language Tour 위 문서를 번역하며 공부한 내용입니다. 해당 투어는 다른 언어로 프로그래밍하는 방법을 이미 알고 있다는 가정하에 문서를 진행합니다. 변수 다음은 변수를 만들고 초기화하는 예입니다. var name = 'Bob'; 변수는 참조를 저장합니다. name 변수는 String 객체인 'Bob' 의 참조를 가지고 있습니다. 객체가 단일 타입으로 제한되지 않는 경우 디자인 지침에 따라 Object 또는 dynamic 타입으로 지정합니다. dynamic name = 'Bob'; 다른 옵션은 타입을 명시적으로 지정하는 것 입니다. String name = 'Bob'; 기본 값 초기화되지 않은 변수의 초기 값은 null입니다. Dart의 다른 모든 것과 마찬가지로..