엑셀 3개를 읽던 로더 3개를 워크북 1개를 읽는 로더 1개로 합쳤습니다. pandas가 못 읽는 2단 병합 헤더를 openpyxl로 직접 평탄화하고, 시트 순서 의존을 없애려고 유형별 4패스로 나눴어요. 853행에서 중복 6건이 나왔는데 그 승자 규칙에 아직 구멍이 남아 있다는 얘기까지 적었습니다.
카탈로그 PNG 다운로드가 500을 뱉어서 들어갔는데, 원인은 성능 최적화라고 믿고 있던 prefetch_related의 인자 하나였습니다. Dataset에 없는 관계명이라 QuerySet 평가 시점에 AttributeError가 났고, 지연 평가 때문에 선언부가 아니라 버튼 클릭에서 터졌어요. 같은 파일 안에서 따옴표 표기가 갈려 grep이 한쪽만 잡은 이야기와, AST로 인자 478건을 전수 대조한 기록입니다.
인스턴스를 수정해도 목록·다운로드·RDF는 옛 값을 보여줬습니다. 링크 시점에 한 번 복사하고 끝이었거든요. 캐시 제거·조회 시 재계산·쓰기 시 시그널 세 안을 놓고 마지막을 고른 이유와, 감사 로그가 폭발하지 않게 bulk_update로 일부러 시그널을 우회한 트레이드오프를 정리합니다.
로컬(SQLite)에선 멀쩡히 적재되던 메타데이터 로더가 운영(PostgreSQL)에서만 value too long으로 죽었습니다. 프런트 쪽을 주로 맡다가 모델·마이그레이션을 조금씩 만지기 시작한 입장에서, 원인을 어떻게 좁혀갔고 네 가지 선택지 중 왜 TextField를 골랐는지 정리합니다.
한국어 5개 + 영어 4개 RSS 소스에서 Python/Django 관련 글만 골라 수집하고, HTML 정제와 자동 태깅까지 거치는 파이프라인을 Django management command로 정리한 기록입니다. 나중에 다시 읽으면서 키워드 부분 문자열 매칭과 한글 slugify에서 결함 세 개를 찾았고, 재현 스크립트까지 같이 적었습니다.
Django ORM의 핵심 원리와 자주 쓰는 메서드를 표로 정리한 레퍼런스입니다. 뒤에 실무에서 실제로 걸린 지점들을 덧붙였습니다 — 지연 평가가 에러 위치를 속이는 문제, update()가 시그널과 auto_now를 건너뛰는 문제, only()가 오히려 쿼리를 늘리는 경우까지. 정리할 때는 몰랐고 운영하면서 배운 것들입니다.
Django는 MVT 패턴이라는데 MVC와 뭐가 다른지 정리했습니다. 결론은 이름 매핑 하나로 끝나는데(Django의 View = MVC의 Controller), 실무에서 정작 어려웠던 건 그 다음 — "그래서 이 로직은 View, Model, Template 중 어디에 두나"였습니다. 개념 정리 뒤에 그 경계에서 실제로 겪은 것들을 붙였습니다.
Django 폼 렌더링을 돕는 라이브러리 5종(crispy-forms, widget-tweaks, formify, bootstrap5, dynamic-formset)을 비교 조사했던 글입니다. 결말을 붙였어요 — 실제 프로젝트는 이 중 하나가 아니라 둘(crispy + widget-tweaks)을 역할을 나눠 같이 씁니다. 비교표를 만들 때는 후보들이 경쟁 관계인 줄 알았는데, 절반은 보완 관계였습니다. (원래 2022-08로 게시돼 있던 날짜는 본문이 Django 5.2 문서를 참조해 불가능한 날짜라 조사 시점 기준으로 교정했습니다.)
Jinja 템플릿의 문법·필터·상속·매크로를 표로 정리한 레퍼런스입니다. Django 프로젝트에서 Jinja2를 실제로 쓰며 배운 것들을 뒤에 붙였습니다 — url·static이 공짜가 아니라는 것, safe 필터가 사고의 지름길이라는 것, 그리고 원문 필터 표의 예시가 문법부터 틀려 있었다는 고백까지.