기존 셸의 한계와 POSIX 표준에 대한 비판
기존의 셸들은 다음과 같은 문제점을 안고 있습니다.
-
Bash/zsh: 거의 모든 Linux 배포판의 기본 셸로 유비쿼터스하지만, 언어로서 현대적인 프로그래밍 스타일이나 도구 지원이 부족하며, 대규모 스크립트 작성에 부적합합니다.
-
Fish: Bash/zsh보다 개선된 인터랙티브 경험과 가독성 높은 스크립팅을 제공하지만, 여전히 90년대 스타일의 셸이라는 한계가 있습니다.
-
PowerShell: 객체 기반 파이프라인을 도입하여 텍스트 대신 객체를 전달하며 데이터 작업의 가능성을 열었지만, 언어 설계가 우선되지 않아 어색한 문법과 초기 Windows 전용이라는 제약이 있었습니다.
저자는 ‘POSIX가 아니라는 점’을 Nushell 반대 논리로 사용하는 것에 대해 반문하며, POSIX 표준 자체가 현대적인 언어 설계 관점에서 비효율적이고 구식임을 비판합니다. ‘fi’, ‘esac’과 같은 예약어, 수많은 플래그를 가진 유닉스 명령어들, 그리고 8비트 기반의 종료 코드 처리 방식 등은 현대 시스템 설계에 부합하지 않는다고 지적합니다.
구조화된 데이터의 중요성과 Nushell의 해법
유닉스 파이프라인의 텍스트 기반 데이터 전달 방식은 유연하지만, 출력 명령어와 입력 명령어 간의 데이터 형태에 대한 암묵적인 합의가 필요하며, 이는 표현과 프레젠테이션을 묶어 명령어의 진화를 방해하고 플래그의 확산을 초래합니다. Nushell은 이러한 문제를 구조화된 데이터 처리 방식으로 해결합니다.
ls | where size > 10kb와 같이ls의 출력 데이터를 파싱할 필요 없이where명령어가 직접 처리합니다. 이는ps나 CSV 파일에도 동일하게 적용됩니다.
Nushell의 핵심 특징
Nushell은 다음과 같은 특징을 통해 현대적인 셸 경험을 제공합니다.
-
언어로서의 설계: 가독성을 최우선으로 하며,
for i in 1..10 { print $i }와 같은 직관적인 문법과 강력한 패턴 매칭 기능을 제공합니다. -
타입 검사: 모든 데이터를 텍스트가 아닌 테이블, 레코드, 숫자, 불리언 등 실제 타입으로 처리하여 스크립트 실행 전에 흔한 오류를 감지합니다.
-
IDE 지원: 타입 정보를 기반으로 자동 완성, 오류 보고, 정의 이동, 문서화 등 풍부한 IDE 기능을 제공하여 개발 생산성을 높입니다.
-
직관적인 오류 메시지: 데이터의 출처와 오류 발생 원인을 명확하게 시각적으로 보여주어 디버깅을 용이하게 합니다.
-
SQL 유사 스타일: 파이프라인을 통해 데이터가 각 단계를 거치며 처리되는 방식은 SQL과 유사하여 실험과 탐색을 장려합니다.
-
크로스 플랫폼: Windows, Linux, macOS 등 다양한 운영체제에서 동일한 경험을 제공하며, 스크립트를 쉽게 이식할 수 있습니다.
Nushell은 단순히 셸이 아니라, 완전한 타입 스크립팅 언어, 인터랙티브 셸, 그리고 데이터 처리 시스템을 통합한 솔루션입니다.