Ruby의 스크립팅 및 자동화 역량
연사는 Ruby가 스크립팅 및 자동화에 가장 적합한 언어라는 “핫 테이크”를 제시합니다. 이는 Ruby가 Matz의 초기 설계 목표였으며, LLM(대규모 언어 모델)들조차 Ruby의 이러한 강점을 인정한다고 설명합니다.
BEMI AI의 클라우드 데이터 인프라
BEMI AI는 고객 지원을 위한 AI 에이전트를 구축하며 Ruby를 활용합니다.
-
멀티테넌트 인프라: 고객별로 격리된 인프라를 Ruby로 프로비저닝합니다.
-
데이터 소스 연결: PostgreSQL의 논리적 복제 로그, Notion API, 웹훅 등을 통해 다양한 데이터 소스에 연결합니다.
-
데이터 저장: Parquet 파일(컬럼 기반, 압축 효율적)과 JSON 메타데이터를 사용하여 S3 기반의 확장 가능한 ‘바닥 없는’ 스토리지를 구현합니다.
-
쿼리 엔진: 분석용 SQLite와 유사한 DuckDB를 활용합니다.
데이터 엔지니어링 스택의 복잡성
데이터 엔지니어링 스택은 Kafka, JVM, 데이터 스트리밍, 워크플로우 오케스트레이션, 테이블 압축, 스냅샷, 다양한 테이블 포맷(벡터 포함), 데이터 품질 및 카탈로그, ETL/ELT/리버스 ETL 등 소프트웨어 엔지니어링 스택보다 훨씬 복잡하고 비용이 많이 든다고 강조합니다. 이러한 복잡성 속에서 자동화의 중요성이 부각됩니다.
Ruby를 통한 자동화
기존의 Ansible, Terraform, Kubernetes 같은 자동화 도구와 함께, Ruby는 “자동화를 자동화”하는 데 핵심적인 역할을 합니다.
-
풍부한 표준 라이브러리: JSON, YAML, CSV 등 다양한 데이터 타입 처리 및 Kubernetes YAML 파일 동적 생성에 용이합니다.
-
ERB 템플릿 렌더링: HTML뿐만 아니라 SQL 파일 등 모든 유형의 파일을 렌더링할 수 있습니다.
-
내장 HTTP 라이브러리: 외부 Gem 없이 HTTP 요청을 처리합니다.
-
강력한 파일 조작:
File.join,Tempfile등을 통한 대용량 파일 처리 및 임시 파일 관리가 가능합니다. -
셸 명령 실행:
system, 백틱,Open3를 통해 외부 프로세스를 완벽하게 제어할 수 있습니다. -
빠른 반복 속도: 컴파일 단계 없이 빠르게 실행, 읽기, 디버깅이 가능하여 개발 속도를 높입니다.
Ruby 스크립트 작성 패턴 및 모범 사례
-
드라이 런 패턴: 실제 변경 없이 스크립트 실행 결과를 미리 확인하여 디버깅 및 문제 해결에 도움을 줍니다.
-
사이드카 패턴: 메인 프로세스에 보조 기능을 제공하는 경량 컨테이너(예: SSH 터널)로 Ruby를 활용하여, Rails 모놀리스가 적합하지 않은 경우에도 유연하게 대응합니다.
-
GitOps 패턴: 인프라 코드를 선언적으로 Git 저장소에 관리하고, Ruby 프로세스가 변경 사항을 커밋하여 CI/CD를 통해 인프라 상태를 동기화합니다.
-
점진적 타이핑: Sorbet과 같은 도구를 사용하여 코드의 확장성과 유지보수성을 향상시킵니다(다만, Ruby 커뮤니티 내 타이핑 시스템의 혼란에 대한 언급도 있습니다).
-
모범 사례: 의존성 최소화, 전역 가변 상태 감소, 멱등성 스크립트 작성, 민감 데이터 마스킹, 사용자 입력 유효성 검사, 불필요한 추상화 없는 DRY 원칙 준수.
-
고급 기술: 타임아웃 처리, 기능 플래그, 속도 제한, 지수 백오프를 이용한 재시도, 서킷 브레이커, 카오스 엔지니어링 등 분산 시스템에서 유용한 기술들도 언급됩니다.