websocket

5 개의 포스트

Project Think: Cloudflare에서 차세대 AI 에이전트 구축하기 (새 탭에서 열림)

Cloudflare는 차세대 AI 에이전트 구축을 위한 새로운 프레임워크인 'Project Think'를 공개했습니다. 이 프로젝트는 단순한 도구 모음을 넘어 내구성 있는 실행(Durable execution), 하위 에이전트 관리, 샌드박스 코드 실행 등을 포함한 강력한 프리미티브(Primitives)를 제공하여 에이전트가 중단 없이 장시간 작업을 수행할 수 있도록 돕습니다. 이를 통해 기존 에이전트의 높은 유지 비용과 확장성 문제를 해결하고, 인프라 수준에서 스스로 사고하고 동작하는 에이전트 환경을 구축하는 것을 목표로 합니다. ### 기존 에이전트 모델의 한계와 확장성 문제 * **로컬 및 고비용 환경의 제약:** 현재의 코딩 에이전트들은 주로 개인 노트북이나 비싼 VPS에서 실행되어 기기 간 협업이나 상태 공유가 어렵고, 사용하지 않을 때도 고정적인 비용이 발생합니다. * **1대1 서비스 구조의 비효율성:** 일반적인 앱은 하나의 인스턴스가 다수의 사용자를 처리하지만, 에이전트는 사용자 한 명당 하나의 인스턴스가 할당되는 '개인 셰프'와 같은 구조를 가집니다. 이는 수천만 명의 사용자를 대응할 때 기존 컨테이너 기반 방식으로는 비용 감당이 불가능함을 의미합니다. * **관리의 복잡성:** 의존성 설치, 업데이트 관리, 비밀번호 및 아이디 설정 등 수동으로 관리해야 할 요소가 많아 대규모 배포에 걸림돌이 됩니다. ### Durable Objects 기반의 지속성 아키텍처 * **액터 모델(Actor Model) 채택:** Cloudflare의 Durable Objects를 기반으로 각 에이전트에 고유한 식별자와 자체 SQLite 데이터베이스를 부여합니다. * **비용 최적화:** 에이전트가 활동하지 않을 때는 휴면(Hibernation) 상태로 전환되어 컴퓨팅 비용이 발생하지 않으며, 이벤트(HTTP, 이메일, 알람 등)가 발생할 때만 즉시 깨어나 상태를 로드합니다. * **자동 확장성:** 별도의 용량 관리 없이 수만 개의 에이전트를 동시에 운영할 수 있으며, 각 에이전트는 독립적인 상태와 로직을 유지합니다. ### Project Think의 핵심 기술 프리미티브 * **Fibers를 이용한 내구성 있는 실행:** `runFiber()` 함수를 통해 실행 중인 작업을 SQLite에 등록하고, `stash()`로 체크포인트를 설정하여 시스템 충돌이나 재시작 후에도 중단된 지점부터 작업을 재개할 수 있습니다. * **샌드박스 및 동적 실행:** Dynamic Workers를 활용해 에이전트가 안전한 격리 환경 내에서 직접 코드를 작성하고 실행할 수 있도록 지원하며, 런타임에 필요한 npm 패키지를 직접 해결합니다. * **계층 구조의 에이전트:** 하위 에이전트(Sub-agents)를 생성하여 복잡한 작업을 분담할 수 있으며, 이들은 각자의 SQLite 데이터베이스와 타입화된 RPC를 통해 부모 에이전트와 통신합니다. * **지능형 세션 관리:** 트리 구조의 메시지 기록, 포킹(forking), 컴팩션 및 전문 검색 기능을 제공하여 에이전트가 과거의 맥락을 정확하게 파악하고 활용할 수 있게 합니다. 프로젝트 Think는 에이전트를 단순히 '실행되는 프로그램'이 아니라 '지속되는 인프라'로 격상시킵니다. 대규모 사용자에게 맞춤형 AI 비서를 저렴한 비용으로 제공하고자 하는 개발자라면, Cloudflare Agents SDK의 내구성 있는 실행 모델과 액터 기반 아키텍처를 도입하여 복구 가능하고 확장성 있는 에이전트 서비스를 설계해 보시기 바랍니다.

에이전트에 음성 추가하기 (새 탭에서 열림)

