개떡같이 말해도 찰떡같이 답변하는 RAG - 한글 문서는 왜 파싱부터 다른가
TL;DR: RAG 파이프라인에서 파싱은 문서를 깨끗한 텍스트로 바꾸는 첫 단계다. 영어는 공백으로 단어가 나뉘지만, 한글은 조사와 어미가 어근에 달라붙어 형태소 분석 없이는 제대로 된 토큰화가 불가능하다. 파싱을 대충 넘기면 한 문단 중간에서 청크가 잘려 맥락이 끊기고, 조사가 붙은 채로 임베딩되어 벡터 거리가 벌어지며, "배포"를 검색해도 "배포를"이 포함된 문서가 누락된다. 파싱, 대충 해도 되지 않을까RAG를 처음 만들 때, 대부분의 튜토리얼은 영어 PDF 몇 장을 LangChain에 넣는 것으로 시작한다. 코드 몇 줄이면 문서가 벡터로 변환되고, 질문을 던지면 답이 나온다. "생각보다 쉬운데?" 싶다.그런데 사내 위키를 넣으려고 하면 이야기가 달라진다. Confluence에서 가져온 문서에는 H..
byTech··
개떡같이 말해도 찰떡같이 답변하는 RAG - 텍스트 임베딩 이해하기
TL;DR: 임베딩은 텍스트에 의미 좌표를 부여하는 기술이다. 문서를 통째로 넣지 않고 청킹으로 잘라야 검색 품질이 올라가며, 차원은 높다고 무조건 좋은 것이 아니다. 768~1,024차원에서도 최신 모델은 충분히 강력하고, MRL로 차원을 유연하게 조절할 수 있다벡터 DB에 텍스트를 넣으려면사내 위키를 기반으로 RAG(Retrieval-Augmented Generation) 시스템을 처음 만들 때, 첫 번째 관문은 임베딩이었다. "텍스트를 벡터로 바꾼다"는 설명은 이해했지만, 실제로 어떤 모델을 써야 하는지, 문서를 어떻게 자르는지, 차원은 얼마로 설정해야 하는지 물음표가 줄줄이 이어졌다.RAG 파이프라인의 구조는 단순하다. 문서를 적당한 크기로 자르고(청킹), 각 청크를 벡터로 변환해(임베딩) 벡터 ..
byTech··
제네릭이 작동하지 않는다
해당 글에서 등장하는 코드는 Github에서 확인할 수 있습니다. playgroundddd/notifier at main · CODe5753/playgrounddddsample. Contribute to CODe5753/playgroundddd development by creating an account on GitHub.github.com프롤로그개발을 하다 보면 제네릭(Generic)과 다형성(Polymorphism)을 자연스럽게 조합해 사용하게 됩니다.특히, Spring 환경에서는 제네릭을 사용한 의존성 주입(DI)을 활용하여 다양한 객체를 동적으로 주입할 수 있는데요.하지만 여기에는 예상치 못한 제네릭과 런타임 타입 매칭의 충돌이 발생할 수 있습니다.이번 글에서는 실무에서 겪었던 일이며, "Not..
byTech··
기술 면접관이 QPS를 물었을 때, 머리가 하얘졌다면 꼭 읽어야 할 글
프롤로그어느 날 기술 면접에서 "캐시 도입 이후 데이터베이스의 QPS는 얼마나 나왔나요?"라는 질문이 나왔다고 가정해 볼게요.만약 이 순간, "TPS랑 비슷한 것 같은데.."라며 유추해보지만 QPS가 정확히 무엇을 의미하는지, 캐시와 QPS 그리고 TPS가 어떤 관계가 있는지 바로 떠오르지 않는다면 당황스러운 상황이 될 수 있습니다. QPS(Query Per Second)와 TPS(Transaction Per Second)는 단순한 숫자가 아닙니다.이들은 시스템의 상태를 진단하고, 성능을 개선하며, 안정성을 확보하는 데 필요한 중요한 지표에요. 대규모 트래픽을 다룰 일이 없는 환경이라도, 이 지표를 이해하면 더 나은 시스템 설계와 효율적인 문제 해결 방법을 찾을 수 있죠. 이 글에서는 QPS와 TPS의 ..
byTech··
리더가 MSA 전환을 하자고 했다. 그리고 처참히 실패했다.
서론이 글은 리더, 경영진, 그리고 실무 개발자들을 대상으로 합니다. MSA 전환을 고려하거나 이미 추진 중인 조직의 이해관계자들이, 전환 과정에서 발생할 수 있는 문제와 그 해결 방안을 이해하는 데 도움이 되기를 기대합니다. 마이크로서비스 아키텍처(MSA)는 현재 많은 조직에서 주니어 개발자 채용 공고에도 우대사항으로 언급될 만큼 널리 채택되고 있는 아키텍처 패턴입니다. 그러나 MSA 전환은 단순한 기술 도입 이상의 도전으로, 조직 내 모든 구성원의 협력과 상당한 노력이 필요합니다. 기술적인 변화를 성공적으로 이루기 위해서는 단순히 시스템 구조를 변경하는 것만으로는 충분하지 않습니다. 조직의 문화, 비즈니스 전략, 그리고 운영 모델 전반에 걸친 변화가 필요하며, 이러한 변화는 경영진의 확고한 의지와 실..
byTech··
2
String 함수 사용을 조심해야 하는 이유
서론 실무에서 코드리뷰를 하다가 String 함수 관련해서 개발자 의도와 다르게 작동할 수 있는 코드를 발견했습니다.이 부분에 대해 바로 피드백드리고 정정할 수 있도록 가이드를 제공해 드렸는데요.어떤 부분인지 어떻게 올바른 코드를 작성할 수 있는지 알아보겠습니다. Java 17, SpringBoot3를 기준으로 작성되었습니다. 배경현재 회사에서 수개월의 설계를 끝낸 후 아주 활발하게 개발이 이뤄지고 있습니다.저와 함께 협력하는 개발자는 같은 회사 동료도 있고 다른 회사에서 협력 중이신 분들도 계십니다. 현재 개발에 들어간 지 겨우 1개월 정도인데요. (3월에 시작)모든 동료분들이 Java/Spring에 익숙한 상황이 아니기에 각 파트별로 기술적 논의와 표준을 정의하는 담당자를 배정했고 제가 그 역할을 하..
byTech··
20
불러오는 중...