본문 바로가기

반응형

전체 글

(293)
[Kubernetes] 쿠버네티스 배포 이후: 롤링 업데이트, 검증, 롤백 1편에서 쿠버네티스의 구조(Pod·Deployment·Service·etcd)를, 2편에서 이미지 태그 전략과 배포 명령을 정리했다. 이번 편은 배포 명령을 실행한 다음 클러스터 안에서 벌어지는 일들 — Pod가 교체되는 과정, 배포 성공의 판정, 롤백, 그리고 Pod가 안 뜰 때 보는 순서 — 를 정리해본다. 마지막에는 표준에서 벗어난 현실의 배포 환경 세 가지를 다룬다. 예시는 계속 가상의 앱 myapp(API 서버 myapp-web + background worker myapp-worker)이다.1. 롤링 업데이트2편의 배포 명령어를 실행하여 Pod 정의가 바뀌면 Deployment는 롤링 업데이트를 시작한다. 1편의 ReplicaSet이 여기서 일한다. Deployment: myapp-web├─ ..
[Kubernetes] 쿠버네티스 환경 배포 - 배포 경로, 이미지 태그, 배포 명령어 1편 ([Kubernetes] 쿠버네티스 환경 배포를 위한 오브젝트 개념)에서 쿠버네티스의 구조(Pod·Deployment·Service·etcd)를 정리했다. 이번 편은 그 구조 위에서 배포를 준비하는 표준 배포 경로, 이미지 태그 전략, 그리고 클러스터가 새 이미지를 보게 만드는 세 가지 명령어에 대해서 정리해본다. 실무 배포 가이드를 따라가며 배운 것들을 일반적인 흐름으로 재구성했다. 예시는 계속 가상의 앱 myapp(API 서버 myapp-web + background worker myapp-worker)이다.1. 배포의 표준 경로코드를 고치고 서비스에 반영하는 일반적인 구성은 아래와 같다. git push ──▶ CI (GitHub Actions 등) ──▶ registry ──..
[Kubernetes] 쿠버네티스 환경 배포를 위한 오브젝트 개념 실무에서 쿠버네티스 환경에 배포해야 할 상황이 왔다. 배포 가이드 문서를 읽는데 Pod, Deployment, Service 같은 용어가 쏟아진다. 명령어를 그대로 따라 칠 수는 있지만, 문제가 생겼을 때 대응하려면 구조를 알아야 한다. 그래서 세 편으로 정리한다. 1편(이 글)은 쿠버네티스를 구성하는 개념들, 이후는 실제 배포와 그 후 흐름이다. docker와 docker-compose까지는 써 봤다는 전제로 쓴다.0. 세 개의 축쿠버네티스 오브젝트는 종류가 많아 보이지만, 세 축으로 나누면 자리가 잡힌다. Cluster│├─ [인프라] Node 1, Node 2, … ← 컨테이너가 실제로 도는 서버들│├─ [워크로드] Deployment ─▶ ReplicaSet ─▶ Pod ─▶ Conta..
[Claude] Claude Code Cross-session messaging 기능 Claude Code를 터미널 두세 개에 띄워놓고 쓰다 보면, 한 session이 다른 session에 메시지를 보내는 장면을 보게 된다. 2026년 8월 v2.1.224에 들어온 cross-session messaging 기능이다. 이 글은 이 기능이 무엇이고 무엇을 할 수 있고 어떻게 쓰는지 공식 문서 기준으로 정리한다.1. Cross-session messagingcross-session messaging은 내 Claude Code session 하나가 내 다른 session에 텍스트 메시지를 전달하는 기능이다. 문서의 정의는 이렇다.A message is a piece of text one Claude writes to another, never the sender's conversation hi..
[Django] 세션 쿠키 생성/검증과 nginx proxy 관련 사고 서비스의 새로운 기능을 테스트 하던 중 특정 화면에서 갑자기 로그아웃이 발생했다. 사용자가 아무것도 하지 않았는데 몇 초 뒤 로그인 화면으로 튕겨나갔다. 서버 로그에는 세션이 없다는 메시지만 남아 있었고 세션 만료 시간은 한참 남아 있었다. 원인은 nginx 설정 한 줄과 브라우저 fetch 의 기본값이 만나서 생긴 것이었다. 이 사고를 이해하려면 Django 세션이 정확히 어디에 있고, 누가 만들고, 누가 확인하는지를 알아야 한다. 이번 글에서는 Django 세션의 구조와 라이프사이클을 먼저 정리하고 그 위에 사고를 올려놓고 왜 로그아웃이 났는지 따라가 보겠다. 회사 코드는 그대로 쓸 수 없어서 같은 구조의 가상 서비스로 각색했다.세션과 세션 쿠키가장 먼저 분리해야 할 개념이다. 흔히 "세션 쿠키" 라..
[AI Agent] AI Agent 채팅 서비스의 SSE 스트리밍 중단과 처리 방법 AI agent 서비스를 개발하며 겪은 문제들을 예제 프로젝트로 재구성해 정리하는 시리즈이다. 예제 코드는 parcel-bot repo 에 있고 docker compose 로 전부 재현할 수 있다. 지난 글에서 ASGI와 LangGraph으로 구현한 스트리밍 구성을 확인했다. 운영 환경에서는 스트리밍의 중단 상황을 고려해야 한다. 스트리밍이 중단되면 무슨 일이 일어나는가. LLM 호출이 실패했을 때, 응답이 오래 걸릴 때, 사용자가 화면을 떠났을 때 각각 클라이언트에는 무엇이 보이고 서버는 무엇을 해야 하는가. 이번 글에서는 운영에서 실제로 겪는 중단 상황들을 빈도 순으로 정리하고 각각의 처리를 구현해보겠다.스트리밍 중단 기준본문으로 들어가기 전에 판단 기준을 하나 세우려한다. 스트리밍 중단 상황의 처리..
[LLM] LangGraph의 node 실행 방식 LangGraph 로 graph 를 만들다 보면 각 node가 어떻게 동작하는지, graph의 실행 방식에 대한 의문이 생긴다. node 를 sync 함수로 쓸 때와 async 함수로 쓸 때 무엇이 달라지는가. stream() 과 astream() 은 node 를 어떻게 다르게 실행하는가. sync node 를 astream() 으로 실행해도 되는가. 이번 글에서는 LangGraph 소스를 따라가며 node 가 실제로 어떻게 실행되는지 확인해보겠다. 기준 버전은 langgraph 1.2 이다.요약결론부터 먼저 보겠다. sync API (invoke/stream)async API (ainvoke/astream)sync node (def)호출 스레드에서 직접 실행워커 스레드에 위임 (executor)asy..
[AI Agent] ASGI 에서 LangGraph 스트림 버퍼링 문제 (iterator 와 서버의 조합) AI agent 서비스를 개발하며 겪은 문제들을 예제 프로젝트로 재구성해 정리하는 시리즈이다. 예제 코드는 parcel-bot repo 에 있고, docker compose 로 전부 재현할 수 있다. 이번 글은 이 시리즈를 시작하게 만든 문제를 다룬다. Django 와 LangGraph 로 만든 서비스에 성능을 높이기 위해 async 를 도입하는 과정에서, LangGraph 스트림이 통째로 버퍼링되는 문제를 만났다. 이전 글에서 정리한 iterator 와 서버의 관계를 정리했던 것처럼 이번 글에서는 문제를 재현하고 원인과 해결 방법을 확인해보겠다.문제 상황Django 와 LangGraph 로 구성된 AI agent 서비스가 있다. agent 의 응답은 SSE 로 스트리밍한다. def recommend(s..

반응형