on
과학계산을 위한 기본 언어
과학 계산을 위해 사람들은 다양한 언어를 이용합니다. 최근에는 Python이 대세인 듯해요. 최근에 빅데이터를 이용한 머신러닝 기법들이 화두가 되면서, 통계학 분야의 사람들이 주로 사용하는 R이라는 프로그래밍 언어를 배우는 사람들도 많아지고 있는 것 같습니다. Python은 역사에 비해 단기간에 성공한 프로그래밍 언어이죠. 실제 과학 계산 분야에서는 Python을 기반으로 만들어진 코드들이 생겨날 만큼, 코드의 편의성 뿐만아니라 뛰어난 성능으로 그 영향력이 점점 더 커지고 있습니다. 이러한 Python은 인터프리터 언어이다. 인터프리터 언어란 한 줄씩 소스 코드를 해석해서 그때그때 실행해 결과를 바로 확인할 수 있는 언어입니다. C와 같이 컴파일이라는 단계가 필요 없습니다.
이번에 소개할 Shell Script 역시 인터프리터 언어입니다. 또한 Unix 운영체제를 위해 쓰인 스크립트로 전통적인 유닉스 계열 커멘드 라인 (Command Line) 사용자 인터페이스를 제공하는 명령 행 인터프리터 언어입니다. 사용자는 커맨드 라인 인터프리터가 실행할 명령을 입력하거나 하나 이상의 명령으로 된 텍스트 스크립트를 작성하여 컴퓨터 조작을 지시하게 됩니다. 예를 들어, 우리가 파일을 1. 복사 2. 수정 3. 백업의 세 단계를 반복적으로 수행할 일이 있다고 가정하면, 이러한 과정들을 Script화 해놓으면 이 일련의 과정을 명령어 하나만으로 수행할 수 있는 것이죠. 간단히 말하면 단축키라고 할 수도 있겠습니다.
과학 계산은 대부분 Linux/Unix에서 이루어집니다. 그렇기 때문에 Shell을 유용하게 활용할 줄 안다면, 하나하나 명령을 내려주기 위해 키보드 누를 횟수를 줄일 수 있게 됩니다. 실제로 과학 계산을 하다 보면, 계산을 위한 입력 값과 출력 값들은 일련의 규칙에 의해 정형화되어 있습니다. 그렇기 때문에 데이터를 입력하고 출력된 데이터를 분석함에 있어서 상상 이상의 막일이 필요하게 됩니다. Shell을 배운다면 과학 계산에서 효율을 수십 배 이상으로 끌어올릴 수 있게됩니다.
Shell은 그 종류도 다양합니다. bash, csh, zch, ksh 등이 있는데, 이 중 bash는 배시 (Bash, Bourne-again shell, 본 어게인 셸)라고 하는데, Wikipedia에 보면 아래와 같은 역사가 있습니다.
리처드 스톨먼이 이전 개발자의 진척이 부진함에 불만을 느낀 이후 브라이언 폭스는 1988년 1월 10일 Bash를 코딩하기 시작했다.
배시(bash)는 csh, ksh에서 많은 아이디어를 얻어서 만들어졌다. 입력 중에 명령어나 파일 이름을 자동으로 완성해주는 편의성 때문에, 대부분의 배포형 Linux에서 기본적으로 활용되고 있다. Shell script 코드를 작성하다 보면 리눅스에서 제공되는 다양하고 유용한 많은 명령어들을 활용하는데, 대표적인 명령어 목록은 Wikipedia의 유닉스 명령어를 참고하면 좋습니다.
저는 과학 계산을 할 때 약 90 % 정도를 Shell Script를 만들어서 사용합니다. 각각의 script를 명령어로 만들고 이를 모듈 형태로 활용한다면 새로 스크립트를 작성할 때 훨씬 간편해집니다.
Shell script는 데이터 센터, 슈퍼컴퓨터와 같이 대규모 클러스터를 운영하는 운영자들도 많이 사용하는 언어입니다. 적에는 수십대에서 많게는 수천수만 대 까지 명령어 하나로 각각의 노드에 프로그램을 설치하거나 환경을 바꾸는 일이 Shell script를 이용하면 가능하기 때문입니다.
과학 계산을 하는 대부분의 전문가들은 Shell의 강력함을 마음껏 활용하고 있을 것입니다. 이제 막 과학 계산에 입문하였거나, 리눅스를 사용하고 있는 사용자라면, Shell script를 가장 먼저 배울 것을 추천해 드립니다.