본문 바로가기
카테고리 없음

과학 계산을 위한 기본 언어

by D.Flicker 2019. 10. 8.

출처. Official BASH Logo (https://github.com/odb/official-bash-logo)

과학 계산을 위해 사람들은 다양한 언어를 이용한다. 최근에는 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를 코딩하기 시작했다.

배시는 csh, ksh에서 많은 아이디어를 얻어서 만들어졌다. 입력 중에 명령어나 파일 이름을 자동으로 완성해주는 편의성 때문에, 대부분의 배포형 Linux에서 기본적으로 활용되고 있다. Shell script 코드를 작성하다 보면 리눅스에서 제공되는 다양하고 유용한 많은 명령어들을 활용하는데, 대표적인 명령어 목록은 Wikipedia의 유닉스 명령어를 참고하면 좋다.

필자는 과학 계산을 할 때 약 90 % 정도를 Shell Script를 만들어서 사용한다. 만들어 놓은 script들은 1줄에서부터 수백 줄 까지 다양하다. 약 10년에 걸쳐서 만들어 놓은 script가 100개가 넘는다. 각각의 script를 명령어로 만들고 이를 모듈 형태로 활용한다면 새로 스크립트를 작성할 때 훨씬 간편해진다.

Shell script는 데이터 센터, 슈퍼컴퓨터와 같이 대규모 클러스터를 운영하는 운영자들도 많이 사용하는 언어이다. 적에는 수십대에서 많게는 수천수만 대 까지 명령어 하나로 각각의 노드에 프로그램을 설치하거나 환경을 바꾸는 일이 Shell script를 이용하면 가능하다. 

과학 계산을 하는 대부분의 전문가들은 Shell의 강력함을 마음껏 활용하고 있을 것이다. 이제 막 과학 계산에 입문하였거나, 리눅스를 사용하고 있는 사용자라면, Shell script를 가장 먼저 배울 것을 추천한다.

 

참고

Bash - Wikipedia

Born Shell - Wikipedia

Unix Shell - Wikipedia

 

무료 자원들

Bash Reference Manual
BASH Programming - Introduction HOW-TO

Advanced Bash-Scripting Guide

A beginner’s guide to bash scripting

Bash Guide for Beginners

Getting Started With Bash

Google Shell Style Guide

Learning The Bash Shell

BashGuide - Greg's Wiki

Conquering the Command Line

 

Youtube 튜토리얼

Shell Scripting Tutorials - YouTube