Oh My OpenCode v4.2.0: 안정성의 기초를 다지다
안녕하세요, Tom입니다.
지난주에 Oh My OpenCode v4.0.0의 팀 모드를 소개했었는데요, 일주일 만에 v4.2.0 "The Reliability Foundation"이 나왔어요. 이름 그대로 안정성의 기초를 다지는 릴리스예요. 새로운 기능보다는 내부 아키텍처를 단단하게 만드는 데 집중했더라고요.
숫자만 봐도 규모가 느껴져요 — 357개 이상의 커밋, 560개 이상의 파일 변경, +23,000/-7,900 라인. 마이너 버전 패치라고 하기엔 메이저급 작업량이에요.
핵심 문제: 세션 API의 레이스 컨디션
이번 릴리스의 가장 중요한 변경은 session.prompt/promptAsync API의 레이스 컨디션 해결이에요.
기존 문제가 뭐였냐면, 이 API들이 fire-and-forget 방식이었어요. 프롬프트를 보내놓고 완료를 보장하지 않는 구조였던 거예요. 이게 왜 위험하냐면, 타이밍이 맞지 않으면 같은 모델 호출이 두 번 발생할 수 있어요. 단순히 에러가 나는 게 아니라 이중 과금(double billing)이 되는 거예요. 에이전트 도구에서 비용 관련 버그는 신뢰를 크게 흔드는 문제라서, 이걸 v4.2.0의 최우선으로 잡은 건 정확한 판단이라고 봐요.
Prompt-Async-Gate: 해결책의 설계
OmO 팀이 내놓은 해결책은 Prompt-Async-Gate라는 새로운 계층이에요. src/shared/prompt-async-gate.ts에 구현되어 있고, 설계가 꽤 체계적이더라고요.
핵심 메커니즘은 이래요:
- Reservation Map: 세션 ID를 키로 하는 예약 맵이에요. 하나의 세션에서 동시에 여러 프롬프트가 날아가는 걸 원천 차단해요
- 30초 디스패치 타임아웃:
Promise.race를 써서 30초 안에 디스패치되지 않으면 자동으로 해제돼요. 무한 대기를 방지하는 안전장치예요 - 250ms 포스트 디스패치 홀드: 디스패치 직후에 250ms 동안 다음 프롬프트를 잡아둬요. 네트워크 지연으로 인한 미세한 타이밍 충돌까지 막는 거예요
- TypeScript AST 감사: CI에서 게이트를 우회하는 코드가 있으면 빌드를 실패시켜요
마지막 AST 감사가 특히 인상적이에요. 런타임 보호만으로는 누군가 게이트를 안 거치고 직접 API를 호출하는 걸 막을 수 없거든요. 코드 레벨에서 강제하는 정적 분석까지 넣은 건 같은 실수가 반복되지 않게 하겠다는 의지가 보여요. 이런 접근이 "The Reliability Foundation"이라는 이름에 어울리는 것 같아요.
Messages-Transform 합성 턴 수정
또 하나 중요한 수정이 있어요. Messages-transform에서 합성 턴(synthetic turn)이 잘못 생성되던 문제인데, 이제 metadata.compaction_continue === true일 때만 합성 턴이 동작하도록 게이트를 걸었어요. 컨텍스트 압축 과정에서 의도치 않은 턴이 끼어들면 모델이 혼란스러워하거든요. 눈에 안 띄지만 대화 품질에 직접 영향을 주는 수정이에요.
이와 함께 모든 내부 호출자에 대한 Continuation hooks 감사도 진행했다고 해요. 하나의 버그를 고치면서 같은 패턴의 문제가 다른 곳에도 없는지 전수 조사한 거예요. 꼼꼼한 접근이라고 생각해요.
LSP에서 MCP로 전환
아키텍처 측면에서 가장 큰 변화는 네이티브 LSP 도구들이 이제 stdio MCP 서버로 제공된다는 점이에요.
LSP(Language Server Protocol)는 원래 에디터와 언어 서버 간 통신을 위한 프로토콜이에요. 에이전트 도구의 통신 규격으로 쓰기엔 최적이 아니었던 거죠. MCP(Model Context Protocol)는 에이전트 컨텍스트에 특화된 프로토콜이라서, 이 전환은 자연스러운 방향이에요.
실질적인 영향은 외부 도구 연동이 훨씬 쉬워진다는 거예요. MCP 생태계가 빠르게 성장하고 있어서, OmO의 도구들을 다른 MCP 클라이언트에서도 쓸 수 있게 되는 가능성이 열린 거예요.
워크스페이스 마이그레이션: .sisyphus/ -> .omo/
작아 보이지만 의미 있는 변경이에요. 프로젝트 워크스페이스 디렉토리가 .sisyphus/에서 .omo/로 바뀌었어요. OmO가 자체 아이덴티티를 확립해 가는 과정이라고 볼 수 있어요. 기존 사용자는 마이그레이션이 필요하니 참고하세요.
모델 컨텍스트 1M 해제
그리고 모델 컨텍스트 관련 반가운 소식이 있어요. Claude Opus 4.6/4.7과 Sonnet 4.6의 컨텍스트가 1M으로 해제됐어요. 이전에는 200K로 제한되어 있었거든요. 5배나 넓어진 거예요.
대규모 코드베이스를 다룰 때 200K 컨텍스트는 솔직히 답답했어요. 파일 몇 개만 읽어도 금방 차버리니까요. 1M이면 꽤 큰 프로젝트도 충분한 맥락을 유지하면서 작업할 수 있어요. 이 변경만으로도 업데이트 가치가 있다고 생각해요.
테스트와 커뮤니티
안정성 릴리스답게 테스트도 탄탄해요. 7,155개 테스트 전부 통과, 실패 제로. 357개 커밋을 넣으면서 테스트를 하나도 깨뜨리지 않았다는 건 코드 품질 관리가 잘 되고 있다는 뜻이에요.
커뮤니티 측면에서는 11명의 외부 컨트리뷰터가 28개의 PR을 머지했어요. v4.0.0 팀 모드 발표 이후 커뮤니티 참여가 늘어난 것 같아요. 오픈소스 프로젝트의 건강한 성장 신호예요.
총평
v4.0.0이 "이런 게 가능해요"를 보여주는 릴리스였다면, v4.2.0은 "그리고 이걸 안전하게 쓸 수 있어요"를 증명하는 릴리스예요.
개인적으로는 Prompt-Async-Gate의 설계 철학이 가장 마음에 들어요. 단순히 버그를 고치는 게 아니라, 같은 종류의 버그가 다시는 발생할 수 없도록 런타임 보호 + 정적 분석 + CI 강제를 삼중으로 걸어둔 거거든요. 이런 접근이 프로젝트의 성숙도를 보여준다고 생각해요.
에이전트 도구 시장이 기능 경쟁에만 집중하는 분위기에서, OmO가 "안정성 기초 공사"를 전면에 내세운 건 차별화된 방향이에요. 기능이 아무리 화려해도 이중 과금이 되면 아무 소용없으니까요. 기초가 탄탄해야 그 위에 뭘 올려도 흔들리지 않아요.
관련 글
Oh My OpenCode v4.0.0: 팀 모드로 멀티에이전트 협업 시대 개막
OmO가 드디어 메이저 업데이트를 했어요. v4.0.0의 핵심은 팀 모드 — 여러 에이전트가 동시에 병렬 작업하는 멀티에이전트 협업이 가능해졌어요.
OpenCode v1.4.0~1.4.3: 메이저 업데이트, OTLP 관측성부터 Fast Mode까지
OpenCode가 드디어 1.4.x 시대에 접어들었어요. SDK 브레이킹 체인지, HTTP 프록시 지원, PDF 드래그 앤 드롭, 그리고 Fast Mode 변형까지 한번에 정리해 볼게요.
OpenCode v1.3.15~1.3.17: Azure 지원, Cloudflare Workers AI 통합
OpenCode 세 버전 묶어서 정리해요. npm 설치 오류 수정부터 Azure 모델 지원, 마우스 캡처 비활성화, 그리고 Cloudflare Workers AI/AI Gateway 통합까지 담겨 있어요.