백엔드
API설계
에러처리, Rate Limiting, errorId
-
백엔드/Python-Flask
작지만 기억할 만한 네 가지: Alembic 빈 마이그레이션, 시뮬레이션 엔드포인트, F841 ignore, 'done' vs 'success'
시리즈 마지막 편은 작지만 기억할 만한 네 가지 수정을 묶었습니다. 빈 Alembic revision이 생기는 이유, "시뮬레이션" 주석이 남긴 엔드포인트, F841 ignore 뒤의 숨은 버그, 프론트/백엔드 상태 문자열 불일치 — 모두 "임시는 영구화된다"는 공통 교훈을 가집니다.
-
백엔드/Python-Flask
하나의 백엔드로 Detection/Classification/Segmentation 지원하기: task별 데이터셋 포맷 분기
UI의 task 드롭다운은 있었지만 백엔드는 항상 detection만 돌리고 있었습니다. 5 사이즈 × 3 task = 15 variant를 task별 데이터셋 포맷(bbox/ImageFolder/polygon)과 메트릭 컬럼 분기로 통합한 기록입니다.
-
백엔드/Python-Flask
Python/SQLAlchemy N+1 쿼리 잡기: 이미지 라벨링 플랫폼 실전 편
코드 리뷰에서 발견된 세 곳의 N+1 쿼리. 이미지 100장이면 DB 라운드트립이 101회였던 이유와 `IN` 쿼리 + 벌크 DELETE로 2회로 줄인 실전 기록을 Python/SQLAlchemy로 정리했습니다. Prisma 편의 자매글입니다.
-
백엔드/Python-Flask
JSON 파일 데이터베이스에서 PostgreSQL로: 서비스 시그니처를 유지하며 데이터 레이어 교체하기
`users.json`, `labels/*.json` 파일 저장소를 PostgreSQL로 교체하면서 라우트 9개는 한 줄도 수정하지 않았습니다. 계층 경계를 미리 뽑아 둔 지난 편 리팩토링의 보상을 그대로 보여 주는 실전 기록입니다.
-
백엔드/Python-Flask
1,932줄 app.py를 54줄로: 모놀리식 Flask를 Blueprint로 분해하기
인수인계 받은 Flask 백엔드의 `app.py`가 1,932줄 한 파일에 42개 API가 섞여 있었습니다. Application Factory 패턴과 Blueprint로 도메인을 분리하고, 42개 경로를 그대로 유지하며 프론트엔드 변경 없이 리팩토링한 실전 기록입니다.
-
백엔드/API설계
Subscription 모델링: 왜 planId는 불변이어야 하는가 (trialPlanId 분리 패턴)
Trial은 구독의 한 종류가 아니라 구독 위에 얹힌 임시 레이어입니다. planId를 불변으로 유지하고 trialPlanId로 기능을 덧칠한 설계 이야기입니다.
-
백엔드/API설계
분산 트랜잭션이 없을 때: Payment Provider와 DB의 cancelFailed 롤백 패턴
DB + PG의 다단계 연산은 원자적이지 않습니다. Saga 보상 대신 마커를 저장하고 cron이 자동 복구하는 패턴으로 해결했습니다.
-
백엔드/API설계
스케줄 결제의 숨겨진 덫: PENDING Invoice를 먼저 만들어야 하는 이유
webhook을 Invoice 생성 트리거로 쓰면 세 가지 문제가 터집니다. 스케줄 등록 시점에 PENDING Invoice를 미리 만드는 구조로 해결한 방법을 정리했습니다.
-
도구/Obsidian
E2E 스위트가 하나로 부족해진 날: Obsidian 플러그인에 두 번째 CDP 테스트 추가하기
첫 번째 CDP E2E 스위트 글의 속편. multi-config 리팩토링에서 Settings UI를 검증하기 위해 두 번째 E2E 스위트를 추가했고, 그 과정에서 51줄의 CDP 인프라 코드를 공유 모듈로 추출했습니다. 두 스위트를 하나의 Obsidian 인스턴스에서 돌리는 격리 규칙과 공유 경계 설계까지.
-
도구/Obsidian
Singleton을 Per-Instance로 바꾼 뒤 찾아온 메모리 누수: 16줄로 잡은 Orphaned RateLimiter
Obsidian 플러그인의 multi-config 리팩토링 중 발견한 조용한 메모리 누수: config를 삭제해도 그 config가 쓰던 RateLimiter가 공유 Map에 그대로 남았던 버그의 원인과 3파일 16줄짜리 fix. Per-instance 서비스 전환 시 주의해야 할 4가지 cleanup 함정을 정리했습니다.