본 발표는 Visuality의 CTO인 Pavo가 경험 많은 개발자들이 직면할 수 있는 고민과 이를 극복하는 방법, 그리고 미래 기술인 대규모 언어 모델(LLM)을 Ruby on Rails 환경에서 창의적으로 활용하는 방안에 대해 다룹니다. Pavo는 자신의 개발 경력을 회고하며, 시대와 기술의 변화 속에서도 변치 않는 핵심 역량으로 '창의성'을 강조합니다. 특히, 나이가 들면서 새로운 기술을 따라가기 어렵거나 체력이 저하될 것이라는 개발자들의 우려에 대해, 경험과 효율성을 통해 이를 극복하고 오히려 더 빠르게 학습하며 현명하게 문제를 해결할 수 있음을 역설합니다. 궁극적으로 개발자로서의 지속적인 성장과 즐거움을 위해 창의성을 발휘하는 것이 중요함을 설파합니다.
개발자의 성장과 지속 가능성
Pavo는 30대 중반, AI 등장 이전에도 새로운 프레임워크와 젊은 개발자들의 등장 속에서 자신의 경쟁력에 대해 고민했음을 고백합니다. 그러나 그는 경험을 통해 언어와 프레임워크를 훨씬 빠르게 습득하고, 젊은 개발자들이 반복하는 ‘바퀴 재발명’과 같은 실수를 줄일 수 있음을 깨달았습니다. 또한, 육아로 인한 자유 시간 부족은 일시적인 단계이며, 체력 저하는 효율성으로 보완할 수 있다고 조언합니다. 그는 개발자들에게 자기 관리의 중요성을 강조하며, 헬스장 방문이나 취미 생활을 통해 행복을 유지할 것을 권합니다. 나아가, 팀 리드, 리드 개발자, 엔지니어링 매니저 등 경력 전환의 갈림길에서 ‘돌아올 길’을 고려한 신중한 계획의 필요성을 역설합니다. CTO가 되어서도 코딩과의 끈을 놓지 않는 것처럼, 미래를 계획하고 실행하며, 필요하다면 소셜 커넥션을 구축하여 새로운 분야로 전환하는 유연한 자세가 중요하다고 말합니다. 궁극적으로 ‘시니어리티’는 단순히 지식뿐 아니라 문제 해결을 위한 경험의 총체이며, 기술이 바뀌더라도 본질적인 경험은 유효하다고 강조합니다. 마지막으로, 개발자로서 지속 가능한 열정을 위해 단순히 돈을 버는 것을 넘어 자신을 움직이는 ‘원동력’을 찾는 것이 중요하다고 역설합니다.
Ruby on Rails와 LLM을 통한 창의성 발현
Pavo는 자신의 ‘원동력’이 바로 창의성을 유지하는 것이라고 밝히며, 과거의 창의적인 프로젝트들을 소개합니다. 5,000개의 벽지와 7개의 인테리어를 조합한 35,000개의 이미지를 ImageMagick으로 자동 생성한 전자상거래 프로젝트, Stimulus와 Ruby on Rails로 캐리어에 미니언 스티커를 부착하는 시뮬레이션을 구현하고 이를 이미지로 저장한 사례, 그리고 바코드 리더를 JavaScript로 연동하여 웹 기반 키오스크를 구축한 경험은 ‘불가능해 보이는’ 과제를 창의적으로 해결한 예시들입니다. 특히, Hotwire를 사용하여 백엔드와 프론트엔드, 게임 루프까지 모두 Rails로 구현한 실시간 Tetris 게임과, Keynote와 Ruby 애플리케이션 전환의 번거로움을 해결하기 위해 직접 Rails로 개발한 프레젠테이션 도구(현재 발표에 사용 중)는 Ruby on Rails의 강력한 풀스택 역량을 보여줍니다.
발표의 핵심은 LLM(대규모 언어 모델)을 Ruby on Rails에 통합하여 새로운 창의성을 발휘하는 방법에 있습니다. Pavo는 음성 제어 캐릭터 ‘Gem’을 통해 이를 시연합니다. 이 시스템은 다음과 같이 작동합니다:
1. 음성 녹음 및 전송: MediaRecorder API를 사용하여 음성을 녹음하고 Rails 서버로 전송합니다.
2. 음성-텍스트 변환: ruby-openai
gem을 사용하여 OpenAI의 Whisper 모델로 음성을 텍스트로 변환합니다.
3. 명령어 해석: 변환된 텍스트와 함께 ‘도구(Tools)’ 기능을 GPT-4o 모델에 전달하여 사용자의 의도를 정확한 명령(예: move_to
함수와 x: 3
파라미터)으로 해석합니다.
4. 프론트엔드 브로드캐스팅: Turbo를 통해 해석된 명령을 프론트엔드로 브로드캐스팅하고, Stimulus 컨트롤러가 이를 받아 JavaScript 함수를 호출하여 캐릭터를 움직입니다.
이러한 LLM 통합은 단순히 캐릭터를 움직이는 것을 넘어, 웹 접근성 향상(예: ‘글자 크기를 키워줘’), 다크 모드 활성화, 그리고 전자상거래 웹사이트의 스마트한 필터링(예: ‘아들이 게임하고 영화 볼 노트북을 1000달러 이하로 찾는데, 가장 큰 화면과 하드 드라이브가 필요해’)과 같은 다양한 실제 시나리오에 적용될 수 있음을 보여줍니다. Pavo는 사용자가 직접 필터를 조작하는 대신 자연어로 질문하면 LLM이 필요한 정보를 필터링해주는 방식의 효용성을 강조합니다.
또한, 그는 LLM을 활용한 이미지 인식 기능을 시연합니다. 웹캠으로 촬영한 이미지를 서버로 전송한 뒤, OpenAI의 GPT-4o mini 모델에 이미지를 보내어 그 안에 무엇이 있는지 질문합니다. 이를 통해 콘텐츠 검증, 보안 카메라 영상 처리 등에 활용될 수 있습니다. 특히, ‘임베딩(Embeddings)’ 개념을 소개하며, 텍스트, 이미지, 사운드 등 모든 정보를 숫자의 배열(벡터)로 변환할 수 있음을 설명합니다. 이 임베딩 벡터 간의 수학적 유사성(Vector Search)을 통해 사용자의 텍스트 질의(예: ‘웃는 사람의 이미지를 찾아줘’)와 가장 유사한 이미지를 데이터베이스에서 찾아내는 과정을 시연하며, 이는 Ruby on Rails에서도 쉽게 구현 가능함을 강조합니다.
결론 및 제언
Pavo는 40대가 되는 것에 대한 두려움은 불필요하며, 오히려 새로운 시작이 될 수 있다고 단언합니다. 그는 LLM 분야에 뛰어들어 새로운 즐거움을 찾을 것을 강력히 권합니다. ChatGPT에게 ‘LLM이란 무엇인가’를 묻는 것으로 시작하여 스스로 학습하고, 실수를 통해 배우는 것이 중요하다고 조언합니다. 마지막으로, DHH의 ‘유능한 것이 더 즐겁다(It’s more fun to be competent)’는 인용구를 언급하며, 자신은 여기에 덧붙여 ‘창의적인 것이 더 즐겁다(It’s more fun to be creative)’는 메시지를 전달하며 발표를 마무리합니다. 이는 개발자로서 끊임없이 배우고, 새로운 기술을 포용하며, 자신만의 방식으로 문제를 해결하는 창의적인 자세가 장기적인 만족과 성공의 열쇠임을 시사합니다.