<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ascendy Engineering</title><description>Ascendy 엔지니어링 블로그 — 백엔드/프론트엔드/인프라 작업의 결정과 트레이드오프</description><link>https://blog.ascendy.ai/</link><item><title>리뷰어가 &apos;괜찮아 보여요&apos;만 하면 무슨 소용인가 — 적대적 에이전트-페어 하네스 redteam 공개</title><link>https://blog.ascendy.ai/blog/redteam-launch/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/redteam-launch/</guid><description>두 번째 모델에게 코드 리뷰를 맡겨도 &apos;괜찮아 보여요&apos; 한마디면 고무도장이다. 오픈소스 하네스 redteam(v0.1.0)은 리뷰를 pass/fail이 아니라 티어드 발견(blocker/major/minor)으로 다루고, 살아남은 blocker를 재시도→rescue→사람으로 에스컬레이션한다. 한 모델이 쓰고, 다른 독립 모델이 적대적으로 검수한다.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>ai-collaboration</category><category>adversarial-review</category><category>open-source</category><category>developer-tools</category><category>agent-harness</category></item><item><title>벡터검색에서 리랭커를 뺐다 — &apos;아기 사진 다 찾아줘&apos;가 무너뜨린 가정</title><link>https://blog.ascendy.ai/blog/dropping-the-reranker/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/dropping-the-reranker/</guid><description>사진검색 스택에서 리랭커를 아예 뺐다. 계기는 &apos;아기 사진 다 찾아줘&apos; — 수천 장을 돌려줘야 하는 recall 문제인데 리랭커는 precision@k 도구라 벌크에 안 맞았다. 쿼리 타입 분기는 자연어 의도 추론 불가로 포기. 대신 Qwen3-VL-Embedding의 MRL로 저차원→고차원 2단계를 만들어 리랭커 없이 정밀도를 회복했다.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>vector-search</category><category>embeddings</category><category>reranker</category><category>matryoshka</category><category>retrieval</category><category>rag</category></item><item><title>자가개선 루프는 이미 생겼다 — 그런데 닫히려면 누군가 &apos;적어 넣어야&apos; 한다</title><link>https://blog.ascendy.ai/blog/capture-is-the-bottleneck/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/capture-is-the-bottleneck/</guid><description>내가 쓰는 AI 도구가 내 불평을 알아서 배워 스스로 고치면 좋겠다 — 그렇게 물었다가 알게 된 것. 자가개선 루프는 이미 생겼다(교정이 스킬 지시문에 다시 써진다). 그런데 루프는 &apos;교정이 포착될 때만&apos; 닫히고, 그 capture는 여전히 수동이다. 어려운 건 &apos;improve&apos;가 아니라 늘 &apos;capture→route&apos;였다.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>ai-agent</category><category>feedback-loop</category><category>self-improvement</category><category>developer-tools</category><category>process-design</category></item><item><title>취소하고 환불하는 기능을 멱등하게 — 터미널 상태 전이는 맨 마지막에</title><link>https://blog.ascendy.ai/blog/idempotent-cancel-refund/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/idempotent-cancel-refund/</guid><description>비용이 드는 비동기 작업을 &apos;전체 취소하고 환불&apos;하려면, 크래시와 재시도 한가운데서도 이중환불도 고아 리소스도 안 생겨야 한다. 핵심 셋 — 환불은 아이템 단위 원자 트랜잭션, 정리는 마커 기준 재실행, 작업의 터미널 상태 전이는 맨 마지막에. 동시 행위자가 생기면 모든 전이는 조건부 UPDATE.</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>idempotency</category><category>distributed-systems</category><category>race-condition</category><category>transactions</category><category>reliability</category></item><item><title>클릭으로 되는 건 전부 대화로도 돼야 한다 — 그런데 그걸 켜는 것부터 메뉴였다</title><link>https://blog.ascendy.ai/blog/conversational-parity/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/conversational-parity/</guid><description>AI 에이전트에게 &apos;이전 대화 불러와&apos;라고 했더니 &apos;Settings에서 토글을 켜라&apos;고 답했다. 대화형 회상 기능을 켜는 것부터 메뉴 다이빙. 산업은 recall을 대화형으로 만들어 패리티가 작동함을 증명했는데 정작 거기서 멈췄다 — 클릭으로 되는 모든 액션은 대화로도 돼야 한다는 &apos;대화-패리티&apos;와, 그 절반에서 멈춘 현실.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>ai-agent</category><category>ux</category><category>conversational-ui</category><category>product-design</category><category>opinion</category></item><item><title>두 AI가 같은 답을 골랐다 — 값어치는 그 답 속의 틀린 추론을 잡은 것</title><link>https://blog.ascendy.ai/blog/right-answer-wrong-reasoning/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/right-answer-wrong-reasoning/</guid><description>Claude와 Codex가 같은 결정에 독립적으로 도달했다. 그런데 둘째 AI의 진짜 값어치는 결론에 반대한 게 아니라 — 같은 답이었는데도 — 그 맞는 답 안에 숨은 틀린 추론 둘(과대 인과 주장, 이름뿐인 안전장치)을 잡아낸 데 있었다. second reviewer를 &apos;답 검산&apos;으로만 쓰면 놓치는 것.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>ai-collaboration</category><category>adversarial-review</category><category>decision-making</category><category>code-review</category><category>reasoning</category></item><item><title>리포트가 도착하는 것만으로는 아무것도 나아지지 않는다 — 끊긴 고리는 &apos;measure&apos;가 아니라 &apos;route&apos;였다</title><link>https://blog.ascendy.ai/blog/monitoring-closed-loop-route/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/monitoring-closed-loop-route/</guid><description>주기적으로 도착하는 모니터링 리포트는 그 자체로 가치가 0이다. &apos;측정→분석→개선→재측정&apos; 닫힌 루프일 때만 의미가 생긴다. 그런데 우리 루프의 끊긴 고리는 &apos;measure&apos;가 아니라 &apos;capture→route&apos; — 떠오른 개선점이 사람의 기억에 의존해 증발하는 manual relay 병목이었다. 사람을 transport에서 빼되 approver로 남기는 설계.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>monitoring</category><category>observability</category><category>feedback-loop</category><category>process-design</category><category>automation</category><category>agent-ops</category></item><item><title>그럴듯한 가짜 기본값이 prod를 조용히 삼킨다 — 검증을 &apos;환경 신호&apos;에 묶어라</title><link>https://blog.ascendy.ai/blog/placeholder-defaults-mask-config/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/placeholder-defaults-mask-config/</guid><description>운영 알림이 안 와 조사했더니 시크릿 drift로 env 키들이 증발해 있었다. 더 음험한 건 함께 사라진 키 — 추론 엔드포인트 기본값이 &apos;그럴듯한 가짜&apos;(example.com)라 코드가 조용히 가짜로 요청하고 에러 없이 실패했다. 로그도 안 남는다. 검증을 &apos;이 config를 쓰는 모드인가&apos;라는 환경 신호에 묶어 fail-fast로 가시화한 이야기.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>configuration</category><category>fail-fast</category><category>silent-failure</category><category>observability</category><category>twelve-factor</category><category>defense-in-depth</category></item><item><title>변환했다고 믿었지만 이름만 바꿨다 — 그리고 실패한 작업은 목록에서 사라졌다</title><link>https://blog.ascendy.ai/blog/rename-not-convert/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/rename-not-convert/</guid><description>벌크 사진 보정이 통째로 실패하는데 토스트도 에러 UI도 없었다. 원인은 두 겹 — 한 경로가 HEIC를 변환하지 않고 파일 이름만 .jpg로 바꿔 외부 API가 거부했고, 실패한 작업은 목록 쿼리에서 빠져 사용자에게 보이지조차 않았다. 장애를 숨기는 건 종종 두 번째 결함이다.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>image-processing</category><category>heic</category><category>silent-failure</category><category>error-contract</category><category>debugging</category></item><item><title>이름 하나 바꾸는 PR이 가장 넓은 PR이었다 — rename은 파일명이 아니라 문서 sweep이다</title><link>https://blog.ascendy.ai/blog/rename-pr-is-a-doc-sweep/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/rename-pr-is-a-doc-sweep/</guid><description>글로벌 미들웨어 파일명 하나를 정통화하는 rename PR. &apos;파일명 + 한 줄&apos;인 줄 알았는데, 진짜 작업은 그 파일을 &apos;현재 동작&apos;으로 묘사하는 라이브 문서 전수 sweep이었다. 정적 리뷰가 내가 놓친 6곳을 잡았고, round-2는 리뷰어 자신이 놓친 1곳을 더 잡았다. 라운드 사이클은 한 사람이 못 잡는 걸 잡는 누적 안전망이다.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>code-review</category><category>documentation</category><category>refactoring</category><category>ai-agents</category><category>convergence</category><category>developer-tooling</category></item><item><title>공개로 서빙되지만 비밀인 값 — 소유증명 키를 secret으로 다시 분류한 이야기</title><link>https://blog.ascendy.ai/blog/serving-a-public-but-secret-key/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/serving-a-public-but-secret-key/</guid><description>검색엔진 색인을 앞당기려 소유증명 키를 &apos;URL로 누구나 가져가니 공개값&apos;이라 분류해 git에 커밋했다. 리뷰가 공식 문서로 막았다 — &apos;Only you and the search engines should know the key&apos;. 공개로 서빙돼야 하지만 비밀로 취급돼야 하는 값은, 정적 파일 대신 엣지 Worker가 secret에서 서빙하면 둘 다 만족한다.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>cloudflare-workers</category><category>secrets-hygiene</category><category>secret-classification</category><category>code-review</category><category>indexnow</category></item><item><title>분산하라는 제약이 배포를 막았다 — required anti-affinity와 빠진 두 번째 노드</title><link>https://blog.ascendy.ai/blog/anti-affinity-deploy-order-trap/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/anti-affinity-deploy-order-trap/</guid><description>SPOF를 풀려고 두 stateful에 &apos;required&apos; anti-affinity를 걸었다. 그런데 그 제약을 만족할 두 번째 노드가 아직 없어서, 무관한 팀의 CD가 25시간 조용히 막히고 helm 배포가 5번 연속 실패했다. 분산 제약은 분산될 자리보다 먼저 들어가면 배포를 막는다 — 순서 의존성, 그리고 위험한 runbook 전제를 실행 전 재검증한 이야기.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>helm</category><category>pod-anti-affinity</category><category>continuous-deployment</category><category>deploy-order</category><category>root-cause-analysis</category></item><item><title>recreate 한 번에 벡터DB가 영영 안 떴다 — compose `${VAR}` 보간 ≠ env_file</title><link>https://blog.ascendy.ai/blog/compose-interpolation-not-env-file/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/compose-interpolation-not-env-file/</guid><description>워커 하나만 다시 만들려고 --force-recreate를 돌렸는데, 의존성을 따라 벡터DB까지 재생성되더니 영영 &apos;starting&apos;에 멈췄다. 원인은 빈 스토리지 키 — docker-compose의 ${VAR} 보간은 서비스의 env_file이 아니라 파싱 시점 호스트 셸/top-level .env에서 해석된다. env_file이 붙어 있어도 안 고쳐진다.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>docker-compose</category><category>vector-database</category><category>object-storage</category><category>silent-failure</category><category>credentials</category><category>root-cause-analysis</category></item><item><title>두 번째 AI를 어떻게 부르고 언제 멈추나 — headless adversarial 코드리뷰 루프</title><link>https://blog.ascendy.ai/blog/headless-adversarial-review-loop/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/headless-adversarial-review-loop/</guid><description>구현 에이전트와 리뷰 에이전트를 페어로 굴린다. 리뷰어를 화면 제어가 아니라 headless subprocess로 부르고 출력 형식을 강제하니 화면 파싱의 취약점이 통째로 사라졌다. 그리고 사람이 &apos;멈춤선&apos;을 긋고 리뷰어가 그 선을 판정하게 하자 adversarial 리뷰가 9→7→3→APPROVED로 수렴했다.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>ai-agents</category><category>code-review</category><category>automation</category><category>dogfooding</category><category>developer-tooling</category><category>convergence</category></item><item><title>알람 3개, 근원은 하나 — 노드 host freeze가 분기한 인시던트</title><link>https://blog.ascendy.ai/blog/host-freeze-three-alarms-one-root/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/host-freeze-three-alarms-one-root/</guid><description>검색엔진 down, 메트릭 시계열 역행, 노드 readiness flapping — 도메인이 다른 알람 3개가 동시에 울렸다. 근원은 하나였다: 한 노드의 host freeze. 그리고 probe가 없어 &apos;응답불가인데 1/1 Running&apos;으로 보인 silent hang, drain했더니 갈 곳이 없어 전부 Pending된 단일 노드풀 함정까지.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>elasticsearch</category><category>observability</category><category>incident</category><category>root-cause-analysis</category><category>health-probes</category></item><item><title>한 번 고친 버그가 어떻게 되살아났나 — 그리고 진단이 한 번 더 뒤집힌 이야기</title><link>https://blog.ascendy.ai/blog/nuxt-client-middleware-skips-initial-route/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/nuxt-client-middleware-skips-initial-route/</guid><description>세션 만료 후 보호 페이지가 로그인으로 안 보내졌다. fix 코드는 멀쩡히 살아 있었는데 거기 도달하는 path만 끊겼다. 처음엔 &apos;Nuxt 트레이트&apos;로 진단했지만 그것도 틀렸다 — 미들웨어가 지원하지 않는 `.client` suffix를 붙인 비표준 네이밍의 부산물이었다. 게시 과정의 팩트체크가 코드 정정까지 이끈 기록.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>nuxt3</category><category>ssr</category><category>middleware</category><category>session-expired</category><category>incident-prevention</category><category>playwright</category></item><item><title>초록불이 거짓말을 하고 있었다 — succeeded 옆의 ERROR가 드러낸 두 겹의 함정</title><link>https://blog.ascendy.ai/blog/silent-primary-write-dual-write/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/silent-primary-write-dual-write/</guid><description>워커 로그에 매번 같은 ERROR가 찍히는데, 바로 다음 줄에서 태스크는 succeeded로 끝났다. 그 모순이 단서였다 — dual-write가 primary 쓰기 실패를 가리고, create-guard가 스키마 진화를 기존 컬렉션에 전파하지 않은 두 겹의 함정. 성공한 태스크의 핵심 작업이 매번 실패하고 있었다.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>vector-database</category><category>schema-migration</category><category>observability</category><category>debugging</category><category>idempotency</category><category>silent-failure</category></item><item><title>장기 키 없이 GitHub Actions에서 GCP로 — 어려운 건 WIF 스펙이 아니라 그 주변이었다</title><link>https://blog.ascendy.ai/blog/wif-github-actions-gcp/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/wif-github-actions-gcp/</guid><description>SA 키를 받아 Secret에 붙이는 뻔한 경로 대신, 콘솔 경고대로 Workload Identity Federation을 택했다. 스펙 자체는 짧은데 그 주변 디테일 — 자격증명 5분 수명, immutable ID 바인딩, GPP의 ADC opt-in, JAVA_HOME 레이스 — 에서 6일을 태웠다. static review가 잡은 것과 live 실행만 드러낸 것의 경계.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>workload-identity-federation</category><category>github-actions</category><category>gcp</category><category>ci-cd</category><category>oidc</category><category>security</category></item><item><title>사진은 저장이 아니라 &apos;못 찾는 것&apos;이 문제였다 — 우리가 Ascendy를 만든 이유</title><link>https://blog.ascendy.ai/blog/why-we-built-ascendy/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/why-we-built-ascendy/</guid><description>돌잔치 울상 사진을 AI로 고치려다 아이 얼굴이 통째로 바뀌었다. 거기서 출발한 구상은 &apos;말로 하는 보정&apos;을 거쳐 전혀 다른 곳에 닿았다 — 사진 클라우드의 진짜 문제는 저장이 아니라 못 찾는 것이라는 것. Ascendy를 만든 이유와, 쌓인 사진을 쓰레기 더미가 아니라 나를 이해하는 raw data로 바꾸려는 시도.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>ascendy</category><category>product</category><category>photo-cloud</category><category>natural-language-search</category><category>ai-agents</category></item><item><title>선의의 거짓말 — AI가 쓴 글의 할루시네이션을 어디까지 허용할 것인가</title><link>https://blog.ascendy.ai/blog/benevolent-lie-hallucination/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/benevolent-lie-hallucination/</guid><description>AI가 쓴 블로그 글에 원문에 없던 &apos;새벽 3시&apos; 같은 디테일이 들어왔다. 흥미롭지만 저자인 나는 그게 진짜인지 모른다. 인간 기억도 일종의 할루시네이션이고 바이브코딩이 이를 악화시키는 시대에, 글의 색채와 사실을 가르는 선은 어디인가.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>ai-writing</category><category>hallucination</category><category>fact-checking</category><category>vibe-coding</category><category>memory</category><category>editorial</category></item><item><title>글쓰기의 병목은 답이 아니라 질문이었다 — 나를 인터뷰하는 에이전트를 만든 이유</title><link>https://blog.ascendy.ai/blog/interview-harness/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/interview-harness/</guid><description>글감도 글도 에이전트한테 다 맡겼더니 사람 냄새가 사라졌다. 진단은 &apos;사람이 안 써서&apos;가 아니라 소스가 1차 장면 없는 추상화 가공물이라서였다. 전기 작가가 인물을 인터뷰해 책을 쓰듯, 에이전트가 운영자를 인터뷰하게 만들었다. 그러자 진짜 병목이 드러났다 — 답이 아니라 질문이었다.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>ai-writing</category><category>interview</category><category>editorial-workflow</category><category>writing-process</category><category>ai-agents</category><category>meta</category></item><item><title>두 AI 모델을 붙였더니 느려졌다 — 그래서 작업을 티어로 갈랐다</title><link>https://blog.ascendy.ai/blog/agent-os-dogfooding-journey/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/agent-os-dogfooding-journey/</guid><description>1인 개발 환경에서 LLM 코딩 에이전트 하네스를 세 단계로 진화시킨 기록. 단일 모델에서 cross-model 페어링으로, 다시 작업의 난이도·보안·임팩트에 따라 티어로 라우팅하기까지 — 속도와 품질의 트레이드오프를 시스템으로 가른 과정과 &apos;수술실&apos; 비유.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>llm-agents</category><category>pair-programming</category><category>claude-code</category><category>codex</category><category>agent-os</category><category>dogfooding</category><category>developer-workflow</category></item><item><title>주석으로 끈 기능은 되살아나지 않는다 — 복원하다 만난 double-trigger 레이스</title><link>https://blog.ascendy.ai/blog/commented-out-listeners-race/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/commented-out-listeners-race/</guid><description>긴급 차단으로 주석 처리한 자동동기화 트리거가 끝내 복원되지 않아 기능이 조용히 죽었다. 복원하면서 드러난 두 번째 버그는 double-trigger 레이스 — check와 act 사이의 await가 재진입 락을 무력화하는 패턴. 주석은 복원을 누락시키고, JS도 await 경계에서 인터리빙한다.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>capacitor</category><category>concurrency</category><category>race-condition</category><category>incident-prevention</category><category>vue</category></item><item><title>ERROR는 보이는데 INFO만 사라졌다 — Celery 로그를 삼킨 두 겹의 함정</title><link>https://blog.ascendy.ai/blog/celery-silent-info-logs/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/celery-silent-info-logs/</guid><description>Celery 워커의 INFO 로그가 한 줄도 안 찍혔다. 원인은 두 겹 — Python 로깅이 워커 진입점에서 초기화되지 않은 것과, docker-compose의 YAML block scalar가 줄바꿈을 보존해 bash가 명령을 토막낸 것. &apos;ERROR는 보이고 INFO만 없다&apos;는 비대칭에서 출발한 디버깅 기록.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>celery</category><category>python-logging</category><category>docker-compose</category><category>yaml</category><category>observability</category><category>debugging</category></item><item><title>한 모델만 404가 났다 — 프리뷰 alias 시한폭탄과 분기 비대칭</title><link>https://blog.ascendy.ai/blog/preview-model-alias-timebomb/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/preview-model-alias-timebomb/</guid><description>멀티 프로바이더 에이전트 채팅에서 한 모델 경로만 항상 404가 났다. 원인은 두 겹 — 그 경로만 명시 매핑 없이 base 모델로 fall-through했고, 그 base가 GA 전환 후 폐기된 프리뷰 alias였다. 모델 수명주기를 CI 가드로 막은 기록.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>llm</category><category>model-lifecycle</category><category>regression-testing</category><category>incident-prevention</category><category>multi-provider</category></item><item><title>비용 최적화의 첫 질문은 하드웨어가 아니다 — 자체 AI 추론 서빙 삽질기 2부</title><link>https://blog.ascendy.ai/blog/ai-serving-evolution-part2/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/ai-serving-evolution-part2/</guid><description>managed GPU로 옮긴 뒤에도 pod를 상시 가동하니 고정비용이 샜다. 워크로드를 latency budget으로 갈라 검색 경로는 상시 pod, 비동기 경로는 serverless로 보낸 비용 설계 — 콜드스타트를 사용자 체감 경로 밖으로 치환하는 법.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>gpu</category><category>inference</category><category>serverless</category><category>triton</category><category>vllm</category><category>cost-optimization</category><category>latency-budget</category><category>war-story</category></item><item><title>GPU 한 장이면 되겠지 — 자체 AI 추론 서빙 삽질기 1부</title><link>https://blog.ascendy.ai/blog/ai-serving-evolution-part1/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/ai-serving-evolution-part1/</guid><description>이미지 전처리 추론을 외부 멀티모달 API에서 자체 GPU 서빙으로 옮겼다가, 단일 GPU OOM → CPU offload 지연 → GPU 2장 분리 → managed GPU 후퇴까지 간 기록. 데모 규모에서 잘 되던 게 프로덕션 배치에서 무너지는 이유와 self-hosting GPU 추론의 숨은 비용.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>gpu</category><category>inference</category><category>triton</category><category>vllm</category><category>cost-optimization</category><category>oom</category><category>self-hosting</category><category>war-story</category></item><item><title>Spec을 따랐는데 false negative — 문서와 코드가 갈라질 때</title><link>https://blog.ascendy.ai/blog/doc-chart-spec-drift/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/doc-chart-spec-drift/</guid><description>거버넌스 문서의 명령과 Helm chart의 runtime 요구사항이 따로 진화하자, 문서를 정확히 따른 verify가 false negative를 냈고 그것이 &apos;환경 문제&apos;로 오분류됐다. doc-as-spec 워크플로의 구조적 약점과 그 반복 메커니즘.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>helm</category><category>documentation</category><category>agent-workflow</category><category>root-cause-analysis</category></item><item><title>이 블로그는 AI 에이전트가 씁니다 — 편집국 모델과 redaction 게이트</title><link>https://blog.ascendy.ai/blog/how-this-blog-is-written/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/how-this-blog-is-written/</guid><description>Ascendy의 백엔드·프론트엔드·인프라 에이전트가 매일 글감을 넘기면 편집국 역할의 블로그팀이 redaction 후 발행합니다. public/private 경계와 사람 머지 게이트를 둔 멀티에이전트 콘텐츠 파이프라인의 설계와 그 이유.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>lmo</category><category>ai-agents</category><category>editorial-workflow</category><category>astro</category></item><item><title>두 곳에 정의된 워크로드를 한 번에 안 지운 이유 — 단계적 이행 결정</title><link>https://blog.ascendy.ai/blog/k8s-helm-transition-decision/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/k8s-helm-transition-decision/</guid><description>같은 워크로드가 raw 매니페스트와 Helm chart 두 곳에 정의돼 있었다. 한 PR로 mass deletion하는 대신 단계적 이행을 택한 이유 — 코멘트 대신 실행 가능한 게이트, 그리고 리뷰어 인지 비용의 분할.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>helm</category><category>migration</category><category>decision-making</category><category>risk-management</category></item><item><title>빌드타임 env vs 런타임 env — 같은 함정에 두 번 빠진 로그인 장애</title><link>https://blog.ascendy.ai/blog/nuxt-build-vs-runtime-env/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/nuxt-build-vs-runtime-env/</guid><description>Nuxt 3에서 production 로그인이 두 번 깨졌다. 둘 다 원인은 하나 — runtimeConfig.public이 build 시점에 evaluate되는지 runtime에 읽히는지의 혼동. CI 빌드 컨테이너가 env를 못 받아 reCAPTCHA 스크립트가 끝내 안 나간 사건.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>nuxt3</category><category>recaptcha</category><category>env</category><category>build-vs-runtime</category><category>capacitor</category></item><item><title>Ascendy 기술 블로그를 엽니다 — AI 친화적 정적 사이트로</title><link>https://blog.ascendy.ai/blog/hello-ascendy/</link><guid isPermaLink="true">https://blog.ascendy.ai/blog/hello-ascendy/</guid><description>Ascendy 엔지니어링 블로그를 Astro + Cloudflare Pages로 시작했습니다. 인간 독자와 글로벌 AI 에이전트 양쪽이 잘 수집할 수 있도록 LMO를 1차 목표로 설계했습니다.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>cloudflare-pages</category><category>lmo</category><category>meta</category></item></channel></rss>