Cloudflare는 기존 Agents SDK에 실시간 음성 기능을 통합할 수 있는 실험적 라이브러리인 `@cloudflare/voice`를 공개했습니다. 이 도구를 사용하면 별도의 음성 전용 프레임워크로 옮길 필요 없이, 기존의 Durable Object 아키텍처와 WebSocket 연결 모델을 그대로 유지하면서 에이전트에 음성 인터페이스를 추가할 수 있습니다. 이를 통해 개발자는 텍스트와 음성 입력을 동일한 상태 공간에서 처리하고 SQLite를 통해 대화 이력을 영속적으로 관리하는 고도화된 음성 에이전트를 구축할 수 있게 됩니다. **@cloudflare/voice의 주요 구성 요소 및 기능** * **고차 에이전트 함수**: 전체 음성 대화를 지원하는 `withVoice(Agent)`와 음성을 텍스트로 변환하는 기능만 제공하는 `withVoiceInput(Agent)`을 통해 용도에 맞는 에이전트를 설계할 수 있습니다. * **React 및 클라이언트 지원**: React 앱에서 음성 상태와 전사 내용을 쉽게 관리할 수 있는 `useVoiceAgent`, `useVoiceInput` 훅과 프레임워크에 구애받지 않는 `VoiceClient`를 제공합니다. * **내장 Workers AI 제공자**: 외부 API 키 설정 없이도 즉시 시작할 수 있도록 Deepgram Flux 및 Nova 3(실시간 STT), Deepgram Aura(TTS) 등 Cloudflare Workers AI 기반의 엔진을 기본 지원합니다. * **개방형 인터페이스**: 특정 기술 스택에 종속되지 않도록 인터페이스를 작게 설계하여, 개발자가 필요에 따라 다양한 음성, 통신, 전송 계층 제공자를 선택하고 조합할 수 있습니다. **서버 및 클라이언트 구현 방식** * **서버 측 로직**: `Agent` 클래스를 `withVoice`로 감싸고, `onTurn()` 메서드 내에서 사용자 발화에 대한 응답 로직을 작성합니다. 이때 전사기(Transcriber)와 TTS 인스턴스를 설정에 추가하는 것만으로 음성 에이전트 서버가 완성됩니다. * **클라이언트 측 연결**: 단일 WebSocket을 통해 16kHz 모노 PCM 오디오 데이터를 스트리밍하며, 클라이언트 라이브러리는 통화 상태(status), 실시간 전사(transcript), 음소거(mute) 기능 등을 자동으로 관리합니다. * **통합 아키텍처**: 음성 기능이 추가되어도 동일한 Durable Object 인스턴스와 SQLite 기반의 대화 기록을 공유하므로, 기존 텍스트 기반 에이전트의 지식과 맥락을 그대로 활용할 수 있습니다. **실시간 음성 파이프라인의 작동 원리** * **지속적 전사 및 턴 감지**: 통화가 시작되면 에이전트는 지속적인 전사 세션을 생성하며, STT 모델이 사용자의 발화 종료 시점을 스스로 판단하여 안정적인 텍스트 결과(Turn)를 앱 로직에 전달합니다. * **문장 단위 스트리밍**: `onTurn()` 메서드가 텍스트 스트림을 반환하면, 파이프라인이 이를 문장 단위로 분할(Chunking)하여 각 문장이 준비되는 즉시 실시간으로 음성을 합성해 클라이언트로 전송합니다. * **데이터 영속성**: 모든 사용자 메시지와 에이전트의 응답은 SQLite 데이터베이스에 자동으로 기록되어, 네트워크 연결이 끊기거나 서버가 재배포되어도 끊김 없는 대화 경험을 보장합니다. 이 라이브러리는 음성 기능을 복잡한 별도의 서비스로 분리하지 않고 에이전트의 라이프사이클 내에 자연스럽게 통합했다는 점에서 매우 실용적입니다. 기존 Cloudflare Agents SDK를 사용 중인 개발자라면 추가적인 인프라 구축 없이 Workers AI의 성능을 활용해 지연 시간이 낮은 실시간 대화형 AI를 구축할 수 있으므로, 단순 텍스트 인터페이스를 넘어선 다중 모달(Multi-modal) 환경으로의 확장을 적극 고려해 보길 추천합니다.

GitLab 패치 릴리스: 18.10.3, 18.9.5, 18.8.9 | GitLab 문서 (새 탭에서 열림)

