소개
파이썬과 장고에 진심인 소프트웨어 개발자
- 파이썬 사랑방 주인장
- 파이썬 사랑방 with Django/React 커뮤니티 (구. Ask Django) 운영자
- Microsoft Azure MVP 어워드 수상 (2016년~2021년)
여러분의 파이썬/장고/리액트 페이스메이커가 되겠습니다. 😉
강의
전체5수강평
- 빨리 완강해주세요
dev
2024.03.23
0
- 엄청납니다.
큐 브
2024.03.03
1
- 좋은 강의 감사합니다.
문석청
2024.02.22
1
게시글
질문&답변
2024.05.13
외래키 참조 관계에서 bulk_create는 어떻게 사용하나요?
ignore_conflicts=False 에서는 INSERT 쿼리가 수행되는 데요. 이때에는 RETURNING "id" 문이 지정되어, 이를 통해 INSERT된 기본키를 반환받을 수 있습니다. 그래서 bulk_create 함수의 반환값으로 받은 모델 인스턴스의 .id 에는 저장된 id값이 할당되어있습니다. 그런데, ignore_conflicts=True 에서는 INSERT OR IGNORE 쿼리가 수행되구요. 이때에는 RETURING "id" 문이 적용되지 않습니다. 그래서 bulk_create 함수의 반환값으로 받은 모델 인스턴스의. id 값은 모두 None입니다. 물론 데이터베이스에는 저장된 상황이니, 이어서 SELECT 조회를 해보실 수는 있으시겠습니다. 데이터베이스의 INSERT OR IGNORE INTO 테이블 (생략) RETURNING "id" 쿼리에서는 INSERT 가 되면 "id" 값을 반환하는 데, 충돌이 발생하면 "id" 값을 반환하지 않거든요 . 그래서 장고에서는 일관성을 위해 ignore_conflicts=True 설정에서는 id 값이 있을 수도 있고 없을 수도 있기에, id 값을 모두 할당하지 않는 방향으로 수행되는 듯 보입니다. (뇌피셜입니다.) 그리고, 많은 양의 데이터를 INSERT하실 때, 충돌이 발생할 수 있는 unique 필드가 있다면 데이터베이스에서의 충돌 검사 작업이 추가적인 부하를 발생시켜, INSERT 성능이 느릴 수 있습니다. unique 제약사항이나 인덱스 설정이 없는 상황에서 모든 데이터를 추가하신 후에 unique 제약사항이나 인덱스 설정을 켜시는 것이 성능에 도움이 되실 수 있습니다. 강의에서는 장고 기본 기능으로서 insert 쿼리를 모아서 수행함으로서 insert 속도를 빠르게 올리는 방법을 안내해드린 것이구요. generator는 공간 복잡도를 줄이는 접근이구요. 대용량의 기준은 상대적이라서요. 흠. 수GB 이상, 저장에 수분, 수십분 이상 걸리신다면 데이터베이스의 기능으로 데이터를 밀어넣으시는 것이 낫지 않을까 싶습니다. 훨씬 빠르게 처리되거든요. PostgreSQL에서는 csv 데이터를 copy 하는 명령을 지원해주구요. https://www.postgresql.org/docs/current/sql-copy.html 장고에서는 django-postgres-copy 와 같은 라이브러리도 있습니다. 이 라이브러리의 공식문서 를 꼭 참고해보세요. :-)
- 0
- 3
- 72
질문&답변
2024.05.13
외래키 참조 관계에서 bulk_create는 어떻게 사용하나요?
안녕하세요. Generator를 사용하더라도 2중~3중 반복문이니깐요. 시간복잡도는 O(M*N)으로 보여집니다. 하지만 Generator는 지정 개수 만큼의 메모리만 소모할테니 공간복잡도는 O(1)일 것입니다. 보여주신 코드의 경우, Post 단위로 chunks를 생성하는 것이 아니라, Post 리스트에 대해서 chunks를 생성하도록 해볼 수 있지 않을까요? (사진)
- 0
- 3
- 72
질문&답변
2024.05.06
serializer에서 query문 작성
안녕하세요. 시리얼라이저 내에 관련 쿼리셋을 두는 접근은 " Why large Django projects need a data (prefetching) layer with Flávio Juvenal - DjangoCon US 2022 " 세션에서 영향을 받았구요. 규모가 커져갈 수록 함께 변경되는 코드가 가깝게 있는 것이 유지보수 면에서 더 용이했습니다. 저는 아직 장고와 함께 repository layer나 service layer를 사용해보진 않아서요. 서비스에도 접목해보고 다양하게 연구도 해보고 있지만, 아직 필요성을 느껴보진 못했습니다. 하지만 장고 내에서 그러한 시도가 다양하게 이뤄지고 있음을 레딧이나 각종 컨퍼런스를 통해 접하고는 있습니다.
- 0
- 1
- 59
질문&답변
2024.04.30
django htmx 외에 몇 가지 질문 있습니다.
댓글 생성 후에 refresh-comment-list 이벤트를 받고, 댓글 모달창을 숨기고 있습니다. 이때 아래와 같이 모달 요소와 스크립트 요소를 제거(remove)토록 하실 수 있습니다. 모달 요소에 hide 이벤트를 던지고 나서, 트랜지션 효과로 서서히 숨겨지게 되는 데요. 지연시간을 두지않고 즉시 삭제하게 되면 트랜지션 효과없이 화면에서 즉시 사라지게 됩니다. 트랜지션 효과를 보장하기 위해, 지연시간을 임의로 1000ms (1초)로 주고, 1초 후에 모달 요소와 스크립트 요소를 삭제토록 해보실 수 있습니다. (이 외에도 다양한 구현이 있을 수 있습니다.) (사진) DetailView를 처리되는 페이지에서 context로 CommentForm 인스턴스를 넘겨주시고, 이를 통해 요소를 생성하시는 방법이나, hx-get을 통해 요소를 생성하시는 방법이나, 요소를 생성하시는 방법의 차이만 있을 뿐, 요소 생성 후에는 브라우저 입장에서는 그냥 요소일 뿐이니깐요. form 요청 주소와 속성, 폼 필드들을 맞춰주신다면, 물론 동일하게 동작합니다. 댓글 생성에서 서버와의 통신 부분은 HTMX로 간결히 처리가 되구요. HTMX 응답을 어떻게 활용하는 지와 입력폼과 위젯을 어떻게 구성하느냐에서 다양한 경우의 수가 만들어지지않을까 싶습니다. 네이버/구글 지도 기반에서 HTMX를 통해 글을 남기면, 그 글이 브라우저 새로고침없이 지도에 반영되도록 구현해보시는 것도 한 가지 연습이 되지 않을까요? 참고로 해외 커뮤니티에서는 django + htmx와 함께 alpinejs를 많이 같이 사용하곤 합니다. htmx는 server side rendering이니까, client 단에서 조금이라도 상태 처리가 필요한 상황이 있을 텐데요. 리액트는 SPA 환경에서 많이 사용되니까, vue.js보다 alpinejs가 가벼워서 htmx 커뮤니티에서는 alpinejs를 많이들 같이 사용하더라구요. 아래 장고콘 영상도 참고해보세요. :-) [장고콘 Europe 2022] From React to htmx on a real-world SaaS product: we did it, and it's awesome! [장고콘 US 2023] HTML-ivating your Django web app's experience with HTMX, AlpineJS, and streaming HTML - Chris May
- 0
- 2
- 133
질문&답변
2024.04.29
개발환경 구축 관련하여 질문드립니다.
안녕하세요. 현 강의 영상은 강의 초기의 가이드인데요. 지금은 설치 가이드를 리뉴얼해서, 웹을 통해서 설치하신 그 방법을 그대로 가이드드리고 있습니다. 지금 바로 다음 영상입니다. 다음 영상을 보신다면, 현재 영상은 skip 하셔도 됩니다. https://www.inflearn.com/course/lecture?courseSlug=%EC%9E%A5%EA%B3%A0-%EC%84%A4%EA%B3%84%EC%B2%A0%ED%95%99-%EC%9E%85%EB%AC%B8&unitId=197534 위 영상에서 가이드해드리는 내용인데요. 윈도우에서는 py 명령으로 윈도우에 설치된 여러 파이썬 버전들을 선택하실 수 있구요. 혹은 사용하실 파이썬 인터프리터의 절대경로를 통해 원하는 파이썬을 지정해서 사용하실 수도 있습니다. 살펴보시고 댓글 남겨주세요. 화이팅입니다. :-)
- 1
- 1
- 51