웹 서비스와 상호작용하는 CLI 구축을 위한 씬 클라이언트 접근 방식

Jeremy Evans, The thin CLIent approach. San Francisco Ruby Conference 2025.

작성자
Evil Martians
발행일
2025년 12월 27일

핵심 요약

  • 1 웹 서비스와 상호작용하는 CLI를 구축하기 위해 '씬 클라이언트' 접근 방식을 도입하여 즉각적인 배포와 유지보수 간소화를 달성했습니다.
  • 2 클라이언트의 대부분 로직을 게이트웨이 엔드포인트로 이동시켜, 사용자 클라이언트 업데이트 없이 새로운 API 기능을 즉시 제공합니다.
  • 3 Ruby 기반의 `rodish` 라이브러리를 개발하여 복잡한 CLI 인자 파싱을 효율적으로 처리하고, Go 언어로 크로스 컴파일된 의존성 없는 정적 실행 파일을 제공합니다.

도입

Jeremy Evans는 Ubloud에서 웹 서비스와 상호작용하는 CLI(Command Line Interface)를 구축한 경험을 공유합니다. 기존의 '전통적인 접근 방식'이 새로운 API 기능 배포 시 사용자 업데이트 강요, 에러 처리의 어려움 등 여러 단점을 가지고 있음을 지적하며, 이를 해결하기 위한 대안으로 '씬 클라이언트 접근 방식'을 소개합니다. 이 방식은 웹 기반 소프트웨어 개발의 주요 장점인 즉각적인 배포와 효율적인 유지보수를 CLI에 적용하는 것을 목표로 합니다.

씬 클라이언트 접근 방식의 작동 원리

씬 클라이언트 접근 방식은 클라이언트와 타겟 API 엔드포인트 사이에 ‘게이트웨이 엔드포인트’를 도입합니다.

  • 클라이언트: 최소한의 역할만 수행합니다. 명령줄 인자를 JSON 배열로 포맷하여 게이트웨이 엔드포인트에 POST 요청을 보냅니다. 응답으로 받은 텍스트를 표준 출력에 인쇄하는 것이 전부입니다.

  • 게이트웨이 엔드포인트: 클라이언트로부터 받은 JSON 인자를 파싱하고, 적절한 타겟 엔드포인트를 결정하여 요청을 보냅니다. 타겟 엔드포인트로부터 JSON 응답을 받아 파싱한 후, 클라이언트가 직접 출력할 수 있는 일반 텍스트 형식으로 포맷하여 반환합니다.

씬 클라이언트 접근 방식의 장점

  • 즉각적인 배포: 새로운 API 기능이 추가될 때 게이트웨이만 업데이트하면 되므로, 사용자는 클라이언트 프로그램을 업데이트할 필요 없이 새로운 CLI 기능을 즉시 사용할 수 있습니다. 이는 웹 배포의 주요 장점을 CLI에 가져옵니다.

  • 중앙 집중식 에러 처리: 대부분의 로직이 서버 측 게이트웨이에서 실행되므로, 에러 발생 시 서버에서 효율적으로 처리하고 로깅할 수 있습니다.

  • 작고 이식성 높은 클라이언트: 클라이언트 로직이 매우 적어 다른 언어(예: Go)로 쉽게 포팅하여 의존성 없는 정적 실행 파일을 만들 수 있습니다. 이를 통해 다양한 OS 및 플랫폼에 대한 크로스 컴파일이 용이합니다.

  • 다중 엔드포인트 요청 시 낮은 지연 시간: 게이트웨이가 타겟 엔드포인트와의 내부 요청을 처리하므로, 여러 API 호출이 필요한 복합 명령의 전체 지연 시간을 줄일 수 있습니다.

고려 사항 및 해결책

  • 외부 프로그램 실행: SSH, SFTP 등 외부 프로그램 실행 시 보안을 위해 클라이언트에서 API 특정 로직을 구현하여 서버 응답의 유효성을 검증해야 합니다. 이는 순수한 씬 클라이언트 접근 방식에서 벗어나는 부분이지만, 보안을 위해 필수적입니다.

  • 클라이언트 설정: 명령줄 인자 파싱이 없으므로, 환경 변수를 통해 인증 토큰 및 서버 주소 등을 설정하는 방식을 채택했습니다.

  • 인자 파싱 라이브러리 rodish: 복잡한 명령(명령 후 서브커맨드, 객체 지향 스타일)을 지원하기 위해 기존 Ruby 라이브러리로는 부족하여 Jeremy Evans는 rodish라는 새로운 라이브러리를 개발했습니다. rodishRoda와 유사하게 정적/동적 파트를 분리하여 효율적인 인자 파싱을 가능하게 합니다.

웹 셸 구현

클라이언트 로직이 최소화된 덕분에, 웹 애플리케이션 내에서 CLI를 테스트할 수 있는 웹 셸(Web Shell)을 쉽게 구현할 수 있었습니다. 이는 사용자들이 CLI의 편리함을 미리 경험하고 설치를 유도하는 데 큰 도움이 됩니다.

결론

씬 클라이언트 접근 방식은 CLI 개발에 있어 웹 기반 소프트웨어 개발의 핵심적인 이점인 즉각적인 배포와 간소화된 유지보수를 제공합니다. 클라이언트의 역할을 최소화하고 대부분의 로직을 서버 측 게이트웨이로 옮김으로써, 개발자는 새로운 기능을 신속하게 추가하고 에러를 효과적으로 관리할 수 있습니다. 또한, Go와 같은 언어를 활용하여 크로스 컴파일된 경량의 클라이언트를 제공함으로써 사용자 경험을 향상시키며, `rodish`와 같은 맞춤형 인자 파싱 라이브러리는 복잡한 CLI 요구사항을 유연하게 충족시킬 수 있습니다. 이는 현대적인 웹 서비스와 연동되는 CLI 구축에 매우 효과적인 전략입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!