Terminalwire는 Rails 애플리케이션에 Thor 기반의 CLI 기능을 통합하는 과정을 안내합니다.
초기 설정 및 통합
-
bundle add terminalwire-rails명령어로 Gem을 추가합니다. -
rails g terminalwire:install my-app명령어로 초기 설정을 진행합니다. -
./app/terminals폴더에ApplicationTerminal(기반 클래스)과MainTerminal(명령어 정의)이 생성됩니다. -
config/routes.rb에Terminalwire::Thor::Server를 통해/terminal엔드포인트를 마운트하여 웹소켓 서버를 설정합니다.
Thor를 활용한 CLI 개발
-
명령어 정의:
desc와 Ruby 메서드를 사용하여 명령어를 정의합니다. -
인자 및 옵션: 메서드 파라미터로 필수/선택 인자를 정의하며,
option메서드로 플래그(옵션)를 추가하고options해시로 접근합니다.numeric,string,boolean,enum등 다양한 옵션 타입을 지원합니다. -
서브커맨드:
subcommand를 사용하여 관련 명령어를 별도의 Thor 클래스로 그룹화하여 복잡한 애플리케이션을 구조화합니다. -
도움말 출력: Thor는 자동으로 도움말을 생성하며,
basename및long_desc로 사용자 정의가 가능합니다.
주요 기능 및 특징
- 세션 관리:
session객체를 통해 클라이언트 측에 JWT(JavaScript Web Token) 형태로 암호화 및 서명되어 저장되는 세션 데이터를 관리합니다.session.edit을 통한 일괄 변경 및 `Session
destroy`를 통한 세션 초기화가 가능합니다.
-
인증: 이메일/비밀번호 방식 외에, 웹 브라우저를 통한 OAuth, SAML 등의 복잡한 인증 흐름을 지원합니다.
getpass메서드는 비밀번호 입력 시 화면에 표시되지 않도록 처리합니다. -
표준 I/O:
puts,print,gets,getpass,warn등 일반적인 터미널 I/O 기능을 웹소켓을 통해 원활하게 스트리밍합니다. -
클라이언트 파일 시스템 및 환경 변수 접근: 사용자의 동의 하에 클라이언트 워크스테이션의 특정 경로에 파일 읽기/쓰기 및 환경 변수 접근이 가능합니다.
-
웹 브라우저 제어:
browser.launch메서드를 사용하여 클라이언트의 기본 웹 브라우저에서 특정 URL을 열 수 있습니다.
배포 및 라이선싱
-
Terminalwire Server는 프로덕션 환경에서 라이선스가 필요하며, 개인 프로젝트 및 소규모 조직에는 무료 라이선스를 제공합니다.
-
curl설치 스크립트 또는terminalwire install명령어를 통해 사용자에게 애플리케이션을 쉽게 배포할 수 있습니다.