GitLab은 커뮤니티 에디션(CE) 및 엔터프라이즈 에디션(EE)의 보안 취약점과 버그를 해결하기 위해 최신 패치 버전인 18.10.3, 18.9.5, 18.8.9를 출시했습니다. 이번 업데이트에는 인증된 사용자가 서버 측 메서드를 임의로 호출할 수 있는 고위험군 취약점을 포함하여 서비스 거부(DoS), 정보 유출, 권한 오류 등 다수의 보안 수정 사항이 포함되어 있습니다. 시스템의 안전한 운영을 위해 자체 관리형(Self-managed) GitLab 인스턴스를 운영하는 모든 관리자는 즉시 최신 버전으로 업그레이드할 것을 권고합니다. ### 주요 보안 취약점 수정 및 고위험 이슈 * **웹소켓 연결을 통한 메서드 호출(CVE-2026-5173):** 부적절한 접근 제어로 인해 인증된 사용자가 의도하지 않은 서버 측 메서드를 호출할 수 있는 문제가 수정되었습니다. CVSS 점수 8.5의 고위험 취약점으로, GitLab 16.9.6 이후 모든 버전이 영향을 받습니다. * **Terraform 상태 잠금 API의 DoS(CVE-2026-1092):** JSON 페이로드의 입력값 검증 미흡으로 인해 인증되지 않은 사용자가 서비스 거부 공격을 유발할 수 있는 결함이 해결되었습니다. * **GraphQL 및 CSV 임포트 DoS:** 인증되지 않은 사용자가 반복적인 GraphQL 쿼리를 보내거나(CVE-2025-12664), 인증된 사용자가 구조가 잘못된 CSV 파일을 임포트하여 Sidekiq 워커를 중단시킬 수 있는(CVE-2026-1403) 취약점들이 수정되었습니다. ### 데이터 보호 및 권한 제어 개선 * **정보 유출 방지:** 특정 GraphQL 쿼리를 통해 타인의 이메일 주소가 노출되는 문제(CVE-2025-9484)와 CSV 내보내기 시 타인에게 할당된 기밀 이슈에 접근할 수 있는 권한 확인 미흡 문제를 해결했습니다. * **분석 대시보드 XSS(CVE-2026-4332):** 사용자 정의 가능한 분석 대시보드에서 입력값 정화(Sanitization)가 제대로 이루어지지 않아 타인의 브라우저에서 임의의 JavaScript를 실행할 수 있는 교차 사이트 스크립팅 취약점이 보완되었습니다. * **코드 품질 리포트 코드 주입(CVE-2026-1516):** 특수하게 제작된 리포트 콘텐츠를 통해 이를 열람하는 사용자의 IP 주소를 유출할 수 있는 보안 허점이 수정되었습니다. ### API 및 환경 설정 보안 강화 * **Environments API 권한 오류(CVE-2026-1752):** 개발자 권한을 가진 사용자가 API를 통해 보호된 환경 설정을 부적절하게 수정할 수 있는 권한 검증 로직을 강화했습니다. * **AI 탐지 API 및 SBOM API 안정성:** 취약점 플래그 AI 탐지 API의 권한 오류와 GraphQL SBOM API의 입력값 검증 미흡으로 인한 시스템 불안정 요소를 모두 제거했습니다. GitLab 설치 유형(Omnibus, Source code, Helm chart 등)에 관계없이 해당 버전을 사용하는 모든 환경이 영향 범위에 포함됩니다. GitLab.com은 이미 패치가 완료되었으나, 자체 서버를 운영 중인 고객은 보안 유지를 위해 지원되는 최신 패치 릴리스로 즉시 업그레이드해야 합니다. 각 취약점에 대한 상세한 이슈 내용은 보안 정책에 따라 릴리스 30일 후에 공개될 예정입니다.

도메인에 의존하지 않는 채팅 플랫폼은 어떻게 만들었을까? (새 탭에서 열림)

