dev.to

The BMW manual was off-limits, so I built my friend something better

BMW 정비 매뉴얼을 쓸 수 없어 친구를 위한 대안을 만들었습니다

BMW E90 325i를 직접 정비하는 친구를 위해 모바일 정비 참고 사이트와 AI 질의 기능을 만들었습니다. 저작권이 있는 정비 매뉴얼 대신 출처와 검증 주의사항을 공개하고, 지식 베이스 전체를 모델에 제공해 검색 증강 생성(RAG) 없이 답변하도록 구성했습니다.

AI 요약

친구가 BMW E90 325i를 직접 고칠 때 막히는 지점은 공구보다 정보 검색이었습니다. 토크 값은 오래된 포럼 글에, 부품 번호는 다른 페이지에 흩어져 있고, 정비 영상은 작업을 시작하기까지 설명이 길었습니다. 그래서 저자는 모바일 우선 정비 참고 사이트인 BMW Repair Workshop을 만들었습니다. 정비 절차 20개와 참고 자료 7개를 제공하며, 토크 값과 부품 번호를 문단 속에 묻지 않고 표로 정리했습니다. 사용자가 증상을 평소 말투로 적으면 해당 자료만 바탕으로 답하는 Ask 기능도 넣었습니다.

저작권이 있는 자료 대신 출처를 공개했습니다

처음에는 Bentley 매뉴얼이나 BMW TIS 자료를 검색 증강 생성(RAG) 파이프라인에 넣을 계획이었습니다. 하지만 정비 문서는 판매되는 저작물이며, 인터넷에서 쉽게 찾을 수 있어도 자유롭게 써도 된다는 뜻은 아니라고 판단했습니다. PDF나 미러 사이트를 쓰지 않았고, 사실만 뽑아 쓰는 방식도 피했습니다.

사이트의 절차와 사양은 공개된 일반 자동차 지식으로 작성했습니다. 일부 수치는 차주 포럼과 판매업체의 설치 안내 등 공개 자료와 대조했습니다. 각 항목에는 출처를 표시했고, 모든 토크 값과 부품 번호에는 RealOEM이나 딜러를 통해 확인하라는 주의 문구를 달았습니다. 작성자는 정비사가 아니므로, 검증되지 않은 값을 확정된 사실처럼 보여주는 일이 오히려 위험하다고 설명합니다.

작은 자료에는 RAG가 필요하지 않았습니다

사이트는 GitHub Pages에 올린 정적 페이지입니다. 콘텐츠는 Markdown으로 관리하며, 외부 의존성 없는 Node 스크립트가 검색 색인과 절차별 HTML 페이지를 만듭니다. 검색은 브라우저에서 실행합니다. 질문은 Cloudflare Worker로 보내고, Worker가 DigitalOcean Serverless Inference에 요청합니다. 추론 API는 OpenAI 호환 형식이며, Gemma(gemma-4-31B-it)가 DigitalOcean 인프라에서 응답합니다. 모델 접근 키는 Worker에 보관합니다.

저자는 RAG를 만들려다 자료량을 먼저 확인했습니다. 지식 베이스 전체가 약 11,000토큰이라 한 번의 프롬프트에 들어갔습니다. 그래서 매 질문마다 절차와 참고 자료 27개를 모두 모델에 전달합니다. 임베딩, 벡터 저장소, 청크 분할, 검색 단계는 두지 않았습니다. 저자에 따르면 질문당 비용은 약 0.002달러이며, 전체 자료를 한꺼번에 넣으면 잘못된 청크를 가져와 확신에 찬 오답을 내는 검색 오류도 피할 수 있습니다.

시스템 프롬프트는 제공된 항목만 근거로 답하고, 토크 값·부품 번호·작업 단계를 만들어내지 말라고 지시합니다. 검증 주의사항과 스프링 압축기, 뜨거운 냉각 계통 같은 안전 경고를 답변에 남기며, 근거가 된 절차 이름도 밝히게 했습니다. 자동변속기 내부 재조립처럼 자료에 없는 질문에는 절차가 없다고 답하고 가까운 항목을 안내합니다. 저자는 이 거절 동작을 프로젝트에서 가장 중요한 행동으로 꼽습니다.

운영 비용과 보안 문제도 제한했습니다

모델은 오픈 웨이트 모델이며 설정 한 줄을 바꾸면 다른 모델로 교체하도록 구성했습니다. 프롬프트에 들어가는 자료와 Worker 코드를 공개 저장소에서 확인할 수 있어 모델이 어떤 근거를 받았는지 살펴보기 쉽습니다. DigitalOcean의 선불 추론 잔액은 자동 충전을 끄고 지출 상한으로 사용합니다. 요청이 폭주해도 비용이 제한되는 대신 Ask 기능이 멈추는 구조입니다.

개발 과정에서는 모델 ID를 잘못 적어 추론 API에서 404를 받았고, 응답 렌더러의 XSS 취약점도 발견해 수정했습니다. CORS가 API 예산을 보호할 거라는 생각도 틀렸습니다. CORS는 브라우저의 요청을 제어할 뿐 curl 요청을 막지 않으므로, 실제 통제 수단은 요청 제한과 선불 잔액 상한이라고 정리합니다.

친구의 피드백으로 기능을 바꿨습니다

저자는 친구에게 실제 정비 경험과 비교해 틀린 점이 있는지 확인해 달라고 했습니다. 친구가 아는 작업에서는 눈에 띄는 오류가 없었지만, 문서 전체를 대조한 검수는 아니라고 선을 그었습니다. 친구도 AI 답변을 유용하게 보면서 직접 확인해야 한다고 말했습니다.

저자는 더러운 손으로 휴대전화를 쓰기 불편할 것이라 생각해 음성 입력을 고려했지만, 친구는 긴 답변을 잊기 쉽고 장갑을 벗는 일이 문제되지 않는다며 텍스트를 선호했습니다. 음성 입력 계획은 빼고, 절차마다 차종과 엔진에 맞춘 영상 검색 링크를 추가했습니다. 배기 작업 절차도 넣었습니다. 변속기는 오일과 팬 정비까지만 안내하고, 내부 재조립은 전문 작업대가 필요한 일이라며 절차 작성을 거절했습니다.

사이트에는 아직 VIN 조회가 없어 같은 차체의 엔진별 사양을 좁히지 못하고, 다른 차종에서 시험하지도 않았습니다. 모든 기술 수치에는 정비사의 검토가 필요하다는 주의가 남아 있습니다. 저자는 자료 출처와 한계를 드러내고, 모르는 정비 작업은 안내하지 않는 태도를 프로젝트의 기준으로 제시합니다.

원문: dev.to / 번역·요약: Trawling