▲GN⁺ 2024-12-09 | parent | ★ favorite | on: 최대 규모의 Shell 프로그램(github.com/oils-for-unix)Hacker News 의견 Sony에서 25년 전, 매우 느리고 자주 다운되는 주문 관리 시스템을 개선하는 프로젝트에 배정받았음. AIX 서버에서 수십 년 동안 방치된 50,000줄의 셸 스크립트로 구성된 시스템이었음. Perl을 사용하여 시스템을 5,000줄로 줄이고 성능을 10-100배 향상시켰음. 이 프로젝트는 매우 만족스러운 경험이었음. Enrust CA와 디렉토리 설치 프로그램을 작성했으며, 모든 Unix에서 실행되도록 발전했음. 설치는 간단했지만, 업그레이드는 복잡했음. 각 Unix의 유틸리티가 약간씩 달라서 관리가 필요했음. DEC의 Unix는 명령줄 유틸리티가 출력 폭을 제한하는 등 혼란스러웠음. HP-UX는 버전마다 변경 사항이 있었음. 스크립팅 언어 Lil을 bash로 해석기를 작성하려 했으나, 부동 소수점 연산의 어려움과 제한된 배열 지원으로 AWK를 선택했음. AWK는 POSIX 환경에서 사용 가능하고, 일반적인 언어로 적합했음. Bash 스크립트는 복잡한 프로그램 작성에 적합하지 않음. 가독성이 떨어지고, 변수 범위 규칙이 미묘하며, 오류 처리가 원시적임. 정적 분석 도구, 린터, 디버거가 부족하여 유지보수가 어려움. 테스트가 번거롭고, 복잡한 논리나 데이터 구조를 다루기 어려움. Bash는 간단한 자동화에 적합하지만, 복잡한 애플리케이션에는 다른 언어가 더 나음. rkhunter 스크립트는 코드가 좋고 정보가 풍부함. 다양한 플랫폼에서 유틸리티가 예상대로 작동하도록 보장하는 데 많은 코드가 사용됨. 복잡한 프로그래밍 언어로 작성되었다면 덜 투명했을 것임. 과거에 사용한 가장 큰 셸 프로그램은 abcde로, 약 5500줄의 코드로 구성됨. FreeBSD Update 클라이언트는 약 3600줄의 sh 코드로 구성됨. 운영 체제를 업데이트하는 도구로서 상당한 기능을 제공함. 셸은 가용성이 보장되는 유일한 도구일 수 있지만, 큰 셸 앱을 작성할 때는 재고할 필요가 있음. acme.sh 스크립트는 7.1K 줄로, Lets Encrypt에서 인증서를 발급하고 갱신하는 데 사용됨. mod_pagespeed에서 셸 스크립트를 사용하여 시스템 테스트를 수행했으나, Python으로 전환하는 것이 더 나았을 것임. 10,579줄의 bash 코드가 사용되었음. 점진적으로 전환하는 것이 더 효율적이었을 것임.
Hacker News 의견
Sony에서 25년 전, 매우 느리고 자주 다운되는 주문 관리 시스템을 개선하는 프로젝트에 배정받았음.
Enrust CA와 디렉토리 설치 프로그램을 작성했으며, 모든 Unix에서 실행되도록 발전했음.
스크립팅 언어 Lil을 bash로 해석기를 작성하려 했으나, 부동 소수점 연산의 어려움과 제한된 배열 지원으로 AWK를 선택했음.
Bash 스크립트는 복잡한 프로그램 작성에 적합하지 않음.
rkhunter 스크립트는 코드가 좋고 정보가 풍부함.
과거에 사용한 가장 큰 셸 프로그램은 abcde로, 약 5500줄의 코드로 구성됨.
FreeBSD Update 클라이언트는 약 3600줄의 sh 코드로 구성됨.
셸은 가용성이 보장되는 유일한 도구일 수 있지만, 큰 셸 앱을 작성할 때는 재고할 필요가 있음.
acme.sh 스크립트는 7.1K 줄로, Lets Encrypt에서 인증서를 발급하고 갱신하는 데 사용됨.
mod_pagespeed에서 셸 스크립트를 사용하여 시스템 테스트를 수행했으나, Python으로 전환하는 것이 더 나았을 것임.