본문 바로가기

Kafka Windowing Windowing이란, 데이터를 집계할 때 시간이 지남에 따라 누적된 값을 그룹화할 때 사용하는 개념이다. 카프카에서 4가지 형태로 윈도우를 구분지을 수 있다. Size and Period Event-Triggered Hopping Session Tumbling Sliding Hopping 참고 https://www.confluent.io/blog/windowing-in-kafka-streams/
Babyagi: AI task Management System babyagi은 ai 기반의 태스크 관리 시스템이다. 이 시스템은 open ai, chroma, weaviate 같은 vector database을 사용하고 있다. 이 시스템은 스스로 태스크를 생성하고, 우선순위를 정하고, 실행한다. 시스템의 기본 아이디어는 이전의 태스크 결과와 미리 정의한 목표를 기반으로 태스크를 생성한다는 것이다. 그리고 OpenAI의 NLP를 사용하여 목표에 따라 새 태스크를 생성하고, vector database에 결과를 저장하고, 검색한다. Babyagi은 Task-driven Autonomous Agent의 축소버전이다. 처리 순서 agent은 다음 태스크를 무한 반복하며, 태스크를 대신 수행한다. 1. 태스크 목록에서 태스크를 가져온다. 2. Execution Agent으로..
<브라이언 커니핸> 유닉스의 탄생 이 책은 유닉스의 출시 과정 뿐만 아니라 초기 컴퓨터 과학 성장에 영향을 준 기술들에 대한 이야기가 담겨있다. C 언어, 구문/어휘 분석기, Shell, grep, 파이프, 수학표기법, 이미지 그래픽 표현 방법, 형상 관리 도구, 개발 관리 도구, 함수 라이브러리 등의 시초 등에 대한 내용이 포함되어 있다. 미국의 전화전신회사인 AT&T는 20세기 초에 미국의 전화사업을 독점하고 있었다. 이 회사는 전화기 발명가인 벨이 만든 회사이다. 그리고 이 회사에서는 "통신 기술의 발전을 이끈다"는 비전을 가진 연구소인 "벨 연구소"를 운영하고 있었다. 안정적인 자금 지원을 바탕으로 벨 연구소는 원하는 연구를 자유롭게 할 수 있었다. 이로서 AT&T는 장기적인 안목을 취할 수 있었다. 연구원들이 단기간에 결과를 내..
Low-code LLM: Visual Programming over LLMs LLM이란? LLM은 Large Language Model의 약어로, 대용량 언어모델을 말한다. LLM은 대규모 데이터셋에서 학습된 인공지능 모델로, 자연어 처리 분야에서 많이 사용된다. LLM은 단어, 문장, 문단, 문서 등의 자연어 데이터를 이해하고 생성할 수 있다. 이는 대용량 데이터셋을 이용해 학습된 모델이기 때문에, 다양한 자연어 처리 작업에서 높은 성능을 보이며, 최근에는 GPT-3 등의 모델이 대표적으로 알려져있다. Low Code이란? Low code이란, 최소한의 코딩 지식으로 애플리케이션을 만들 수 있도록 하는 프로그래밍 방법이다. Low code를 사용하면, 빌딩 블록 방식으로 빠르게 프로그램을 만들 수 있다. 스크래치 같은 UI 기반의 프로그래밍 툴을 떠올려보자. 기존 LLM의 한계..
ChatGPT으로 개발 디자인 문서 작성 속도 높이기: 빠르게 다이어그램 그리기 나는 ADR을 작성할 때, 다이어그램을 첨부하는 편이다. 그래야 재택근무를 하며 구두로 논의한 것들을 한눈에 파악하기 수월하다. 그런데 draw.io 같은 도구를 사용하면 반응이 느려 생산성이 떨어지기 때문에, 문서를 빠르게 작성하기 어렵다. 본 글에서는 간단한 개발 디자인 문서에 다이어그램을 빠르게 작성하는 방법을 설명하고자 한다. 1. 플레인 텍스트 언어로 다이어그램 그리기mermaid 혹은 plantUml 같은 플레인 텍스트 언어를 사용하면, 마치 마크다운 문법으로 다이어그램을 그리는 듯한 경험을 할 수 있다. (1) mermaid 맛보기mermaid를 사용하면, 다음과 같은 문법으로 다이어그램을 쉽게 그릴 수 있다. mermaid는 많은 에디터에서 지원하는 문법이고, 지원하는 다이어그램 유형이 다..
ChatGPT에게 IfNecessary, IfNeeded 함수명의 차이를 물어보다. 함수명의 접미사로 xxxIfNecessary, xxxIfNeeded를 사용하는 경우가 있다. 이는 특수한 조건에 해당하는 경우에만 함수를 실행하게 하는 경우 사용한다. 그러나 두 함수의 차이점이 무엇인지 궁금해져 chatgpt에게 물어보았다. 둘다 필요한 경우에 작업을 수행하도록 할 때 사용된다. 그러나 둘은 미묘한 차이가 있다. xxxIfNecessary 작업이 항상 실행되지는 않는다. 특정한 조건에 해당하는 경우에만 실행한다. // 필요한 경우에만 파일에 값을 쓰는 함수 writeToFileIfNecessary() // 필요한 경우에만 이메일을 발송하는 함수 sendEmailIfNecessary() xxxIfNeeded 작업이 항상 실행되는 경우에 사용한다. 항상 작업을 해야하지만, 프로그램 연산 비..
Kafka Streams In action: State store Event 이벤트에 문맥이 있어야 의미있는 정보를 제공해주는 경우가 있다. 예를 들어, 주식 거래 이벤트를 상상해보자. 주식의 가격과 매매 정보가 기록된 이벤트는 큰 의미없는 지표로 보일 수 있다. 그러나 이벤트가 특정 기간동안의 주식 거래량, 가격변동 등의 문맥을 지닌다면, 이는 주식을 거래할 때 좋은 인사이트를 제공할 수 있다. State 스트림 처리에서 이 문맥을 State (상태)라고 부른다. 언뜻보면 스트림은 관계 없는 개별 이벤트의 지속적인 흐름으로 볼 수 있다. 상태는 데이터베이스의 테이블 같은 정적 리소스처럼 볼 수 있다. State store kafka stream은 state store를 제공한다. kafka stream의 count(), aggregate() 같은 함수를 사용할 때 사..
BFF (Backend For Front. aka Aggregator) BFF는 왜 사용할까? 마이크로 서비스 아키텍처로 구현된 이커머스는 여러 도메인 앱으로 구성되어 있다. 도메인의 예로는 회원, 장바구니, 주문, 상품, 쿠폰 등이 있다. 그리고 각 MSA는 프론트엔드에서 사용할 수 있도록 API를 제공한다. 그런데 이 API는 화면에 노출되어야하는 데이터에 최적화되어있지 않은 경우가 많다. 불필요한 데이터를 내려주거나, 원하는 형식이 아닐 수 있다. 그래서 클라이언트(ex. 브라우저, 앱)에서는 원하는 형식으로 데이터를 재가공하는 절차가 필요하다. 이 경우, 데이터 가공 절차가 많아질수록 클라이언트의 리소스를 많이 사용하게 된다는 단점이 있다. BFF는 프론트엔드 화면을 위한 데이터 가공 로직을 담당하는 서버를 의미한다. Backend for Front의 약자이다. 클라..