배달의민족 Flutter 도입과 아키텍처 설계 교훈

배달의민족은 주문접수 채널에서 Flutter를 도입하여 멀티 플랫폼 대응력을 높이고, Clean Architecture를 통해 효율적인 코드 관리를 실현했습니다. 이 글에서는 Flutter 도입과 아키텍처 설계의 과정에서 얻은 교훈을 바탕으로, 변화하는 비즈니스 요구에 맞추기 위한 혁신적인 접근을 소개합니다. 또한, 이러한 경험이 다른 기업이나 개발자에게도 유용한 전략이 될 수 있도록 공유하고자 합니다. Flutter 도입으로 인한 혁신적인 변화 배달의민족은 Flutter 도입을 통해 플랫폼 전환과 유지보수 측면에서 큰 혁신을 이루었습니다. 기존의 Windows, Android, iOS 플랫폼에 추가하여 macOS와 다양한 Android 디바이스로까지 확장할 필요성을 느꼈습니다. Flutter의 도움으로 단일 코드베이스에 의해 멀티 플랫폼을 동시에 지원할 수 있게 되었고, 이를 통해 개발자 수를 줄이고 생산성을 향상시킬 수 있었습니다. 개발자들은 각 플랫폼에 대해 반복적으로 구현할 필요가 없어졌고, 버그 수정이나 기능 변경 시에도 이전에 비해 적은 시간에 모든 플랫폼에 적용할 수 있게 되었습니다. Flutter의 도입은 크로스 플랫폼 반응형 UI 구현을 가능하게 하여, 사용자 경험의 일관성을 높였습니다. 이제 파트너들은 다양한 OS 환경에서 동일한 경험을 하게 되므로, 학습 비용도 줄어들고, 혼란이 줄어드는 장점을 경험하고 있습니다. 이러한 변화는 단순히 기술적인 접근방식이 아닌, 사업의 방향성을 전환하는 계기로 작용했습니다. 파트너사들이 원하는 효율적인 주문 관리 시스템을 제공하기 위해, 기존의 네이티브 아키텍처에서 벗어나 새로운 기술 스택으로 과감히 옮겨갔습니다. Firebase와 같은 클라우드 서비스를 활용하여 실시간 데이터 업데이트와 동기화가 가능하게 되었고, Flutter의 강점을 극대화하여 사용자 친화적인 UI/UX도 구현됐습니다. 이로 인해 즉각적인 피드백을 수렴할 수 있는 구조가 마련됐습니다. 결국 Flutter의 도입은 배달의...

LLM 연동 문제 해결 GenAI SDK 개발기

최근 LLM(대형 언어 모델)의 발전 속도가 가속화되면서 다양한 제공사에서 수많은 솔루션이 등장하고 있습니다. 이러한 변화에 따라 여러 모델의 API를 효과적으로 연동하는 것이 필수가 되었으며, 이를 위해 GenAI SDK가 개발되었습니다. 이 SDK는 LLM 호출을 단일 인터페이스로 간소화하고, API 키 관리의 번거로움을 줄이며, 모든 호출을 안전하게 기록하는 기능을 제공합니다.

LLM 호출의 단일 인터페이스 제공

여러 LLM을 사용할 때 이들 각각의 제공사에서 요구하는 API 형태와 호출 방식이 달라 개발자는 복잡한 코드를 작성해야 했습니다. GenAI SDK는 이러한 문제를 해결하기 위해 단일 인터페이스를 제공합니다. SDK의 구조는 LiteLLM이라는 오픈소스 라이브러리를 기반으로 하여, 각 LLM의 API를 통합하는 방식으로 설계되었습니다. 이를 통해 개발자는 단순히 메서드 호출을 통해 원하는 LLM을 호출할 수 있습니다. 예를 들어, AWS Bedrock이나 Google Gemini 같은 서로 다른 제공사의 API를 호출할 때도 동일한 메서드로 명령을 내릴 수 있습니다. 이로 인해 코드의 가독성이 향상되며, 유지보수가 용이해졌습니다. 또한, 사용자는 API 제공사를 명시할 필요 없이 모델 이름만으로도 통일된 방식으로 호출할 수 있습니다. 이러한 통합된 API 호출 방식은 특히 새로운 모델이나 제공사가 추가될 때 큰 장점을 제공합니다. 개발자는 추가적인 구성을 고려하지 않고도 새로운 모델이 지원되면 즉시 활용할 수 있습니다. 따라서 GenAI SDK는 개발자에게 빠른 프로토타이핑과 실험을 가능하게 하여 혁신적인 AI 솔루션의 개발을 촉진합니다.

