Pavo는 웹 개발의 정체성 속에서 개인적인 창의적 해법을 모색해왔습니다. 초기에는 Ruby on Rails 프로젝트에 도메인 주도 설계(DDD)를 적용하며 기술적 도전을 즐겼고, 이후 게임 개발에 몰두하여 Ruby on Rails 백엔드와 프론트엔드로 테트리스를 구현하고, 순수 Ruby on Rails로 실시간 멀티플레이어 Frogger 게임을 개발했습니다. 또한, 자신의 작업을 효율적으로 시연하기 위해 Active Record, Turbo, Stimulus, Tailwind 등을 활용한 Ruby on Rails 기반의 프레젠테이션 플랫폼을 직접 구축하기도 했습니다. 그러나 그는 이러한 노력들이 ‘혁명’이 아닌 ‘단순한 발전’에 불과했다고 평가하며, 진정한 혁신은 LLM의 등장과 함께 시작되었다고 역설합니다.
그는 Ruby on Rails 애플리케이션에 LLM을 통합하는 구체적인 방법을 시연합니다. 첫째, 음성 제어 기능입니다. JavaScript의 Media Recorder API를 통해 사용자의 음성을 녹음하고, 이를 Ruby on Rails 서버로 전송합니다. 서버에서는 Ruby OpenAI gem을 활용하여 OpenAI의 Whisper One 모델로 음성을 텍스트로 변환합니다. 변환된 텍스트는 LLM의 ‘함수 호출(Function Calling)’ 또는 ‘도구 호출(Tool Calling)’ 기능을 통해 특정 명령(예: ‘오른쪽으로 이동’)으로 해석됩니다. 이 과정에서 LLM은 사전에 정의된 도구의 기능과 매개변수를 이해하여 적절한 동작을 제안합니다. 해석된 명령은 Hotwire(Turbo Streams)를 통해 프론트엔드로 실시간 브로드캐스트되고, Stimulus JavaScript 컨트롤러가 이를 받아 실제 웹 페이지 상의 동작(예: 캐릭터 이동, 글자 크기 변경, 다크 모드 활성화)을 수행합니다. 특히, 음성으로 온라인 쇼핑 필터를 제어하는 시연(예: ‘아들이 숙제하고 게임할 랩톱을 찾는데, 1000달러 이하, 큰 화면 필요’)은 LLM이 사용자의 의도를 파악하여 복잡한 필터 설정을 자동화하는 혁신적인 사용자 경험을 보여줍니다.
둘째, 이미지 인식 기능입니다. JavaScript로 웹캠 이미지를 캡처하여 Base64 인코딩 후 LLM(GPT-4o mini)으로 전송합니다. LLM은 이미지의 내용을 분석하고, 사용자의 질의에 따라 가장 유사한 이미지를 찾아냅니다. 이 핵심에는 벡터 검색(Vector Search) 기술이 있습니다. 이미지, 텍스트, 사운드 등 모든 형태의 정보는 LLM을 통해 ‘임베딩(Embeddings)’이라는 다차원 숫자 배열(벡터)로 변환됩니다. 이러한 벡터들은 정보의 의미를 내포하며, 벡터 공간 내에서 서로 가까이 위치할수록 유사한 정보를 나타냅니다. 검색 쿼리 또한 벡터로 변환되어 기존 이미지 벡터들과의 유사도를 계산함으로써 가장 관련성 높은 이미지를 찾아냅니다. 이는 기존의 키워드 기반 검색을 넘어 의미 기반의 검색을 가능하게 하며, LLM을 활용한 이미지 내용 검증, 보안 카메라 영상 분석, 프로필 사진 규제 등의 다양한 활용 사례를 제시합니다.