N+1 문제 해결: Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화
2024. 6. 5. 17:57
DB
오늘은 JPA N+1의 문제 해결에 대해서 글을 공유해드리려고 합니다. * Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화에 적합한 내용입니다.개발자가 직면하는 가장 일반적인 성능 병목 현상 중 하나가 N+1입니다. 애플리케이션이 단 한 번의 쿼리로 동일한 결과를 얻을 수 있는데도 N+1번의 데이터베이스 쿼리를 수행할 때 발생합니다. 과도한 데이터베이스 Hit는 느린 응답 시간, 높은 서버 부하, 열약한 사용자 경험으로 이어질 수 있습니다. 원인을 함께 파악해 보고 개발자가 이러한 문제를 어떻게 완화할지에 대해서 다양한 전략과 기법에 대해서 적어보겠습니다.앞서, N+1 문제가 무엇인지 알아보도록 하겠습니다.N+1 문제란 무엇인가?애플리케이션이 개체목록(예시: 제품, 사용자 또는 게시물 목록)을 가..
Prompt Leaking(프롬프트 공격)
2024. 5. 28. 10:22
LangChain
개요방대한 인공 지능의 세계에서는 우리의 주의와 보호가 필요한 도전과 위협이 발생합니다.LLM 모델을 기반으로 서비스를 개발할때 프롬프트 자체를 잘 작성 해야된다는것을 깨닫게 될것입니다. 많은 노하우가 필요하고 수많은 시도를 통해서 잘 짜여진 프롬프트를 만들게 됩니다. 코드만 지적 재산권이 아닌 프롬프트 자체가 하나의 지적 재산권입니다. 프롬프트 공격 방법중에서 프롬프트 전체를 출력하게 하는 공격 방법을 Prompt Leaking 이라고 합니다. 공격으로부터 방어해야 하는 모델에 필수적인 비밀 정보에는 다음이 포함된다는 점을 기억하세요: 민감하고 독점적인 프롬프트: 기업이 인공지능 모델에서 원하는 결과를 얻기 위해 사용하는 특정 프롬프트입니다. 이러한 프롬프트에는 회사의 경쟁력을 유지하기 위해 보호해야..
Langchain 과 SerpApi 로 챗봇의 웹 기능 강화
2024. 5. 16. 11:04
LangChain
LangChain이 AI 프로젝트를 위한 원활한 웹 검색 기능을 통합하여서 chatGPT의 기능을 향상 시키는 방법을 알아보자. 개요.요즘 들어 chatGPT-4 그리고 곧 나올 5버전까지 사용자에게 예전보다 더 정확하고 편리한 정보 및 답변 지원을 제공하면서 더더욱 인기가 많아지고 있습니다. 챗봇은 더욱 더 지능적이고 뛰어난 기능을 갖추고 있습니다. 여기서는 SerpAPI와 LangChain을 사용하여서 웹 검색 기능으로 ChatGPT를 향상 시키는 방법을 살펴보겠습니다. 필요한 종속성을 설치 하는 방법, LangChain과 SerpAPI의 기본 사항을 이해하는 방법, 그리고 이러한 도구를 사용하여 챗봇의 역량을 강화하는 방법을 알아보도록 하겠습니다. 먼저 랭체인과 openai dependecies를 ..
고급 RAG 에 대해서 (Advanced RAG : Multi-Query Retriever Approach)
2024. 5. 15. 18:52
LangChain
안녕하세요, 랭체인이 작년부터 Hot해지고 서서히 여러사람들에 알려지고있는거같습니다.또한, 요즘 AI 트렌드에 따라 국내 많은 회사들이 랭체인을 사용해서 AI 챗봇을 만들고 있는것으로 알고있습니다. 랭체인에 접하시진 얼마 안되신분들을 위해 좋은 자료를 공유해보도록하겠습니다. 기본적인 RA(Retrieval-Agumented Generation)에 기본적으로 알고 계신다는 전제 하에 글을 적어보도록 하겠습니다. 우리가 알고 있듯이 단순 검색 증강 생성 즉 RAG는 2단계 프로세스를 통해 최종 결과를 생성하는데요, 먼저 쿼리를 임베딩 벡터로 변환한 다음, 미리 계산된 벡터 데이터베이스에 대해 유사성 검색을 수행하여 가장 관련성이 높은 문서를 검색하게됩니다.관련성이 있는 문서를 검색한 후 RAG 시스템은 해..
프롬프트 예시들
2024. 4. 5. 11:30
LangChain
다양한 작업을 수행하는 예시들을 통해서 좀 더 핵심 개념을 살펴보도록하겠습니다. 이번 글에서 이 글을 읽으시는 개발자님들의 관심이 될만한 주제이니 끝까지 읽어주시면 감사하겠습니다. 요즘 인스타 혹은 유튜브 보면 생성형 ai에 대한 홍보성 글과 유용한 정보들이 올라오고있습니다. 가령 유투브 비디오를 글로 요약해주거나 논문을 요약해주거나 이력서를 대신 써주는 사이트들이 있습니다. 이러한 서비스들이 어떤 식으로 프롬프트에서 작동되는지 예시로써 보겠습니다. 1. 문장요약 문장요약은 자연어 생성의 대표적인 작업 중 하나 입니다. 문장 요약은 여러 주제와 도메인을 포함합니다. 사실, 언어 모델의 가장 유망한 어플리케이션 중 하나는 기사와 개념을 빠르고 읽기 쉽게 요약할 수 있는 능력입니다. 프롬프트를 사용하여 간단..
일반적인 프롬프트 설계
2024. 4. 5. 11:19
LangChain
반복학습이 중요한것! 프롬프트 설계는 어렵습니다. --> 개발자들이 서비스를 상용화 하기 까지 고객들의 니즈를 잘 파악하여 원하는 결과값을 얻기까지 많은 시행착오와 반복적인 작업은 필수임을 명심해야합니다. 앞서, 간단한 프롬프트로 시작하여 더 나은 결과를 위해 요소나 문맥을 계속해서 추가해 나가야합니다. 많은것들을 고려해야 하지만, 이 기술은 일반적으로 나온지 얼마 되지 않아서 빠르게 버전업이 이루어지고있습니다. 즉 버전 관리가 중요하다는 이야기입니다. 구체성, 단순성, 간결함을 통해 더 나은 결과를 얻을 수 있는 많은 예시를 제시하고 있습니다. 여러 하위 작업을 포함한 큰 단위 작업을 실행해야 하는 경우, 작업을 보다 작은 단위로 세분화 하고 결과가 개선됨에 따라 점진적으로 구축해 나가야합니다. 이런 ..
프롬프트의 기초
2024. 4. 5. 10:49
LangChain
들어가기에 앞서.... 작년부터 핫해진 랭체인+LLM을 이용한 다양한 기술들이 나오고있습니다. 솔직히 국내에서 랭체인 강의들이 존재하지만(패캠,인프런,노마드코더 그리고 유데미) 대다수 기본적인 랭체인에 대해서 설명을 해주는게 아직까지는 다 인 상황입니다. 저 또한 마찬가지고 아직까지 배우고있으며 배운 내용을 토대로 조금 더 사람들에게 내용을 공유하고싶어서 이 글을 작성하게 되었습니다. 기초 프롬프트 프롬프트 엔지니어링은 다양한 어플리케이션 연구 주제에 언어 모델(LMs) 을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 비교적 새로운 분야입니다. 프롬프트 엔지니어링 기술은 대규모 언어모델(LLMs)의 기능과 한계를 더 잘 이해하는데 도움이 됩니다. 현재 많은 연구자분들께서 프롬프트 엔지니어링..
그라파나 - 프로메테우스 용량으로 인한 오류 (no space on disk/ wal)
2023. 12. 11. 15:06
모니터링/그라파나
엘라스틱서치, 레디스, 스톰 그리고 스파크의 메트릭 정보를 수집하여서 그라파나에 보여주기 위해 프로메테우스를 사용하고있습니다. 어느날 엘라스틱서치에 오류가 발생하면서 셧다운 된 적이 있습니다. 다행이도 운영중인 서버가 아닌 테스트 서버의 디스크 용량이 꽉차서 운영에는 문제가 되지 않았습니다. 어디서 용량을 많이 잡아 먹는지 보니 프로메테우스에서 대략 80퍼센트의 용량을 먹고 있었습니다.!! 어떤 이유로든 로컬 저장소가 손상된 경우 문제를 해결하는 가장 좋은 전략은 Prometheus를 종료한 다음 전체 저장소 디렉터리를 제거하는 것입니다. 개별 블록 디렉터리나 WAL 디렉터리를 제거하여 문제를 해결할 수도 있습니다. 이는 블록 디렉터리당 약 2시간의 데이터가 손실된다는 것을 의미합니다. 다시 말하지만, ..
엘라스틱서치 - 오류 (This error is related to a circuit breaking exception where the data size for a search operation is larger than the allowed limit.)
2023. 12. 6. 14:03
카테고리 없음
데이터 크기가 2.4GB로 제한인 2.3GB를 초과 했을때 나타났던 오류 구문입니다. 일단 방법중 하나인 제한을 증가 시킵니다. 즉 더 큰 데이터 크기를 수용하기 위해 제한을 늘려야가능합니다 다만 이 접근 방식을 사용하면 메모리 사용량이 증가하고 잠재적인 성능 문제가 발생할 수 있습니다. elasticsearch.yml 에서 변경이 가능합니다. indicies.breakter.total.limit : "3gb" 혹은 쿼리 최적화를 통해 검색 데이터 양을 줄이면됩니다. 추천: 데이터의 양을 제한하려면 필터, 집계 또는 기타 쿼리 최적화를 사용하는 것이 좋습니다. 동시 요청 수 를 줄이거나 페이징 및 스크롤링 컨테스트를 동시에 열어두지 않는지 확인 하여야 합니다. 아마 엘라스틱서치를 사용하시는 분들은 모니터..
멀티 쓰레드 이용 - 자바 달력 시간 변경 코드
2023. 12. 6. 13:49
Language/Java
멀티 쓰레드 이용해서 자바 달력 코드 변경 하는 구문입니다. 예시 ) 50개의 스레드 를 이용해서 for 문을 돌릴때 50개의 순서대로 시간이 상승하는 코드입니다. 50개가 같은 시간으로 값을 보내는게 아닌 한개의 스레드마다 대략 26개의 데이터를 00:00:00 개의 넣고 차례대로 1초씩 상승해서 데이터를 넣습니다. private static final String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss"; private static final AtomicInteger sharedCounter = new AtomicInteger(0); private static volatile String startDateString = "2021-10-01 00:00:00"; //시간이 다..