30일. legalQ(한국 법령·판례 챗봇)가 표준 액세스 로그의 요청 메타데이터를 보관하는 주기다. 개인의 민감한 법률 질의가 서버에 영구히 남지 않도록 설계한 최소한의 안전장치다. 그런데 이 서비스가 겨냥하는 지점은 단순한 프라이버시 보호를 넘어 법률 정보 접근의 지형을 바꾸는 데 있다.

legalQ의 기술적 구성과 데이터

이번 프로젝트의 핵심은 RAG(외부 데이터를 검색해 답변의 정확도를 높이는 기술) 기반의 동작 방식이다. 사용자가 자연어로 질문을 던지면 이를 검색에 적합한 형태로 변환한다. 이후 legalize-kr(한국 법령 데이터를 정제해 제공하는 프로젝트) 데이터를 기반으로 관련 법령과 판례를 검색한다. 최종 답변에는 참고한 조문과 판례 정보를 함께 표시해 근거를 명확히 한다.

백엔드는 FastAPI(파이썬 기반의 빠른 웹 프레임워크)를 사용했다. 프론트엔드는 React(사용자 인터페이스 라이브러리)로 구축했다. LLM 호출은 OpenRouter(여러 LLM 모델을 통합 제공하는 API 서비스)를 통해 처리한다. 검색 엔진으로는 Seahorse Cloud(벡터 데이터를 저장하고 검색하는 데이터베이스)에 데이터를 색인해 활용한다.

구현 단계에서 도구 호출 부분은 MCP(모델과 외부 도구를 연결하는 표준 프로토콜)로 분리했다. 자연어 질문을 검색용 질의로 바꾸고 필요한 법령과 판례 정보를 가져오는 과정을 모듈화했다. 이를 통해 데이터 추출과 답변 생성의 효율을 높였다.

로그인 과정이 없다. 회원가입 없이 브라우저에서 즉시 접근하는 구조다. 대화 내용은 서버 DB에 저장하지 않는 stateless(서버가 클라이언트의 상태를 저장하지 않는 구조) 방식을 채택했다. 모든 대화 히스토리는 브라우저의 localStorage(웹 브라우저에 데이터를 저장하는 공간)에만 남는다. IP 주소는 rate limit(서버 과부하를 막기 위해 요청 횟수를 제한하는 기능)을 위한 in-memory bucket(데이터를 메모리에 임시 저장해 빠르게 처리하는 방식)에서만 일시적으로 사용한다.

키워드 검색과 범용 LLM의 간극

예전에는 법령을 찾으려면 정확한 키워드를 입력해 조문을 일일이 대조해야 했다. 키워드 검색은 정확도는 높지만 사용자가 자신의 상황을 자연어로 풀어 질문하기에는 불편함이 컸다. 법률 전문가가 아닌 일반인이 적절한 검색어를 찾는 것 자체가 진입장벽이었다.

범용 LLM을 쓸 때는 다른 문제가 발생했다. OpenAI나 Anthropic의 모델에 바로 물으면 답변은 매끄럽지만 조문 번호나 판례 인용이 틀리는 환각 현상이 잦았다. legalQ는 검색 인덱스에 기반해 답변을 생성함으로써 이 지점을 해결했다. 근거가 되는 조문과 판례 정보를 함께 제시해 사용자가 직접 검증할 수 있게 했다.

개발자가 구현한 MCP 레이어는 기존의 법망이나 Korean Law MCP(법률 데이터를 API 형태로 제공하는 도구)와 궤를 달리한다. 기존 도구들이 API나 개발자용 레이어에 집중했다면 legalQ는 일반 사용자가 즉시 쓸 수 있는 UI를 지향한다. 별도의 설치 과정 없이 브라우저 접속만으로 법률 정보에 접근하는 포석을 둔 셈이다.

사용자가 체감하는 변화는 정보 접근의 속도다. 다만 초기 버전의 한계로 별표 데이터(법령의 세부 예외나 부연 설명) 처리가 완벽하지 않다. 이 경우 답변만으로 끝내지 않고 관련 법령 링크를 함께 제공해 정확성을 보완했다. 여러 법령을 동시에 참고해야 하는 복잡한 질문에서는 tool call(LLM이 외부 도구를 호출하는 기능) 횟수가 늘어나 답변 속도가 느려지는 현상이 발생한다.

법률 지식의 독점적 구조가 검색의 자연어화로 인해 빠르게 해체되고 있다.