Archives
All the articles I've archived.
-
모델이 바뀔 때마다 코드를 고치고 싶지는 않았다
모델의 가격, 입력 한도, 과금 방식이 자주 바뀌는 상황에서, 내부 도구와 작은 서비스의 모델 호출 정책을 코드 밖으로 빼기 위해 llmgate를 만든 과정을 정리한다.
-
배포 중 5xx는 왜 날까 — K8s 파드 종료를 분해해서 서비스 특성별로 대응하기
서비스를 배포할 때 간헐적으로 뜨는 5xx는 어디서 오는가. K8s 파드 종료 과정을 '프로세스 경로'와 '네트워크 경로'로 분해하고, preStop과 graceful shutdown을 8가지 조합으로 실험해서 서비스 특성(요청 길이)에 따라 필요한 대응이 달라진다는 것을 확인했다.
-
작은 서비스를 계속 만들다 보니 인증부터 먼저 분리하게 됐다
개인 프로젝트에서 작은 서비스를 여러 개 만들기 시작하니, 기능보다 먼저 인증이 반복됐다. 로그인을 공통으로 쓰려는 게 아니라, 여러 서비스가 같은 사람을 같은 사람으로 알아보게 하려고 인증을 먼저 분리했다.
-
curl은 되는데 git fetch는 안 된다 — MTU 불일치를 실험하고 실제 장애에서 확인하기
네트워크 인터페이스마다 한 번에 보낼 수 있는 패킷 크기가 다를 수 있다. 이 차이가 만드는 증상을 직접 재현하고, 실제로 GitHub Actions DinD 러너에서 같은 문제를 만났던 경험을 정리한다.
-
노드가 다르면 패킷은 어떻게 건너가는가 — VXLAN으로 네임스페이스 연결하기
노드 간 네트워크 세팅의 본질은 두 가지다: IP 대역 배분과 라우팅 정의. 이 글은 그 개념에서 출발해 VXLAN 실습으로 증명한다.
-
설정 한 줄 바꾸는 데 왜 이렇게 무거운가 — Helm에서 ArgoCD로, 관심의 윈도우를 나눈 이야기
폐쇄망 On-Prem 환경에서 Helm 기반 운영이 한계에 부딪혔을 때, 문제는 도구가 아니라 설치와 배포가 하나로 묶인 구조에 있었다. 이 글은 그 구조를 둘로 분리하고 관심의 윈도우를 옮긴 과정을 기록한다.
-
컨테이너의 네트워크는 어떻게 연결되는가 — 빈 네임스페이스에서 인터넷까지
컨테이너 안에서 ping 8.8.8.8이 되는 건 당연하지 않다. 네트워크 네임스페이스는 생성 직후 완전히 비어 있다. 이 글은 빈 네임스페이스에서 시작해, 한 단계씩 네트워크를 연결하며 각 명령어가 커널에서 무엇을 하는지 추적한다.
-
Docker로 만들면 어디서든 된다? — GPU로 드러나는 컨테이너 추상화의 경계
컨테이너 이미지는 많은 실행 환경을 감춘다. 하지만 GPU는 그 추상화가 멈추는 지점을 드러낸다. 이 글은 vLLM 서빙 실험을 통해 컨테이너가 어디까지 독립적이고, 어디서부터 호스트에 의존하는지 추적한다.
-
온프레미스 Kubernetes 스토리지 설계: 같은 서비스라도 규모가 커지면 기준이 바뀐다
같은 SaaS 서비스를 온프레미스 Kubernetes에 옮기더라도 규모가 커지면 스토리지의 관리 단위는 노드에서 클러스터로 이동한다. 작은 환경에서는 RAID1 기반 노드 로컬 구성이 실용적이었지만, 규모가 커지자 다른 기준이 필요해졌다.