Backend
.NET, Go, DB, API
-
[개념] fork — 프로세스·저장소·프로젝트에서 복제되는 것은 각각 무엇인가
하루에 fork라는 단어를 세 번 다른 뜻으로 썼습니다. 터미널에서 프로세스를 복제할 때, 깃허브에서 버튼을 누를 때, 데비안과 우분투의 관계를 이야기할 때. 세 층위에서 실제로 복제되는…
-
AI에게 개발을 맡기며 다시 세운 세 가지 기준 — 성공 기준, 되돌릴 수 있는가, 필요할 때의 해상도
AI에게 구현을 맡기면 어디까지 맡기고 무엇을 직접 붙들어야 할까. 예전에 로그를 전부 찍어가며 원인을 추적하던 방식에서 ‘성공 기준을 정하고 나머지는 통제한다’로 옮겨온 과정과, 그 방식이…
-
프로세스와 스레드, 그리고 뮤텍스 — 리눅스에서 clone()과 futex로 직접 확인하기
프로세스는 격리되고 스레드는 공유한다는 설명은 어디에나 있지만, 리눅스 커널 입장에서 둘은 clone() 플래그 몇 개 차이일 뿐입니다. Debian 12 컨테이너에서 fork와 pthread_create가 실제로 부르는 시스템콜을…
-
[홈랩 검증기] READY 1/1인데 고장나 있었다 — 준비 상태가 증명하지 않는 것들
DB를 재기동한 뒤 모든 파드가 READY 1/1이었습니다. 그런데 애플리케이션은 DB에 닿지 못하고 있었고, DB 크기는 줄어든 것처럼 보였고, 제가 쓴 점검 명령은 고장난 파드를 걸러내지…
-
[로컬 서버 운영기] 한 번 로그인으로 다 쓰기 — 커스텀 JWT에서 Keycloak으로, 무중단으로
여러 서비스가 같은 비밀키로 서명한 HS256 JWT를 공유하면 SSO 흉내는 납니다. 하지만 중앙 관리·키 회전·표준 로그인 화면이 없습니다. 잘 도는 인증을 멈추지 않고 Keycloak(OIDC)으로 옮긴…
-
“뭔가 이상한데”가 신호일 때 — 기대와 실제의 간극을 무시하지 않는 개발 습관
어떤 분야를 오래 한 사람일수록 ‘뭔가 이상한데’라는 말을 자주 합니다. 그 감각의 정체를 ‘시도·기대·실제’라는 회고 프레임으로 풀어보고, 기대와 실제의 간극을 ‘되겠거니’ 하고 넘겼다가 사고로 이어진…
-
[채팅 백엔드 보안] WebSocket은 무엇으로 지키고, 셀프호스팅한 메시지 큐는 누가 들여다보나
WebSocket 채팅을 무엇으로 인증·격리하는지(JWT HS256 + TLS + 테넌트 네임스페이싱), 메시지 큐로 RabbitMQ를 고른 이유와 PV 구성, 그 큐를 headless ClusterIP로 바깥에 안 여는 접근…
-
[Flutter × 채팅] 낙관적 UI와 clientMsgId — 서버 멱등키가 클라이언트에서 중복 제거로 완성되는 지점
이중 쓰기(WS 릴레이 + REST 영속화)를 하면 내가 보낸 메시지가 WS로 되돌아와 중복된다. Flutter 앱 Bibleana가 clientMsgId 하나로 낙관적 UI와 에코 dedupe를 잇는 방법, single-flight…
-
[채팅 백엔드 설계] 방이 두 pod에 흩어졌을 때 — RabbitMQ fan-out과 app_key 멀티테넌시
게이트웨이를 여러 pod로 늘리면 같은 방의 두 사용자가 서로 다른 인스턴스에 붙는다. RabbitMQ topic exchange에 인스턴스별 ephemeral 큐를 바인딩하고 origin 태그로 중복을 막는 fan-out, 그리고…