본문 바로가기

개발 공부/Django9

F() Expression 서문 Django의 성능을 높이기 위한 여러 방안을 검색하면서 F() Expression에 대해 알게 되었다. 이 포스팅은 F() Expression에 대해 내가 공부한 내용들을 정리한 것이다. F() Expression 이란? django 공식문서에서 설명하는 F()는 다음과 같다. F() 개체는 모델 필드의 값, 모델 필드의 변환 값 또는 주석이 달린 열을 나타냅니다. 이를 통해 실제 데이터베이스에서 Python 메모리로 가져올 필요 없이 모델 필드 값을 참조하고 이를 사용하여 데이터베이스 작업을 수행할 수 있습니다. 대신 Django는 F() 개체를 사용하여 데이터베이스 수준에서 필요한 작업을 설명하는 SQL 식을 생성합니다. 위의 설명에서 내가 주목한 것은 바로 Python 메모리이다. 이것이 F.. 2021. 8. 18.
django channels - Consumer Consumer Channels은 ASGI라는 기본 low-level 사양을 기반으로 구축되었지만 복잡한 애플리케이션을 작성하는 것보다 상호 운용성을 위해 설계되었습니다. 따라서 Channels은 ASGI 애플리케이션을 쉽게 만들 수 있는 풍부한 추상화인 Consumer를 제공합니다. Consumer은 django의 view에 대응한다. app에 연결된 모든 사용자는 "사용자" group에 추가되고 서버에서 보내는 message를 받게 된다. 클라이언트가 app에서 연결이 끊기면 해당 channel이 group에서 제거되고 사용자는 message 수신을 중단한다. Consumer은 특히 다음과 같은 몇 가지 일을 합니다. 이벤트 루프를 작성하도록 만드는 대신 이벤트가 발생할 때마다 호출할 일련의 함수로 .. 2021. 7. 18.
django channels - Heroku deploy 서문 Django channels tutorial로 만든 real-time chat을 Heroku에 배포해본 과정을 정리했다. real-time chat은 Django, Redis, ASGI를 사용하기에 다른 기술 스텍을 사용한 프로젝트와 배포 과정이 다를 수 있다. 0. 사전 준비 github과 연동된 프로젝트 Heroku 가입 1. Heroku heroku app 생성 redis 추가 생성한 app의 대시보드에서 Resource항목에 Heroku Redis를 추가한다. Github 연동 Deploy항목에서 Deployment method를 Github으로 선택하고 App connected to GitHub에서 배포할 레포지토리를 선택한 뒤 아래의 Manual deploy에서 배포용 branch를 선택.. 2021. 7. 15.
django channels - Tutorial Part 3: Rewrite Chat Server as Asynchronous Asynchronous consumer VS Synchronous consumer 장점 단점 Asynchronous consumer 요청을 처리하는데 스레드를 추가로 생성할 필요가 없어 더 높은 성능을 이끌어낸다. 코드가 어렵다. Synchronous consumer 특별한 코드가 필요없어 편리하다 Asynchronous consumer에 비해 성능이 뒤떨어진다. 언제나 Asynchronous consumer를 사용해야 하는가? 대답은 No다. Django model에 접속할 필요가 있을 때 Synchronous 작업이 필요할 때 이 2가지 경우에는 Synchronous code로 작성해야만 한다. agiref.sync.sync_to_async 및 channels.db.database_sync_to_as.. 2021. 7. 4.