경력·사례·글은 한국어 원문으로 제공됩니다.

← 대표 사례

메모 앱 · 온디바이스 요약

온디바이스 LLM 요약 기능 구현과 품질 평가

메모 앱에 기기 내 LLM 요약을 출시했다. 이후 Mac의 고정 입력 252회 평가로 출력·사실성 문제를 구분하고, 모델 다운로드 경로를 코드에서 수정·검증했다.

작업 2026.05–2026.09

맡은 일 · 기능 개발·출시 · 실기기 실행 · Mac 품질 평가 · 다운로드 수정과 회귀 검증

약 6분 소요2,501자

이전의 흐름

링크 미리보기와 기본 요약만 있던 메모 초안

바꾼 흐름

모델 선택·다운로드 → 기기 내 요약 → 실패 시 기존 요약 → 별도 평가와 다운로드 수정

#왜 휴대폰 안에서

메모 앱에 링크나 글을 공유하면 요약 초안을 만드는 기능을 넣고 싶었다. 서버 LLM을 사용하면 선택지는 넓어진다. 대신 사용자가 저장하려는 글을 외부 모델로 보내고 요청마다 추론 비용을 부담해야 한다. 그래서 기기 안에서 실행하는 방법을 먼저 시험했다.

여기서 기기 안이라는 말은 이 요약 입력의 추론 경로를 뜻한다. 모델 파일 다운로드나 링크 미리보기 수집, 앱의 다른 API까지 모두 오프라인이라는 뜻은 아니다.

#모델과 실행 도구를 연결하기

2026년 5월 초 앱 두 개에 개발자용 실험 화면을 만들었다. llama.rn은 React Native에서 llama.cpp를 사용할 수 있게 연결하는 실행 도구다. 모델 파일을 받아 불러오고 생성 결과를 화면에 보여줬다. 실행 도구가 문장의 지식을 갖고 있는 것은 아니고, 실제 출력은 함께 불러온 모델과 생성 설정에 달려 있다. llama.rn 공식 저장소에 연결 방식이 설명돼 있다.

Galaxy Note10에서 Gemma와 TinyLlama가 문장을 만드는지 확인했다. Gemma는 한국어로도 답했다. 모델마다 맞는 설정이 달라 목록에 생성 설정도 함께 뒀다. 이때의 기기 실행과 이후 Mac 평가의 모델 목록은 구분해야 한다.

5월 중순 릴리스 빌드에서 기능을 켰고, 5월 말에는 메모 정리에도 연결했다. 6월에는 긴 입력을 줄이는 변경을 OTA로 내보냈다. 직접 써보며 느린 응답을 확인한 뒤 한 변경이며, 전후 응답 시간을 수치로 비교하지는 않았다.

#모델을 받지 않아도 메모는 쓸 수 있게

모델 파일은 앱에 넣지 않고 사용자가 설정에서 골라 받게 했다. 2GB가 넘는 모델은 자동으로 받지 않도록 했다. 저장 공간과 다운로드를 사용자가 선택하게 하기 위해서였다.

모델이 없거나 생성에 실패하면 기존 링크 미리보기와 기본 요약으로 돌아간다. 이 경로에서는 서버 LLM으로 재전송하지 않았다. 요약을 더 잘하려고 추가한 기능이 원래 하던 메모 작성을 막지 않게 만들었다.

구성도·흐름도
도식을 불러오는 중입니다.
도식 보기
100%
화면 맞춤 기준 배율 · 확대 후 스크롤로 이동Esc 닫기

#입력을 얼마나 알고 있는가

글을 공유하면 본문을 입력으로 쓰지만, 링크를 공유하면 제목과 미리보기 설명만 사용했다. 링크 결과에 문장이 여러 개 나왔다고 본문을 전부 읽은 것은 아니다. 짧은 미리보기만 주고 자세한 요약을 요구하면, 모델이 빈 정보를 메울 여지가 생긴다.

길이도 글자 수만으로 정하기 어려웠다. 모델은 문장을 토큰 단위로 읽고 만든다. context는 입력과 생성 문장을 담을 공간이며, 입력 예산과 출력 길이를 함께 봐야 한다. 글자 수가 같은 한국어 문장이라도 모델에 따라 토큰 수가 달라질 수 있다. 입력을 줄이는 것, 출력이 끝까지 나오는 것, 내용이 입력에 근거하는 것은 각각 다른 확인이었다.

#9월의 252회 평가

출시 후에는 공개 글 21편을 고정하고, 모델 2개·본문/링크 작업 2개·seed 3개로 총 252회를 평가했다. 실행 환경은 Mac의 llama.cpp/llama-server였고, Qwen2.5 0.5B와 Gemma 4 E2B를 사용했다. 앱과 같은 모델 파일·프롬프트·파서·생성 설정을 맞췄다. 휴대폰 사용자 시험 252건이나 실기기 성능 측정은 아니다.

자동 검사는 출력 끊김, 구역 누락, 반복과 기존 요약 복귀 같은 형식을 봤다. 링크의 사실성은 별도로 살폈다. 최초 채점에는 Claude를 사용했고, 그 판정도 내가 검토해야 하는 결과였다. 문장 형식이 정상이어도 입력에 없는 내용이 들어갈 수 있었다. 과거의 한 평가에서 나온 실패 비율을 현재 제품의 정확도로 쓰지는 않는다.

#모델 파일도 배포의 일부였다

평가 중 다운로드 문제도 확인했다. 모델 주소가 최신 파일을 가리키고 있었는데, 배포처의 파일 변경 뒤 등록해 둔 크기와 실제 크기가 달라졌다. 새 기기는 크기 검사를 통과하지 못해 모델을 받을 수 없었다.

검사를 없애지 않고 다운로드 주소를 고정 리비전으로 바꿨다. 수정 코드와 회귀 검증까지는 확인했다. 다만 이 후속 수정이 OTA로 사용자에게 전달됐는지는 현재 근거로 확인하지 못했다. 5~6월 기능 출시와 9월 코드 수정은 다른 단계다.

기존 요약으로 돌아가는 처리는 메모 작성을 이어가게 했지만, 모델을 받지 못하는 문제까지 해결해 주지는 않았다. 다음 평가에서는 출력 형식과 사실성을 따로 보고, 다운로드한 파일과 실제 배포 버전도 함께 확인해야 한다. 더 작은 모델이 나와도 같은 입력으로 다시 비교해야 할 이유가 여기에 있다.

AI를 쓰며 일하는 방식을 고친 기록

작성 2026-09-15 · 수정 2026-10-06

서비스 기능과 개발 환경을 다룬 기록입니다. 구현과 실험, 확인한 범위는 본문에 적었습니다.