카프카 리벨런싱 조건
·
Web
리벨런싱이란?카프카에는 파티션이라는 개념이 존재한다.프로듀서가 토픽으로 메시지를 발행하면 카프카 클러스터에 저장되고, 이후 컨슈머들이 해당 토픽의 메시지를 폴링하여 읽고 처리한다카프카는 로그처럼 메시지를 쌓는 구조를 가지며, 1 대 1 대응으로 처리가된다면 문제가 없겠지만, 1 대 N으로 접근한다면 어떻게될까?큐에 쌓인 메시지를 처리하다 실패했을때 처리가 불가능 할 것이다. 예를들어 1번 컨슈머가 처리하다 오류가나서 에러처리하고 종료됐을때, 다른 2번 컨슈머가 다른 메시지들을 처리하여 1번이 처리하던 메시지는 넘어가야하기 때문이다.그러므로 카프카에서는 병렬적으로 처리하기 위해서 하나의 토픽에 대해 파티션으로 나눠서 저장하는 방법을 사용한다. 1번 인스턴스 - 1번 파티션, 2번 인스턴스 - 2번 파티션이..
Rag를 사용해서 자신의 전문 비서를 만들어 보자 - Lang Chain
·
Web
직전 글인 "Rag를 사용해서 자신의 전문 비서를 만들어 보자"에서는 Lang Chain을 사용하지 않았다. Lang Chain은 LLM을 활용한 애플리케이션을 쉽게 만들 수 있도록 도와주는 프레임워크이다. 때문에 해당 프레임워크를 사용하면 더욱 깔끔한 코드로 이전에 작성한 코드를 개선할 수 있을 것이다.해당 페이지에서는 그저 이전 코드를 Lnag chain을 통해 바꾸면 어떤식으로 구현되는지만 파악하고 넘어가 볼 것이다. Lang Chain이란?다양한 외부 데이터(문서, DB, 웹, API 등)와 LLM을 연결하거나, 복잡한 파이프라인(Chain), 에이전트(Agent), 툴을 구축할 때 사용한다.주요 특징은 아래와 같다.Document Loader: PDF, txt, 웹, 데이터베이스 등 다양한 소스..
Rag를 사용해서 자신의 전문 비서를 만들어 보자
·
Web
요즘 나는 GPT를 사용해서 나에대한 정보를 요약 정리할 일이 많아졌는데, 요청을 하다보면 나에대한 정보를 잊어버리는 것 같다. 이를 해결하기 위해 Rag 기법을 사용해서 나에대한 정보 요청을 할때마다 나의 기반 정보를 첨부하여 보내도록 해보자.RAG란?대형 언어 모델(LLM)은 학습 시점 이후에 나온 정보나 조직 내부의 비공개 자료를 알지 못한다는 한계가 있다. RAG는 “검색(Retrieval) → 생성(Generation)” 두 단계를 결합해 이 문제를 해결한다. 질의가 들어오면 벡터 DB 등에서 관련 문서를 찾아 LLM 프롬프트에 주입하고, 모델은 이를 근거로 답변을 생성한다.벡터 DB란?벡터 DB는 “문서 조각(chunk)”을 임베딩 벡터로 변환해 저장하고, 질의 임베딩과 유사도가 높은 벡터를 ..
MSA에 꼭 필요한 Terraform 사용해보기
·
Web
테라폼(Terraform)이란?인프라를 코드로 관리하는 도구이다. 클라우드 인프라를 코드로 정의하고 자동으로 생성/변경/삭제할 수 있게 해준다.왜필요할까?기존에는 인프라를 직접 클릭하거나 명령어로 하나하나 설정했다. 이는 반복적이고 실수가 발생하기 쉽다. 테라폼은 이를 코드로 자동화 해준다. 코드로 관리하기 때문에 버전관리(git), 리뷰, 재사용, 일관성 유지가 가능하다. 내가 근무했던 직장에서는 MSA의 구조가 아니기 때문에 한개의 프로젝트에서 많아봐야 5개의 서버 구성이 필요했다. 때문에 이렇게 적은 수의 경우는 오버헤드만 늘어날 뿐 큰 이득을 보지 못할 수 있다. 하지만 MSA처럼 다수의 서버로 구성해야하는 경우 테라폼을 사용하면 서버를 붕어빵 찍어내듯 만들 수 있고 관리가 용이하니 많은 기업에서..
ElasticSearch 인덱스 갱신을 위한 Debezium 사용해보기
·
Web
ElasticSearch를 이용한 검색 기능 만들어보기에서 백엔드에서 RDB에 데이터를 저장후에 ES인덱싱까지 해주는 과정을 거쳤었다. 이는 RDB에 저장후 ES로직에서 에러가 발생할경우 정합성이 안맞을 수 있다. Debezium은 DB의 실제 변경사항을 토대로 Kafka메시지를 발행한다. 이를 통해 정합성을 어느정도 맞출 수 있다. 다음 과정을 통해 진행해보자. 적용과정먼저 필요한 환경은 아래와 같다.- mariadb- elasticsearch- zookeeper- kafka- debezium 해당 서버들은 docker를 통해 간단히 세팅해둘 수 있다. 아래 docker-compose.yml을 참고하자더보기version: "3.7"services: maria01: image: mariadb:la..
ElasticSearch를 이용한 검색 기능 만들어보기 - 1
·
Web
개발시작오늘의 목표는 ES를 활용하여 JobBoard 사이트를 개발하는것이다. 간단한 조회기능부터, SwaggerUI를 통한 create, update, delete기능까지 만들것이다. 먼저 간단한 사이트부터 만들어보자. 요즘 AI는 간단한 프론트 페이지 정도는 가볍게 구현해주니. AI를 활용해서 HTML, CSS, JS를 통해 페이지를 하나 만들었다. 먼저 데이터 모델을 설계하고 해당 모델을 토대로 더미를 넣어 어떤식으로 출력된는지 확인한다. 위의 사진 정도면 어느정도 몰입해서 할 수 있을 것 같다. 다음으로는 백엔드 개발을 진행해야한다. 백엔드 프로젝트의 구조는 아래와 같다..├── application│ └── service├── common│ └── config├── domain│ ├─..
ElasticSearch를 이용한 검색 기능 만들어보기 - 0
·
Web
원하는 기업에서 ElasticSearch와 Debezium 그리고 테라폼 경험을 요구하고있다. 테라폼은 ElasticSearch를 먼저 경험하고 난 뒤에 진행해보자. 먼저 간단한 설계를 해보자. 모두 구현할것은 아니지만, 만약 사용한다면 이러한 그림이 될 것 같다.1. 사용자는 클라이언트를 통해 검색 요청을 한다.2. 클라이언트는 API Gateway를 통해 Backend 서버로 요청 한다.3. 서버는 비즈니스 로직을 통해 검색어를 전처리한다.4. 서버는 ES를 통해 문서 검색을한다.5. 서버는 ES를 통해 받아온 문서 id를 통해 DB에 접근한다.6. DB에 조회 요청을 할때는 좋아요 수, 댓글 수 등 Es에 없는 추가 정보를 처리한다.7. 클라이언트로 데이터를 반환한다. 다음으로는 쓰기 또는 수정..
[book] 스프링으로 시작하는 리액티브 프로그래밍 - 0
·
Web
리액티브 프로그래밍이란?리액티브 시스템은 비동기 메시지 통신을 기반으로 한다. 비동기 메시지 통신은 Blocking I/O 방식이 아닌 Non-Blocking I/O 방식의 통신특징선언형 프로그래밍선언형 프로그래밍 방식은 실행할 동작을 구체적으로 명시하지 않고 이러이러한 동작을 하겠다는 목표만 선언한다.C언어나 Java는 명령형 프로그래밍 방식이다. 실행할 동작을 구체적으로 명시하는 프로그래밍 코드 형태.데이터 스트림데이터 스트림이란 데이터가 지속적으로 발생한다는 의미public class Examplel_1 { public static void main (String[] args) { List numbers = Arrays asList(1, 3, 21, 10, 8, 11); ..