기술 블로그
실무에서 직접 설계·운영한 백엔드 시스템과 의사결정 기록. Go·Java/Spring·PostgreSQL·Kubernetes 기반의 분산 시스템 패턴, 음성 AI 파이프라인(WebRTC·STT·LLM·TTS)의 latency·동시성 트레이드오프, OCR/문서 탐지 모델의 평가 지표(F1·Precision·Recall) 적용기 등을 다룹니다. 모든 글은 본인이 직접 운영하며 측정한 1차 데이터에서 출발합니다.
-
[채팅 백엔드 설계] 느린 클라이언트 하나가 방 전체를 막지 않게 — 샤딩·워커풀·drop-on-full
WebSocket 게이트웨이는 얇지만 단순하지 않다. 방 맵을 32개 샤드(FNV-1a)로 나눠 lock 경합을 줄이고, 방마다 워커풀 10 + 버퍼 큐 10000을 두고, 큐가 꽉 차면 blocking…
-
[채팅 백엔드 설계] 게이트웨이를 일부러 멍청하게 — 실시간 릴레이와 영속화를 분리한 이유
채팅 백엔드에서 실시간 전달과 메시지 영속화를 한 서비스에 묶으면 DB 장애가 실시간을 죽이고 스케일링이 어려워진다. room-gateway를 DB도 비즈니스 로직도 없는 ‘dumb pipe’로 두고, 클라이언트가 WS…
-
[OKE 인프라 학습 시리즈] arm64 노드에 실제 서비스 얹기 — 무료 OKE 배포에서 부딪힌 함정들
무료 A1(arm64) 단일 노드에 Go 채팅 백엔드 8개 pod를 얹으며 실제로 부딪힌 것들. cri-o의 short-name 거부, RabbitMQ의 deprecated env로 인한 부팅 실패, WebSocket을 위한 sessionAffinity·graceful…
-
[OKE 인프라 학습 시리즈] 무료 클러스터에 https:// 붙이기 — Traefik LoadBalancer + 도메인 + cert-manager
OKE 클러스터는 떴지만 바깥에서 접근할 수 없다. Traefik를 Service type=LoadBalancer로 붙여 OCI 무료 10Mbps LB 공인 IP를 받고, 도메인을 A 레코드로 연결한 뒤, cert-manager와 Let’s…
-
[OKE 인프라 학습 시리즈] 관리비 $0로 쿠버네티스 띄우기 — OCI Always Free로 OKE 클러스터 구축
OCI Always Free 한도 안에서 관리형 쿠버네티스(OKE)를 월 $0로 띄운다. Basic 클러스터 + A1.Flex(arm64) + 4 OCPU/24GB 무료 조건, 세션 토큰 대신 API 키 인증,…
-
[OKE 인프라 학습 시리즈] 클라우드 런에서 오라클 쿠버네티스(OKE)로 — 왜 다시 상시 가동 환경으로 옮기나
GKE 인프라 학습 시리즈에서 GKE에 직접 서비스를 띄우고 비용을 줄이는 이야기까지 왔었다. 그 뒤 개인 앱은 비용 문제로 Cloud Run으로 한 번 옮겼는데, 이번엔 방향을…
-
애드센스는 어떻게 내 사이트를 평가할까 — Googlebot 자동 크롤과 Search Console로 그 근거 확인하기
오늘 내 블로그의 색인 상태를 Google Search Console에서 직접 뜯어보다가, 그동안 막연하던 그림 하나가 또렷해졌다. 애드센스 심사는 누가 사람이 앉아서 페이지를 넘겨보는 게 아니라, 구글이…
-
[백엔드 운영] 풀을 키우기 전에 — 느린 SQL이 커넥션을 잡고 있을 때
active가 max에 붙었다고 풀이 작은 건 아니다. 각 커넥션이 어떤 SQL을 몇 ms째 잡고 있는지(held)부터 봐야 한다. items.order_id 인덱스 하나로 hold time을 줄여, 풀을 키우지…
-
[백엔드 운영] 긴 작업이 짧은 요청을 잡아먹을 때 — 풀 격리와 읽기/쓰기 분리
풀은 FIFO 큐다. 긴 작업 하나가 슬롯을 오래 잡으면 빠른 SELECT까지 줄 뒤에서 대기한다. short/long 풀 격리와 읽기/쓰기 분리를 Spring의 AbstractRoutingDataSource(마법)와 Go의 명시 호출로 비교한다.
-
[백엔드 운영] Hikari가 공짜로 해주던 것 — 커넥션 누수 추적을 직접 만들어 보다
커넥션을 빌리고 반납을 안 하면 풀은 조용히 고갈된다. HikariCP는 leakDetectionThreshold 한 줄로 누수를 stacktrace까지 잡아주지만, Go pgxpool엔 그 기능이 없어 직접 만들어야 한다. 같은 UX를…