분류 전체보기 (53) 썸네일형 리스트형 알고리즘 초간단 정리 최근 알고리즘 문제를 계속해서 풀고 있다. 어떤 자료구조와 알고리즘을 사용하면 되겠다 하는 정도까지는 얼추 보이는데 빌트인 자료구조를 주로 이용하다 보니 직접 구현해야 하는 상황은 버벅이게 된다. 간단하게 정의와 파이썬에서 이용하는 법을 키워드로 정리한다. 리스트배열. 기본적으로는 같은 타입의 데이터가 연속적으로 위치하는 선형 자료구조.인덱스를 통해 빠른 접근이 가능.파이썬에서는 다양한 타입의 데이터를 저장할 수 있으며, 동적으로 크기가 조절됨.구현은 주로 [] 또는 list() 함수 이용.연결리스트각 노드가 데이터와 다음 노드를 가리키는 포인터로 구성된 선형 자료구조.삽입 삭제가 효율적.다음 노드는 이전노드를 통해서 접근하기에 n번째 요소 조회는 O(n).구현은 주로 collections.deque 이.. Git merge 전략 커밋(commit)과 브랜치(branch)와 병합(merge)은 서로 깊은 연관이 있다. 개인적으로는 이 세가지는 한세트로 여겨도 될 것 같다. 하지만 이 포스트는 merge 전략이므로 커밋과 브랜치는 가볍게 필요한 만큼만 짚고 가겠다. 커밋은 의미 있는 변경 내역을 기록하는 것이다. 소스코드는 수없이 변하고 그 변경 내역을 누적해서 기록한다. 커밋 하나 하나가 점이라면 그 점이 긴 선을 이루는 것이다. 브랜치는 어느 시점의 커밋으로 부터 분기된 가지이다. 보통 맨 처음 생성된 가지를 master 또는 main 브랜치라고 한다. 새로 생성된 브랜치는 기존 커밋 흐름에서 분리되어 별도의 커밋 흐름을 생성한다. 이 서로 다른 두 브랜치를 다시 하나의 브랜치로 통합하는 것이 병합(merge)이다. 이때 고려해.. [FastAPI] PUT과 PATCH 처리 오랜만에 포스팅한다. 몇달만에 다시 하려니 어색할 뿐이다. 그래도 다시 시작해야지. RestAPI를 디자인 하다보면 고민하게 되는 부분이 있다. PUT과 PATCH를 언제 어떻게 사용해야 좋을까 하는 점이다. 원론적으로 따지면 리소스를 부분 수정 할 땐 PATCH를 사용하고 리소스 전체를 교체할 때는 PUT을 사용한다. 사실 PUT만 사용하는 경우도 많고 리소스 일부 수정도 PUT을 사용하는 경우도 많다. 당장 내가 다니는 회사에서도 업데이트는 거의 PUT만 사용하는 것 같다. 하지만 규약 관점에서 보자면 PUT과 PATCH는 서로 다른 용도이다. PUT은 '교체/대체(replace)'하는 메서드이다. 즉, 대상을 저장하기도 하고 변경하기도 한다. 자원이 없다면 생성하고 201(created) 응답을 .. OllamaFunctions에서 NotImplementedError 에러 대처기 Langchain + Ollama + Local LLM을 이용하여 프로젝트를 진행하고 있다. 최근 가장 헤맸던 일은 OllamaFunctions를 사용하는 일이었다. OllamaFunctions은 Ollama를 통해 LLM을 이용할 때 function calling을 이용할 수 있게 해주는 래퍼 클래스이다. langchain_experimenal에 속한 실험적인 기능이라 더 불안정하다. 일단 다른 사람들은 어떻게 사용하나 레퍼런스를 찾으면 다른 사람의 프로젝트는 문제없이 동작하고, 공식 가이드북도 별다른 문제가 보이지 않는다. 하지만 내 코드는 동작하지 않는다...... 나 뿐만 아니라 동작하지 않는다는 문의는 많고, 실제로 깃허브 이슈를 보면 유사한 이슈가 많이 보인다. 결론부터 말하면 현재(langc.. FastAPI에서 MongoDB 연결하기 FastAPI와 MongoDB몽고DB에는 Pymongo와 Motor 두가지 파이썬 드라이버가 있다.Fastapi는 이 두 드라이버중 Motor 하나만 사용할 수 있는데, FastAPI는 ASGI와 비동기를 기반으로 구축되었기 때문에 asyncio와 호환되는 Motor를 사용해야 한다. PyMongo는 동기식 애플리케이션에 사용된다.Motor 설치pip install motor[srv]srv 엑스트라는 MongoDB Atlas 연결 문자열과, 연결하는 데 필요한 몇 가지 추가 종속성이 포함되어 있다MongoDB 연결motor.motor_asyncio 패키지에서 AsyncIOMotorClient 모듈을 가져와야 한다.from fastapi import FastAPIfrom motor.motor_asyncio.. [ElasticSearch] Prev, Next 기능 만들기 개요 엘라스틱서치를 사용하는 중 특정 문서의 prev, next로 넘어가는 기능을 만들어야 했다. 내 경우 구분자가 +-1해서 생성한게 아니라서 단순히 다음 구분자를 예상하는 구현이 불가능하다. 더군다나 정렬 상태를 기준으로 prev, next가 바뀐다는 점이 허들을 높였다. 조회순으로 보고있다면 next 버튼을 눌렀을 때 조회순으로 정렬된 문서 기준으로 동작해야 한다는 것이다. 여기저기 찾으면서 알아보니 보통 search_after를 이용하는 것 같았고, 나도 이방법을 사용하기로 했다. 정렬 정보와 현재 문서를 서버가 받고, 그 정보를 기준으로 prev와 next를 찾는 방식이다. 구현 우선 기준이 되는 문서가 필요하다. 문서는 유저가 보고있는 문서이고, prev와 next의 기준이 된다. 생략할 부분.. Langchain으로 LLM에 RAG(검색증강생성)을 적용해 보기 참조 포스팅은 Langchain + Ollama + Chainlit을 이용하여 LLM 챗봇을 구성하는 것을 다루고 있다. 나도 한 번 따라서 만들어 봤는데, 구현과 에러 핸들링을 정리해 보았다. 자세한 건 포스팅 참고. 알아두면 좋은것 Langchain: 대규모 언어모델(LLM)을 이용한 애플리케이션을 개발하기 위한 프레임워크 Ollama: LLM을 실행, 생성 및 공유하는 오픈소스 프로젝트 RAG: LLM에 외부 지식소스를 제공하여 이를 바탕으로 답변을 생성하는 방법 Chainlit: 대화형 AI를 제공하기 위한 Python 패키지 필요한 pdf파일은 그냥 검색해서 나온 요리책 pdf를 이용했다. load_data_vdb.py from langchain.text_splitter import Recurs.. [MySQL] Client does not support authentication protocol requested by server 개요 NodeJS로 MySQL에 연결해서 데이터를 입력하려고 했다. MySQL는 이미 몇번이고 이용한 관계로 연결 과정에서 에러가 날 것이라고는 예상도 못했다. 에러 Client does not support authentication protocol requested by server; consider upgrading MySQL client 클라이언트가 서버에서 요청한 인증 프로토콜을 소화할 수 없다고 한다. MySQL을 업그레이드 하라는 권유는 덤이다. 원인 password plugin이 원인이다. caching_sha2_password을 소화하지 못해서 발생하는데, mysql_native_password로 plugin을 변경하면 된다. ALTER USER @ IDENTIFIED WITH mysql.. 2023년도 회고? 2023년을 간단하게 정리해보자. 반쯤 의식의 흐름이지만, 몇가지 키워드로 되돌아보는 것도 나쁘지 않을 것이다. 취직했다 어쨌건 저쨌건 이게 제일 빅뉴스다. 개발자로 취직했다는 것은 IT세계에 발을 들였다는 것이다. 취준생과 신입 개발자는 다르다. 또 신입 개발자와 주니어 개발자도 다를 것이다. 커리어를 시작했으니 방향을 제대로 잡고 나아가야지. 많은 사람이 커리어 관리를 중요하게 생각한다. 나도 마찬가지다. 커리어를 어떻게 쌓고, 또 어떤 커리어를 쌓아야 이로울까? 자바 배운다 Node.JS로 백엔드 개발을 시작했다. 그리고 더 고도화된 시스템을 위해 Nest.JS를 주력으로 삼았다. 하지만 아직 한국 시장의 대부분은 JAVA다. 그리고 좋은 레퍼런스도 JAVA로 작성된게 많다. Node.JS를 주로 .. [eslint - prettier] Delete `␍` 문제 해결하기 빠른 결론 결론부터 말하면 줄바꿈 옵션 때문에 발생한 문제다. 거기에 더해 prettier 버전 문제도 있다. .eslintrc.js 파일 rules에 {endOfLine: 'auto'} 를 설정하면 된다. 원인 LF, CR은 줄을 바꾸는 방식에 대한 설정값이다. LF: Line Feed(\n) - 현재 커서의 위치에서 커서의 위치변화 없이 한 줄 아래로 내리는 방식 CR: Carriage Return(\r) - 현재 줄에서 커서의 위치를 맨 앞으로 옮기는 방식 윈도우에서 엔터를 눌러 줄바꿈을 시도하면 CRLF(\r\n) 방식으로 적용되기 때문에 커서가 가장 앞으로 옮겨지고 아래로 한 칸 내려가게 된다. 하지만 prettier 2.0에서 endOfLine 기본 값이 LF로 지정되었기 때문에 그 이하버전을.. 이전 1 2 3 4 ··· 6 다음