프로덕션 시스템을 만드는 백엔드 엔지니어입니다. 영화를 전공하다 엔지니어가 되었고, 지금은 Moba에서 백엔드를 리드하고 있어요. 이 블로그엔 그동안 배운 것들을 기록합니다.
- 동기화한 이벤트
- 7M
- 발행한 글
- 167
- 폴리글랏 서비스
- 6
- 이중 언어 기록
- EN/KR
프로젝트
Arch Calendar
레거시 백엔드를 퍼블릭 런칭까지 단독 유지보수 — 멀티 계정 캘린더 동기화, 결제, 실시간 업데이트로 700만 건의 이벤트 처리.
visit ↗3B 시스템
이 사이트 뒤의 3B 에이전트 하네스를 공개용으로 정제한 시스템 맵입니다. 레이어, 서브시스템, 결정 기록, 블로그 시리즈 진행 상황을 보여줍니다.
system map →Project Crucio
생성형 AI를 위한 Zero Trust 보안 — 6개 폴리글랏 마이크로서비스(Python + Go + Rust + TypeScript), Kafka 이벤트 스트리밍, 해시 체인 감사 로그, GCP + NAS 하이브리드 인프라 위 LGTM 풀 옵저버빌리티.
visit ↗
Claude Code Agent Teams를 실제 작업에 쓰며 배운 점
Agent Teams의 현재 동작과 version별 pane 문제, 작업 소유권, 결과 전달 실패를 구분해서 정리한 사용 기록이에요.

Gemini 비대칭 Embedding 활용하기
Query와 document를 다르게 인코딩하면 검색 품질이 좋아져요. Gemini는 이걸 task_type 파라미터로 표현했고, 새 모델에서는 같은 아이디어가 prompt 안으로 옮겨갔어요.

BeautifulSoup + lxml memory overhead: scraper에 크기 제한이 필요한 이유
httpx로 페이지를 받아 BeautifulSoup에 넘기는 scraper는 OOM 위험을 안고 있어요. 파싱한 DOM tree가 원본 HTML보다 훨씬 많은 메모리를 쓰기 때문이에요. streaming과 두 겹의 크기 거부로 정리한 과정이에요.

FastAPI Dependency Injection 패턴
모든 라우트 핸들러에서 `Depends(get_current_user)`를 반복하면 보일러플레이트가 생기고 불일치가 발생하기 쉬워요

FastAPI domain 예외 handler: 404여야 할 응답이 500으로 나갈 때
service layer에서 raise한 domain 예외는 FastAPI에 등록하기 전까지 전부 500으로 나가요. 계층 전체를 handler 하나로 묶으면서 알게 된 것과, review가 뒤늦게 짚어준 네 가지 함정을 정리했어요.

PostgreSQL IN 절 파라미터 제한
PostgreSQL wire protocol은 파라미터 쿼리를 65,535개 바인드 파라미터로 제한해요. TypeORM의 `In([...])`을 500-1,000개로 쪼개면 실질적인 성능 한계 안에 머물러요.

캘린더 동기화에서 Stale Record와 Orphan Record의 차이
Google Calendar API 동기화가 남기는 두 종류의 찌꺼기 행은 겉보기에 똑같지만 처리 방법은 정반대예요

크로스 클라우드 이벤트 흐름을 위한 대칭형 Redis ↔ Kafka 브리지 페어
Cloud Run에서는 내부 Kafka 브로커에 닿지 못해요. `advertised.listeners`가 늘 발목을 잡거든요. Redis를 거치는 단방향 브리지 한 쌍이면 지켜야 할 조건을 전부 지킬 수 있어요.

Sync Token 무효화 복구 (410 GONE)
Google Calendar API가 410 GONE을 반환하면 sync token이 무효화되고 전체 재동기화가 필요해요. 올바른 처리 방법을 알아봐요.

AWS ECS/ALB에서의 WebSocket 아키텍처
ALB, ECS, Redis Pub/Sub를 활용한 실시간 알림용 WebSocket 연결 구조