식당 추천 시스템 개발기 #7 - 로컬 캐싱 적용 (java/spring)
·
카테고리 없음
개요지금까지 개발한 추천 API의 흐름은 다음과 같습니다. 사용자의 자연어 요청이 API를 통해 들어옵니다. (공덕에서 여자친구와 1주년 기념일에 갈 만한 식당 추천해줘)OpenAI API를 사용해서 위치 정보를 추출하고 요청을 벡터로 변환합니다.2번에서 추출한 위치 정보를 기반으로 Kakao Map API를 호출하여 위도, 경도를 구합니다.Query를 통해 위도, 경도로 식당을 필터링하고 2번에서 변환한 벡터로 cosine 유사도 검색을 수행합니다.메타데이터가 포함되지 않은 PK 리스트를 받습니다.식당 서버의 메타데이터 API를 호출하여 메타 데이터를 받습니다.조합하여 최종적으로 사용자에게 응답을 내려줍니다.벡터 변환 과정은 조금 더 복잡하지만 해당 내용이 이번 포스팅의 핵심이 아니기 때문에 생략했습니..
식당 추천 시스템 개발기 #6 (트러블 슈팅) - Postgres Unique Constraint Batch Insert Dead Lock
·
카테고리 없음
개요식당 추천 시스템을 개발하면서 식당과 리뷰 데이터를 확보하기 위해 ETL 파이프라인을 구축했습니다.https://growth-coder.tistory.com/359 식당 추천 시스템 개발기 #4 - ETL 데이터 파이프라인 아키텍처개요"현재 자신의 상황에 맞는 식당 추천 시스템"을 개발하기 위해 지금까지 식당, 리뷰 크롤링 및 기본적인 벡터 기반 유사도 검색에 대해 알아보았습니다. 이번에는 작성한 크롤링 코드를 기growth-coder.tistory.com 아키텍처는 아래와 같습니다. 이 데이터 파이프라인에서 문제가 발생한 부분은 데이터 저장 부분입니다 하나의 식당에 대해서 여러 리뷰를 수집하고 해당 리뷰를 요약한 뒤 vector로 만들어 S3에 저장하면 lambda 함수에서 해당 데이터를 조회해서 ..
식당 추천 시스템 개발기 #5 - Transaction Outbox Pattern 적용
·
카테고리 없음
개요이전 포스팅에서 ETL 데이터 파이프라인을 구축했습니다. https://growth-coder.tistory.com/359 식당 추천 시스템 개발기 #4 - ETL 데이터 파이프라인 아키텍처개요"현재 자신의 상황에 맞는 식당 추천 시스템"을 개발하기 위해 지금까지 식당, 리뷰 크롤링 및 기본적인 벡터 기반 유사도 검색에 대해 알아보았습니다. 이번에는 작성한 크롤링 코드를 기growth-coder.tistory.com 이번에는 데이터베이스를 역할에 따라 분리하게 되면서 아키텍처에 약간의 변화가 생겼습니다. 우선 식당 유사도 검색을 위한 Vector DB와 식당 메타데이터 저장을 위한 식당 DB를 분리하게 되면서 해결해야 할 문제가 생겼습니다. 바로 데이터 정합성 문제입니다. 우선 저희 프로젝트에서 사용..
동시성 프로그래밍 모델 - 데이터 분해
·
공부/grokking concurrency
개요grokking concurrency 책을 읽고 정리한 내용입니다.https://product.kyobobook.co.kr/detail/S000214756541 그로킹 동시성 | 키릴 보브로프 - 교보문고그로킹 동시성 | grokking concurrency! 복잡한 수식과 전문 용어를 몰라도 괜찮다! 읽기만 해도 동시성을 이해할 수 있다!동시성은 프로그램을 독립적으로 실행하도록 분리해 동시에 처리하는 방식이product.kyobobook.co.kr 데이터 분해 동시성 프로그래밍 모델 중 데이터 분해는 서로 다른 여러 요소에 동일한 연산을 동시에 적용할 때 사용할 수 있습니다. 데이터 분해는 데이터를 chunk라는 여러 개의 단위로 나눈 다음 각 chunk에 대한 연산을 병렬로 실행한다. 이러한 데..
YJS 동시 편집 문서 데이터 영속화 아키텍처 개선 과정
·
카테고리 없음
개요이전에 진행했던 협업 문서 관리 프로젝트 Octodocs에서 문서 데이터를 영속화하기 위한 아키텍처에 대해 작성해보려고 합니다. 우선 Octodocs 프로젝트는 두 가지 핵심 기능을 제공합니다. 문서 간 관계 시각화 기능과 동시 편집 기능입니다. 핵심적인 부분은 사용자들이 동시에 협업 문서를 관리하고 문서를 편집할 수 있는 부분입니다. 이러한 동시 편집 알고리즘에는 대표적으로 OT 알고리즘과 CRDT 알고리즘이 존재합니다. YJS는 CRDT 알고리즘을 구현한 구현체이기 때문에 CRDT 알고리즘에 대해 알아봅시다. CRDT는 Conflict-free Replicated Data Type의 악여로 충돌 없는 복제된 데이터타입을 의미합니다. CRDT 알고리즘을 사용하면 어떠한 순서로 변경 요청이 들어와도..
Multi Programming, Multi Tasking, Multi Processing, Multi Core
·
카테고리 없음
개요현대 컴퓨터는 여러 가지 작업을 동시에 수행할 수 있습니다. 유튜브로 음악을 들으면서 코딩을 하고 동시에 카톡을 확인할 수도 있습니다. CS를 공부하다보면 이처럼 여러 프로그램을 동시에 실행하는 방법에 대해 배우게 되는데요. 하지만 비슷한 용어들이 여러 개 존재해서 이번 포스팅에는 헷갈리기 쉬운 개념 5가지에 대해 정리해보려고 합니다.Multi ProgrammingMulti TaskingMulti ProcessingMulti ThreadingMulti Core이번 포스팅에서는 조금 비슷한 개념들이 많은데 이름이 비슷해서 개념을 정리해보겠습니다. CPU: 기억, 연산, 제어를 수행하는 컴퓨터 장치프로세서(processor): 신호 전송, 사칙 연산, 논리 연산 등을 수행하는 전기 부품, 즉 하드웨어코어..