테스트 짜다가 코드를 고치기
지난 시간 지난 시간에 캐시 히트 테스트를 짜봤습니다. 통과했는데 아무것도 안 지키고 있었고, 이리저리 코드를 박살내고 나서야 무언가 잘못된걸 알았습니다. 이번에는 반대쪽인 캐시 미스를 볼 차례입니다. 근데 이거 짜다가 결국 QueryVectorService 코드를 고치게 됐습니다. 그 얘기까지 해보겠습니다. 캐시 미스 getVector의 el...
지난 시간 지난 시간에 캐시 히트 테스트를 짜봤습니다. 통과했는데 아무것도 안 지키고 있었고, 이리저리 코드를 박살내고 나서야 무언가 잘못된걸 알았습니다. 이번에는 반대쪽인 캐시 미스를 볼 차례입니다. 근데 이거 짜다가 결국 QueryVectorService 코드를 고치게 됐습니다. 그 얘기까지 해보겠습니다. 캐시 미스 getVector의 el...
지난 시간 지난 시간에 벡터를 재활용 하려고, DB에 캐시로 활용 할 수 있게 저장을 했죠. 원래라면 메모리 캐시를 얹을 차례이긴한데, 저번에 코사인 유사도 테스트를 짜봤는데 익숙하지가 않아서 테스트를 좀 연습해볼 겸 정리해볼까 합니다. 그래서 테스트를 왜함? 테스트를 왜 할까요? 어차피 그냥 서버 키고 localhost에서 할 수 있는데, 굳이...
지난 시간 저번 시간에 벡터를 재사용한다고 했었죠. 우리가 매번 “경제”를 검색할때 마다, API를 호출해서, 요청 보내고, 받고 하면 느리겠죠? 실제로 측정에서도 API 호출 시간이 제일 길었고요. 이유는 간단합니다. 일단 api를 호출안해도 되고, 또 호출 안하니깐 돈이 안들죠. 그러면 어떻게? 일단 2가지 방법을 고려해봤습니다. 첫번째는 램...
지난 시간 저번 시간에 pgvector로 바꿔봤죠. 그리고 계산을 해보니깐 생각보다 얼마 빨라지지 않았습니다. 그래서, 이번 시간에는 DB안에 데이터 개수를 늘려봤습니다. 데이터 늘리기 별거 없이 그냥 INSERT INTO news (title, content, summary, url, source, published_at, embedding)...
지난 시간 지난 시간에 캐시로 파싱을 없애서 28.5ms를 줄였습니다. 근데 데이터가 커지면? 벡터 하나가 대략 24KB니까 3만 건이면 700MB예요. 많이 크죠. 그리고 생각해보면, 유사도 계산을 자바가 하고 있으니까 벡터를 자바가 들고 있어야 했던 겁니다. 계산을 다른 데서 하면 안 들고 있어도 되겠죠? pgvector가 뭐냐면 Postg...
지난 시간에 지난 시간에 배치로 묶어서 적재 시간을 58.6초에서 3.5초로 줄였습니다. 근데 적재는 최초 1회잖아요. 한 번 넣고 나면 다시 할 일이 없습니다. 적어도 적재를 자주 한다면, 성능의 차이를 느낄 수 있겠네요. 그러면, 검색쪽을 한번 봅시다. public List<NewsSearchResult> search(String ...
지난 시간에 지난 시간에 코사인 유사도를 만들었으니, 이제 기사를 DB에 넣어야죠. 더미 데이터 300건을 임베딩으로 바꿔서 저장하는 코드를 짰습니다. for (NewsArticle article : articles) { News news = new News( article.title(), art...
임베딩 활용한 검색기 만드는 중 임베딩으로 검색하는 걸 만들어 보고 있습니다. 예를 들어 “코스피 하락”이라고 검색했는데, 그 단어가 없지만, 연관성이 깊은 단어를 찾아주는거요. 예를들어, “레버리지 규제”, “반도체 하락 마감” 이런것들이요. 이게 왜 필요하냐면, 그냥 검색은 글자가 똑같아야 찾아주거든요. “코스피 하락”로 검색하면 “사이드 카 ...
문제 링크 초기 접근 및 로직 구상 방식 N/2마리를 뽑는 모든 조합을 나열하고, 그중 종류가 겹치는 조합을 제외한 뒤 종류 수가 최대인 걸 고를려고 했는데, N=10,000이라 나열하기에는 너무나 많음. 아닌거 같다는 생각이 드는데, 막상 떠오르지 않아서 질문을 함. 힌트 1 nums = [1,2,3,4]. N=4니까 2마리 뽑아서 손으...
문제 링크 초기 접근 및 로직 구상 방식 문자열에 중복을 제거하고 담는 것이니, set을 생각함. 이 문제에서는 출력값이 순서대로이니 입력값을 순서대로 받는 LinkedHashSet을 사용하기로 함. 시도 1차 제출 성공. 1차 제출 코드 import java.util.*; class Solution { ...