
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Hyo814`s Blog</title>
      <link>https://hyo814-blog.vercel.app/blog</link>
      <description>풀스택 개발자 임효진의 기술 블로그 — 프로젝트 회고, 프런트엔드·백엔드 학습 기록을 정리합니다.</description>
      <language>ko</language>
      <managingEditor>ggamjge8888@naver.com (Hyo814)</managingEditor>
      <webMaster>ggamjge8888@naver.com (Hyo814)</webMaster>
      <lastBuildDate>Fri, 25 Apr 2025 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://hyo814-blog.vercel.app/tags/django/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://hyo814-blog.vercel.app/blog/Django-ORM</guid>
    <title>Django ORM 정리 — 그리고 실무에서 안 통했던 지점</title>
    <link>https://hyo814-blog.vercel.app/blog/Django-ORM</link>
    <description>Django ORM의 핵심 원리와 자주 쓰는 메서드를 표로 정리한 레퍼런스입니다. 뒤에 실무에서 실제로 걸린 지점들을 덧붙였습니다 — 지연 평가가 에러 위치를 속이는 문제, update()가 시그널과 auto_now를 건너뛰는 문제, only()가 오히려 쿼리를 늘리는 경우까지. 정리할 때는 몰랐고 운영하면서 배운 것들입니다.</description>
    <pubDate>Fri, 25 Apr 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/Django의 MVT 패턴 vs 전통적인 MVC 패턴</guid>
    <title>Django의 MVT 패턴 vs 전통적인 MVC 패턴</title>
    <link>https://hyo814-blog.vercel.app/blog/Django의 MVT 패턴 vs 전통적인 MVC 패턴</link>
    <description>Django는 MVT 패턴이라는데 MVC와 뭐가 다른지 정리했습니다. 결론은 이름 매핑 하나로 끝나는데(Django의 View = MVC의 Controller), 실무에서 정작 어려웠던 건 그 다음 — &quot;그래서 이 로직은 View, Model, Template 중 어디에 두나&quot;였습니다. 개념 정리 뒤에 그 경계에서 실제로 겪은 것들을 붙였습니다.</description>
    <pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-cbv-vs-fbv</guid>
    <title>Django CBV vs FBV — 클래스형 뷰와 함수형 뷰 비교</title>
    <link>https://hyo814-blog.vercel.app/blog/django-cbv-vs-fbv</link>
    <description>Django의 두 가지 뷰 작성 방식인 FBV(함수형 뷰)와 CBV(클래스형 뷰)의 차이점, 장단점, 언제 무엇을 쓸지 정리합니다.</description>
    <pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-context-processor-쪽지-카운트</guid>
    <title>Django context processor로 쪽지 미열람 카운트 전역 주입 — 언제 쓰고 언제 쓰지 말아야 하는가</title>
    <link>https://hyo814-blog.vercel.app/blog/django-context-processor-쪽지-카운트</link>
    <description>헤더에 &quot;쪽지 N개&quot;를 띄우기 위해 모든 뷰에서 카운트를 넘기는 대신, context processor로 전역 주입한 경험과 그 함정을 정리합니다.</description>
    <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-inline-formset</guid>
    <title>Django Formset과 Inline Formset 이해하기</title>
    <link>https://hyo814-blog.vercel.app/blog/django-inline-formset</link>
    <description>Django에서 여러 폼을 한 페이지에서 처리하는 Formset과 부모-자식 관계를 함께 처리하는 Inline Formset의 차이와 사용법을 정리합니다.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-management-command-4종-설계기</guid>
    <title>Django management command 4종 설계기 — 크롤러, 뉴스레터, 시드, 백필</title>
    <link>https://hyo814-blog.vercel.app/blog/django-management-command-4종-설계기</link>
    <description>일회성 스크립트 대신 Django management command로 crawl_news, send_newsletter, seed_editorial, backfill_urls 네 가지를 설계하며 얻은 기준과 패턴을 정리합니다.</description>
    <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-management-command-시드-데이터</guid>
    <title>Django management command로 시드 데이터 다루기 — data migration과의 분기점</title>
    <link>https://hyo814-blog.vercel.app/blog/django-management-command-시드-데이터</link>
    <description>시드 데이터를 data migration에 넣을지, 커스텀 management command로 뺄지. 두 방법의 차이와 실제로 언제 무엇을 택해야 하는지 정리합니다.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-migration-runpython</guid>
    <title>Django RunPython으로 수동 마이그레이션 다루기</title>
    <link>https://hyo814-blog.vercel.app/blog/django-migration-runpython</link>
    <description>Django 마이그레이션에서 RunPython을 사용해 필드 추가 후 데이터를 채우는 방법과 수동 마이그레이션 시 주의할 점을 정리합니다.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-n-plus-1</guid>
    <title>Django N+1 쿼리 문제와 해결법</title>
    <link>https://hyo814-blog.vercel.app/blog/django-n-plus-1</link>
    <description>Django ORM에서 자주 발생하는 N+1 쿼리 문제를 진단하고 select_related, prefetch_related로 해결하는 방법을 정리합니다.</description>
    <pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-treebeard-mp-node</guid>
    <title>django-treebeard MP_Node로 트리 구조 데이터 다루기</title>
    <link>https://hyo814-blog.vercel.app/blog/django-treebeard-mp-node</link>
    <description>django-treebeard의 MP_Node(Materialized Path)를 활용해 계층형 데이터를 DB에 저장하고 효율적으로 조회하는 방법을 정리합니다.</description>
    <pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-커스텀-user-카카오-oauth</guid>
    <title>Django 커스텀 User + 카카오 OAuth 2.0 — 일반 회원가입과 공존시키기</title>
    <link>https://hyo814-blog.vercel.app/blog/django-커스텀-user-카카오-oauth</link>
    <description>AbstractUser를 확장한 커스텀 User 모델에 카카오 OAuth 2.0을 얹어, 일반 이메일 가입과 소셜 로그인을 한 테이블에서 공존시키는 과정을 정리합니다.</description>
    <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django-템플릿-공용-매크로와-스크롤-스파이-외부화-회고</guid>
    <title>Django 템플릿에서 공용 매크로와 스크롤 스파이를 외부화한 회고</title>
    <link>https://hyo814-blog.vercel.app/blog/django-템플릿-공용-매크로와-스크롤-스파이-외부화-회고</link>
    <description>약관/방침 페이지와 소개·가이드 페이지에 흩어져 있던 마크업 중복을 base 템플릿 + 공용 매크로 + 외부 스크립트로 정리한 회고입니다.</description>
    <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django로-1-on-1-비공개-qna-게시판-만들기</guid>
    <title>Django로 1:1 비공개 Q&amp;A 게시판 만들기 — 권한 분리와 PostComment 패턴</title>
    <link>https://hyo814-blog.vercel.app/blog/django로-1-on-1-비공개-qna-게시판-만들기</link>
    <description>본인과 관리자만 열람할 수 있는 1:1 비공개 문의 게시판을 Django로 구현한 과정을 정리합니다. 열람 권한, 답변 권한, 첨부파일 재사용 패턴을 다룹니다.</description>
    <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/django로-설문조사-시스템-처음부터-만들기</guid>
    <title>Django로 설문조사 시스템 처음부터 만들기 — 3-tier 재설계와 PDF 다운로드</title>
    <link>https://hyo814-blog.vercel.app/blog/django로-설문조사-시스템-처음부터-만들기</link>
    <description>common 앱에 섞여 있던 설문조사 모델을 독립 앱으로 분리하고 3-tier 아키텍처로 재설계한 과정, 그리고 weasyprint 기반 PDF 다운로드와 개인정보 마스킹 구현을 정리합니다.</description>
    <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/faq-자주묻는질문-게시판-만들기</guid>
    <title>새 모델 없이 Post + 카테고리로 FAQ 게시판 만들기</title>
    <link>https://hyo814-blog.vercel.app/blog/faq-자주묻는질문-게시판-만들기</link>
    <description>FAQ 게시판을 새 모델을 추가하지 않고 기존 Post 모델 + &quot;FAQ&quot; 카테고리로 구현한 회고입니다. 공지사항과 한 모델을 공유하면서 카테고리로 분리하고, 큐레이션 순서 노출·읽기 전용 본문·데이터 적재 커맨드까지 묶은 이야기예요.</description>
    <pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/feedparser-bs4로-rss-파이프라인-만들기</guid>
    <title>feedparser + BeautifulSoup4로 RSS 크롤링 파이프라인 만들기</title>
    <link>https://hyo814-blog.vercel.app/blog/feedparser-bs4로-rss-파이프라인-만들기</link>
    <description>한국어 5개 + 영어 4개 RSS 소스에서 Python/Django 관련 글만 골라 수집하고, HTML 정제와 자동 태깅까지 거치는 파이프라인을 Django management command로 정리한 기록입니다. 나중에 다시 읽으면서 키워드 부분 문자열 매칭과 한글 slugify에서 결함 세 개를 찾았고, 재현 스크립트까지 같이 적었습니다.</description>
    <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/jinja-template</guid>
    <title>Jinja 템플릿 정리 — 문법 레퍼런스와 Django에서 실제로 쓰며 배운 것</title>
    <link>https://hyo814-blog.vercel.app/blog/jinja-template</link>
    <description>Jinja 템플릿의 문법·필터·상속·매크로를 표로 정리한 레퍼런스입니다. Django 프로젝트에서 Jinja2를 실제로 쓰며 배운 것들을 뒤에 붙였습니다 — url·static이 공짜가 아니라는 것, safe 필터가 사고의 지름길이라는 것, 그리고 원문 필터 표의 예시가 문법부터 틀려 있었다는 고백까지.</description>
    <pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/open-api-정책-토글-캐시와-만료-상태-동기화</guid>
    <title>Open API 정책 토글의 캐시·만료 상태가 어긋나던 문제를 동기화한 회고</title>
    <link>https://hyo814-blog.vercel.app/blog/open-api-정책-토글-캐시와-만료-상태-동기화</link>
    <description>관리자가 오퍼레이션을 토글했는데 TTL이 지나야 반영되던 캐시 갭, 그리고 만료된 토큰의 신청 상태가 &quot;승인됨&quot;으로 남던 stale 문제를 정리합니다. 캐시 즉시 무효화와 진입 시점 sync_expired로 &quot;보이는 상태 = 실제 상태&quot;를 맞춘 이야기예요.</description>
    <pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/sqlite-dev-postgres-prod-charfield-length</guid>
    <title>SQLite에선 통과하고 PostgreSQL에서 터진 CharField(512)</title>
    <link>https://hyo814-blog.vercel.app/blog/sqlite-dev-postgres-prod-charfield-length</link>
    <description>로컬(SQLite)에선 멀쩡히 적재되던 메타데이터 로더가 운영(PostgreSQL)에서만 value too long으로 죽었습니다. 프런트 쪽을 주로 맡다가 모델·마이그레이션을 조금씩 만지기 시작한 입장에서, 원인을 어떻게 좁혀갔고 네 가지 선택지 중 왜 TextField를 골랐는지 정리합니다.</description>
    <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/uuid-토큰-기반-뉴스레터-구독-해지</guid>
    <title>UUID 토큰 기반 뉴스레터 구독/해지 시스템</title>
    <link>https://hyo814-blog.vercel.app/blog/uuid-토큰-기반-뉴스레터-구독-해지</link>
    <description>로그인 없이 이메일 한 줄로 구독하고, 발송 메일의 고유 링크로 해지할 수 있는 뉴스레터 시스템을 Django + DRF로 설계한 기록입니다.</description>
    <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/메타클래스-쿼리-최적화-회고</guid>
    <title>메타클래스 리스트가 점점 느려진 이유 — N+1 잡고 prefetch 정리한 회고</title>
    <link>https://hyo814-blog.vercel.app/blog/메타클래스-쿼리-최적화-회고</link>
    <description>항목 수가 늘면서 점점 느려지던 메타클래스 리스트 페이지의 쿼리를 분석하고, select_related/prefetch_related로 정리하면서 의식한 점들을 기록합니다.</description>
    <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/목업-데이터-엑셀-시드-49에서-478개-자동화</guid>
    <title>목업 데이터 49개에서 478개로 — 엑셀을 mockup 시드로 자동화한 기록</title>
    <link>https://hyo814-blog.vercel.app/blog/목업-데이터-엑셀-시드-49에서-478개-자동화</link>
    <description>백엔드 개발 전 mockup 데이터가 49개라서 페이지네이션·검색·필터 검증이 빈약했던 문제를, 엑셀 파일을 입력으로 받는 시드 스크립트를 만들어 478개로 늘린 과정을 정리합니다.</description>
    <pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/분류체계-메타클래스-트리-공통-로직-헬퍼-추출-회고</guid>
    <title>분류체계와 메타클래스 트리 공통 로직을 헬퍼 4종으로 추출한 회고</title>
    <link>https://hyo814-blog.vercel.app/blog/분류체계-메타클래스-트리-공통-로직-헬퍼-추출-회고</link>
    <description>두 페이지가 따로 들고 있던 jstree 옵션과 이벤트 핸들러를 비교해 차이가 거의 없음을 확인하고, 공통 헬퍼 4종으로 추출한 리팩토링 회고입니다.</description>
    <pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/없는-관계를-prefetch하고-있었다</guid>
    <title>없는 관계를 prefetch하고 있었다 — 다운로드 4종을 죽인 한 단어</title>
    <link>https://hyo814-blog.vercel.app/blog/없는-관계를-prefetch하고-있었다</link>
    <description>카탈로그 PNG 다운로드가 500을 뱉어서 들어갔는데, 원인은 성능 최적화라고 믿고 있던 prefetch_related의 인자 하나였습니다. Dataset에 없는 관계명이라 QuerySet 평가 시점에 AttributeError가 났고, 지연 평가 때문에 선언부가 아니라 버튼 클릭에서 터졌어요. 같은 파일 안에서 따옴표 표기가 갈려 grep이 한쪽만 잡은 이야기와, AST로 인자 478건을 전수 대조한 기록입니다.</description>
    <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/엑셀-2단-병합-헤더-워크북-리더와-4패스-로더</guid>
    <title>엑셀 한 장이 스키마였다 — 2단 병합 헤더 리더와 4패스 로더</title>
    <link>https://hyo814-blog.vercel.app/blog/엑셀-2단-병합-헤더-워크북-리더와-4패스-로더</link>
    <description>엑셀 3개를 읽던 로더 3개를 워크북 1개를 읽는 로더 1개로 합쳤습니다. pandas가 못 읽는 2단 병합 헤더를 openpyxl로 직접 평탄화하고, 시트 순서 의존을 없애려고 유형별 4패스로 나눴어요. 853행에서 중복 6건이 나왔는데 그 승자 규칙에 아직 구멍이 남아 있다는 얘기까지 적었습니다.</description>
    <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/정본-파생캐시-동기화-signal-fanout</guid>
    <title>고쳤는데 목록은 옛날 값 — 정본과 파생 캐시를 시그널로 다시 붙인 회고</title>
    <link>https://hyo814-blog.vercel.app/blog/정본-파생캐시-동기화-signal-fanout</link>
    <description>인스턴스를 수정해도 목록·다운로드·RDF는 옛 값을 보여줬습니다. 링크 시점에 한 번 복사하고 끝이었거든요. 캐시 제거·조회 시 재계산·쓰기 시 시그널 세 안을 놓고 마지막을 고른 이유와, 감사 로그가 폭발하지 않게 bulk_update로 일부러 시그널을 우회한 트레이드오프를 정리합니다.</description>
    <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

  <item>
    <guid>https://hyo814-blog.vercel.app/blog/폼 레이아웃을 도와주는 다른 방법들</guid>
    <title>Django 폼 레이아웃을 도와주는 방법들 — 조사, 그리고 실제로 고른 조합</title>
    <link>https://hyo814-blog.vercel.app/blog/폼 레이아웃을 도와주는 다른 방법들</link>
    <description>Django 폼 렌더링을 돕는 라이브러리 5종(crispy-forms, widget-tweaks, formify, bootstrap5, dynamic-formset)을 비교 조사했던 글입니다. 결말을 붙였어요 — 실제 프로젝트는 이 중 하나가 아니라 둘(crispy + widget-tweaks)을 역할을 나눠 같이 씁니다. 비교표를 만들 때는 후보들이 경쟁 관계인 줄 알았는데, 절반은 보완 관계였습니다. (원래 2022-08로 게시돼 있던 날짜는 본문이 Django 5.2 문서를 참조해 불가능한 날짜라 조사 시점 기준으로 교정했습니다.)</description>
    <pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate>
    <author>ggamjge8888@naver.com (Hyo814)</author>
    <category>기술노트</category><category>Django</category>
  </item>

    </channel>
  </rss>