MessagingHub는 서비스마다 개별적으로 구축해야 했던 채팅 기능을 통합하여 플랫폼화함으로써 개발 비용을 절감하고 시스템 복잡도를 낮춘 메시징 플랫폼입니다. 특정 도메인에 의존하지 않는 독립성과 범용성을 바탕으로 챗봇, 상담 채팅, 1:1 대화 등 다양한 요구사항을 레고처럼 조합할 수 있는 구조로 설계되었습니다. 결과적으로 연동 서비스는 비즈니스 로직에만 집중하고, 채팅의 핵심 기능과 연결 관리는 플랫폼이 전담하여 효율적인 서비스 운영이 가능해졌습니다. ### 도메인 독립적인 인증 및 사용자 식별 * **연동 측 책임 중심의 인증:** MessagingHub는 직접 사용자를 관리하지 않고, 연동 시스템이 인증을 마친 후 요청한 연결 토큰(connection token)을 검증하여 웹소켓 연결을 허용합니다. * **유연한 사용자 식별:** 도메인 정보와 연동 측 식별자를 조합한 ‘client ID’를 사용해 여러 서비스의 사용자를 구분하며, 닉네임이나 프로필 같은 부가 정보는 연동 측에서 실시간으로 갱신하도록 설계되었습니다. * **서비스 컨텍스트 기반 제어:** '누가 누구와 대화하는지(Driver2CS 등)'를 정의하는 서비스 컨텍스트와 채팅방 유형(1:1, 그룹, 챗봇 등)의 조합을 통해 세밀한 접근 권한과 메시지 허용 정책을 관리합니다. ### 관심사 분리를 통한 모듈형 아키텍처 * **컴포넌트 기반 구조:** 연결 관리(connection-manager), 비즈니스 로직(chat-app), 메시지 중계(message-router), 알림(notification-app) 등 각 기능을 독립적인 컴포넌트로 분리하여 R&R을 명확히 했습니다. * **커맨드(Command) 패턴 활용:** 채팅의 모든 동작을 커맨드 단위로 정의하여 챗봇이나 상담 채팅 등 서비스 성격에 맞게 기능을 유연하게 조합하고 확장할 수 있습니다. * **이벤트 기반 연동:** 각 컴포넌트는 이벤트 기반으로 느슨하게 결합되어 있어, 특정 기능의 변경이 전체 시스템에 미치는 영향을 최소화했습니다. ### 효율적인 데이터 관리와 메시지 순서 보장 * **메시지 체이닝 및 상태 관리:** `prev_chat_log_id`를 사용하여 메시지 간 순서를 보장하며, 읽음 위치(`last_seen_chat_log_id`)와 전체 메시지 범위를 비교하여 정확한 안 읽은 메시지 수를 산출합니다. * **JSON 컬럼을 통한 확장성:** 연동 측에서 필요로 하는 도메인 특화 데이터(검색용 데이터, 사용자 상세 정보 등)를 MessagingHub가 해석하지 않고 JSON 형태로 그대로 보관 및 전달함으로써 범용성을 확보했습니다. * **보안 및 자동 삭제:** 모든 메시지는 암호화하여 저장되며, 참여자 이탈에 따른 즉시 삭제나 설정된 보관 기간에 따른 자동 삭제 정책을 지원합니다. ### 챗봇 시나리오의 안정적인 배포와 SOFT STOP 정책 * **계층적 시나리오 구조:** 관리자 도구를 통해 시나리오를 편집하고 배포할 수 있으며, 답변과 선택지 및 외부 연동을 위한 웹훅 기능을 지원합니다. * **SOFT STOP 상태 도입:** 새로운 시나리오 배포 시, 기존 대화 중인 사용자는 이전 버전을 유지하고 신규 사용자에게만 새 버전을 노출하는 'SOFT STOP' 단계를 두어 사용자 경험의 단절을 방지합니다. * **지능형 스케줄링:** 스케줄러가 이전 버전 시나리오의 잔여 연결 정보를 주기적으로 체크하여, 더 이상 사용하는 사용자가 없을 때 자동으로 해당 버전을 종료 처리합니다. ### 상담 효율을 높이는 문의형 채팅 최적화 * **상담 컨텍스트 제공:** 상담원이 사용자 정보를 별도로 조회할 필요가 없도록, 채팅방 생성 시 연동 측으로부터 전달받은 검색 데이터, 추적 데이터 등 풍부한 메타데이터를 상담 화면에 함께 제공합니다. * **생명 주기 관리:** 상담 대기(PENDING)부터 종료(DISABLE) 및 재진입 방지(BLOCK)까지 이어지는 상담 전용 상태 관리를 통해 상담 프로세스의 일관성을 유지합니다. MessagingHub와 같은 채팅 플랫폼 도입은 서비스 확장 속도가 빠르고 다양한 소통 창구가 필요한 환경에서 특히 유용합니다. 채팅 기능을 직접 구현하기보다는, 인증과 데이터 처리는 전문 플랫폼에 맡기고 도메인 특화 데이터(Metadata)를 적극 활용하는 방향으로 설계한다면 시스템의 유연성과 운영 효율을 동시에 확보할 수 있을 것입니다.

