Nushell을 사용해야 하는 이유: 셸의 미래에 대한 고찰

The case for Nushell

작성자
jeff
발행일
2023년 08월 30일

핵심 요약

  • 1 Nushell은 기존 셸(bash/zsh, fish)의 텍스트 기반 한계와 POSIX 표준의 구식 설계를 극복하고, 객체 기반 파이프라인을 통해 구조화된 데이터 처리를 제공합니다.
  • 2 Nushell은 현대적인 언어 설계 원칙을 적용하여 타입 검사, IDE 지원, 직관적인 오류 메시지, 크로스 플랫폼 호환성 등 개발자 친화적인 기능을 통합한 차세대 셸입니다.
  • 3 인터랙티브 셸, 완전한 타입 스크립팅 언어, 강력한 데이터 처리 시스템의 기능을 하나로 합쳐, 셸 사용 경험을 혁신하고 생산성을 크게 향상시킬 잠재력을 가집니다.

도입

이 블로그 게시물은 전통적인 셸(bash/zsh)과 비교적 신흥 셸(fish)의 한계를 지적하며, Nushell의 도입을 강력히 주장합니다. 저자는 친구들과의 대화를 통해 터미널 사용 방식에 대한 의문을 제기하고, 셸의 상태가 관성적인 사용 습관을 극복할 만큼 개선될 수 있는지에 대한 근본적인 질문을 던집니다. 이는 단순히 새로운 도구의 소개를 넘어, 현대적인 개발 환경에서 셸이 나아가야 할 방향을 모색하는 서론적인 배경을 제시합니다.

기존 셸의 한계와 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은 단순히 셸이 아니라, 완전한 타입 스크립팅 언어, 인터랙티브 셸, 그리고 데이터 처리 시스템을 통합한 솔루션입니다.

결론

Nushell은 기존 셸의 관성을 극복하고 현대적인 개발 요구사항을 충족시키기 위한 강력한 대안입니다. 셸을 구조화된, 인터랙티브한 처리 엔진으로 인식함으로써, 명령어의 단순화, 데이터 간의 완전한 지식 공유, 그리고 시스템의 모든 부분과 구조화된 상호작용이 가능해집니다. Nushell은 단순히 셸 기능을 넘어, 타입이 지정된 스크립팅 언어이자 데이터 처리 시스템으로서 세 가지 기능을 통합하여 모든 상호작용을 데이터로 취급합니다. 이는 일상적인 작업부터 대규모 데이터 처리까지 유연하게 대응할 수 있는 '가지고 있으면 좋은' 도구입니다. Nushell은 셸 작업, 코드 작성, 데이터 처리를 즐겁게 만들며, 과거의 설계에서 벗어나 더 나은 방식으로 나아갈 때임을 시사합니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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