본문으로 건너뛰기
brandon@moba: ~/whoami
brandon@moba:~$ whoami --verbose

프로덕션 시스템을 만드는 백엔드 엔지니어입니다. 영화를 전공하다 엔지니어가 되었고, 지금은 Moba에서 백엔드를 리드하고 있어요. 이 블로그엔 그동안 배운 것들을 기록합니다.

동기화한 이벤트
7M
발행한 글
167
폴리글랏 서비스
6
이중 언어 기록
EN/KR
#

프로젝트

ai-ml

Claude Code Agent Teams를 실제 작업에 쓰며 배운 점

Agent Teams의 현재 동작과 version별 pane 문제, 작업 소유권, 결과 전달 실패를 구분해서 정리한 사용 기록이에요.

ai-ml

Gemini 비대칭 Embedding 활용하기

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

backend

BeautifulSoup + lxml memory overhead: scraper에 크기 제한이 필요한 이유

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

backend

FastAPI Dependency Injection 패턴

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

backend

FastAPI domain 예외 handler: 404여야 할 응답이 500으로 나갈 때

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

backend

PostgreSQL IN 절 파라미터 제한

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

backend

캘린더 동기화에서 Stale Record와 Orphan Record의 차이

Google Calendar API 동기화가 남기는 두 종류의 찌꺼기 행은 겉보기에 똑같지만 처리 방법은 정반대예요

backend

크로스 클라우드 이벤트 흐름을 위한 대칭형 Redis ↔ Kafka 브리지 페어

Cloud Run에서는 내부 Kafka 브로커에 닿지 못해요. `advertised.listeners`가 늘 발목을 잡거든요. Redis를 거치는 단방향 브리지 한 쌍이면 지켜야 할 조건을 전부 지킬 수 있어요.

backend

Sync Token 무효화 복구 (410 GONE)

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

backend

AWS ECS/ALB에서의 WebSocket 아키텍처

ALB, ECS, Redis Pub/Sub를 활용한 실시간 알림용 WebSocket 연결 구조

enko