기획부터 개발까지 전부 직접 했습니다 – 우테코 7기 크루 서비스 론칭! | 우아한형제들 기술블로그 (새 탭에서 열림)

우아한테크코스 7기 크루들이 기획부터 디자인, 개발 및 운영까지 전 과정을 직접 수행하며 실제 사용자를 위한 서비스를 성공적으로 론칭했습니다. 이번 프로젝트는 단순한 기술 습득을 넘어 개발자가 왜 기획과 디자인에 참여해야 하는지, 그리고 사용자 피드백이 아키텍처와 도메인 설계에 어떤 영향을 미치는지 몸소 체험하는 과정이었습니다. 결과적으로 크루들은 2주 단위의 스프린트와 실시간 모니터링, 배포 환경 구축 등 실무에 근접한 경험을 통해 현장 중심의 문제 해결 역량을 갖춘 개발자로 성장했습니다. **개발자 중심의 기획과 협업 문화의 정착** - 우아한테크코스는 레벨 3, 4 과정을 통해 개발자가 직접 기획과 디자인을 포함한 서비스의 전주기를 책임지는 팀 프로젝트를 진행합니다. - 기술적인 구현뿐만 아니라 말하기, 글쓰기 교육을 병행하여 팀원 간의 의견 조율 및 설득 등 소프트 스킬의 중요성을 강조합니다. - 아키텍처 설계와 같은 기술적 결정이 팀의 목표와 사용자의 가치에 어떻게 부합해야 하는지 고민하며 개발자의 역할을 확장했습니다. **픽잇(Pickeat): 취향과 제약을 반영한 협업형 식사 선택 서비스** - "아무거나"라는 답변 뒤에 숨겨진 기피 음식과 다이어트 등의 제약 사항을 실시간 투표로 해결하여 최적의 식당을 추천합니다. - 위치 정보 기반의 식당 자동 조회 및 템플릿 기능을 도입하여 반복되는 회식이나 미팅 시 의사결정 속도를 높였습니다. - 데모데이와 홍보를 통해 받은 피드백을 바탕으로 UI와 백엔드 도메인 구조를 유연하게 재설계하며 사용자 중심의 반복적인 개선 과정을 거쳤습니다. **보따리(Bottari): 실시간 동기화 기반의 상황별 체크리스트** - 출근, 여행, 이사 등 다양한 상황에 맞춘 템플릿 기반 리스트 생성과 팀 단위의 실시간 협업 체크 기능을 제공합니다. - 단순한 기능 구현을 넘어 사용자가 물건을 잊지 않게 돕는 알림 타이밍과 체크 상태 동기화 등 사용자 경험(UX)의 세부 요소를 정밀하게 다듬었습니다. - '기술은 문제를 해결하는 도구'라는 철학 아래 사용자가 안심하고 기억을 맡길 수 있는 흐름을 구현하는 데 집중했습니다. **커피빵(Coffee Bread): 웹소켓 기반의 실시간 내기 미니게임** - 가위바위보보다 더 큰 재미와 긴장감을 주기 위해 실시간 미니게임과 가중치 적용 룰렛 시스템을 도입한 서비스입니다. - 웹소켓(WebSocket) 기술과 분산 환경이라는 기술적 난제를 극복하며 실시간 상호작용이 끊김 없이 이루어지도록 개발했습니다. - 게임의 공정성과 재미를 위해 룰렛 알고리즘을 수차례 수정하고, 실제 사용자들의 피드백을 반영해 밸런스를 최적화했습니다. 이 서비스들은 단순한 교육용 프로젝트를 넘어 실제 배포와 운영을 거치며 기술적 완성도를 높였습니다. 개발자가 기획 단계부터 깊이 관여할 때 사용자에게 더욱 가치 있는 프로덕트가 탄생한다는 점을 시사하며, 실무적인 문제 해결 역량을 키우고 싶은 주니어 개발자들에게 좋은 협업의 귀감이 됩니다.