중앙화된 API 키 관리 방식 도입

LLM 서비스를 개발할 때 API 키 관리 문제는 자주 발생하는 불편입니다. 각 LLM 제공사에서 발급받은 API 키를 별도로 관리하는 것은 시간과 노력을 소모하게 만들며, 새로운 제공사가 추가될 때마다 이 과정은 더욱 복잡해집니다. GenAI SDK는 이러한 문제를 중앙화된 키 관리 방식을 통해 해결함으로써 사용자 경험을 극대화하였습니다. 이 SDK는 Langfuse라는 시스템을 이용하여 모든 API 키와 연결 정보를 통합 관리합니다. 사용자는 개별 프로젝트에 대한 단일 키 정보만 입력하면 되며, 모든 모델 호출 시 이 통합된 정보를 활용할 수 있습니다. 이를 통해 사용자는 매번 별도로 키를 설정하느라 고민할 필요 없이, SDK 클라이언트를 초기화하는 것만으로 모든 API 호출에 필요한 키를 자동으로 인식하고 사용할 수 있습니다. 이 구조는 또한 보안상의 이점도 제공합니다. Langfuse에 등록된 API 키는 암호화되어 저장되며, SDK는 이를 안전하게 복호화하여 사용합니다. 이러한 방식은 비즈니스 로직에만 집중할 수 있도록 해주며, 개발자는 프로덕트의 기능적, 창의적인 측면에 더 많은 시간과 노력을 투자할 수 있게 됩니다.

모든 LLM 호출 기록의 자동화

GenAI SDK의 중요한 기능 중 하나는 모든 LLM 호출을 자동으로 기록하는 것입니다. 기록이란 LLM 호출의 성과를 분석하고, 최적화하는 데 필수적입니다. 호출 시간, 응답 내용, 사용된 토큰 수, 발생 비용 등을 확인하는 것은 개발자가 AI 솔루션의 성능을 이해하고 개선하는 데 필요한 정보입니다. Langfuse와의 연동을 통해, GenAI SDK는 모든 요청 및 응답 정보가 실시간으로 기록되도록 하여, 사용자가 복잡한 설정을 하지 않더라도 LLM의 성능을 최대한 활용할 수 있게 합니다. 몇 줄의 코드 추가로 모든 데이터를 자동으로 대시보드에 기록할 수 있으며, 이를 통해 각 호출이 어떻게 동작하는지를 명확하게 시각화할 수 있습니다. 이러한 기록 기능은 디버깅뿐만 아니라, 팀 협업에서도 유용하게 사용됩니다. 팀원들이 다른 개발자와 실험 결과를 쉽게 공유하고, 특정 프롬프트가 어떤 결과를 내는지에 대한 분석이 가능하기 때문에 서비스의 품질을 높이는 데 많은 도움을 줍니다.

GenAI SDK는 LLM 연동에 있어 복잡한 문제점을 효과적으로 해결하며, 사용자들이 AI 서비스를 보다 손쉽고 효율적으로 개발할 수 있도록 지원하는 도구입니다. 단일 인터페이스를 제공하고, 중앙화된 키 관리 방식을 도입하며, 모든 호출을 자동으로 기록하는 기능은 사용자 경험을 향상시켰습니다. 앞으로 GenAI SDK는 더욱 발전하여, 모든 구성원이 AI 서비스 개발자로 나설 수 있는 환경을 구축해 나갈 것입니다. 향후 지속적인 업데이트와 개선을 통해 새로운 기술을 쉽게 도입할 수 있도록 할 계획입니다.

이 블로그의 인기 게시물

우아한형제들의 실시간 알림 혁신: SSE(Server-Sent Events)로 이룬 효율성과 안정성

우아한 디버깅 툴 개선으로 QA 업무 효율화

물어보새의 진화와 지식 공유 확장