KEDA를 활용한 로그 시스템 오토스케일링 경험담

우아한형제들은 KEDA를 활용하여 100만 TPS의 로그 시스템에 오토스케일링을 성공적으로 적용하였습니다. 이 경험을 통해 로그 처리의 변동성을 관리하며 비용 효율성을 높이는데 기여하게 되었습니다. 본 문서에서는 KEDA 도입 과정과 실제 운영 사례를 통한 운영 환경 개선 방안에 대해 설명합니다. KEDA 적용을 통한 로그 시스템 아키텍처 변화 KEDA를 도입하기 전, 우아한형제들은 기존 HPA를 이용하여 로그 시스템의 오토스케일링을 시도했습니다. 하지만 평균 CPU 및 메모리 사용량을 기준으로 스케일링이 진행되면서 한계에 봉착하게 되었습니다. KEDA의 도입 이후, 이벤트 기반으로 스케일링을 설정함으로써, 로그 시스템의 아키텍처를 유연하게 설계할 수 있었습니다. KEDA는 다양한 이벤트 소스를 지원하여 로그 시스템의 특성에 맞는 스케일링 기준을 설정할 수 있게 해줍니다. 예를 들어, Fluentd의 버퍼 사용률을 기준으로 스케일링 트리거를 설정함으로써, 시스템이 실제로 부하를 받기 시작하기 전에 프로세스를 조정할 수 있었습니다. 이는 로그 처리의 안정성을 크게 향상시켰고, 유연한 리소스 관리로 비용을 줄일 수 있는 기반을 마련하였습니다. 이러한 변화는 로그 시스템 아키텍처의 효율성을 높이고, 운영 환경을 개선하는 데에 결정적인 역할을 했습니다. 다양한 메트릭을 조합하여 스케일링 미세 조정이 가능해짐으로써, 시스템 부하가 예상되는 피크 시간대에도 원활하게 처리할 수 있는 역량을 갖추게 되었습니다. KEDA 도입을 통한 메트릭 기반 스케일링 효과 KEDA의 도입은 로그 시스템의 메트릭 기반 스케일링을 가능하게 하였습니다. 기존 HPA와 달리, KEDA는 프로메테우스를 이용해 다양한 지표를 직접적으로 활용할 수 있게 해줍니다. 이를 통해 CPU 및 메모리 사용량 외에도 Fluentd 버퍼와 같은 중요한 메트릭을 스케일링 기준으로 설정할 수 있었습니다. Fluentd의 버퍼가 일정 사용률을 초과할 경우 이를 위기 상황으로 간주하여 스케일 아웃을...

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 업무 효율화