이 노트들은 2017년 서울대학교 천문학과의 "천문 관측 및 실험 1"(이하 천관실) 과목의 실습을 위해 처음으로 만들어졌습니다.
이 머릿말은 강의노트들을 만들 때에 고려한 기본적인 철학과, IRAF기반의 기존 천관실 체계에서 AstroPy 기반의 체계로 옮긴 이유 등을 서술하기 위한 조교의 변(辯)을 담고 있습니다.
한국어 부분은 큰 변동이 있기 전에는 업데이트되지 않을 예정이며, 항상 영어판을 참고해주시기 바랍니다.
2017-03-13 15:20
이하의 글을 쓰는 데 있어 아래의 단어들은 특별히 설명하지 않고 사용하도록 하겠습니다.
오랜 세월 사실상 천문학적 이미지 처리의 표준이 되어 온 NOAO의 IRAF는 크게 두 가지의 문제점이 있었습니다. 가장 중요한 문제점은 공식적인 IRAF의 수정이나 보완은 현재의 2.16.1 버전 이후 아마도 없을 것이라는 점이며, STScI는 IRAF 관련 소프트웨어의 지원을 차츰 줄여가고 있습니다. 즉, 어느 심각한 결함이 발견되었다 하더라도, 근시일내에 그 문제점이 해결되리라는 희망을 갖기 어렵습니다. 또한 굳이 큰 문제가 아니더라도 소프트웨어의 알고리즘 최적화 문제에 새로운 해결책이 알려졌다 한들 그것이 적용될 가능성이 낮습니다. 이는 이미지 하나가 GB단위로 커지는 현대 천문학에 있어 큰 단점이 될 수 밖에 없습니다. 대표적으로 L.A. Cosmic이라는 우주선(cosmic ray) 제거 툴은 IRAF와 Python 버전이 동시에 공개되어 있는데 (사실 astroscrappy
의 Python 버전은 비록 Python에서 사용하는 함수이지만 C++을 사용합니다), 큰 최적화 노력을 들이지 않았음에도 Python 버전이 IRAF 버전보다 빠릅니다. IRAF가 병렬 컴퓨팅을 지원하지 않기 때문에 이러한 속도 차이는 최대 100배 이상 날 수도 있습니다. 앞으로 처리해야할 데이터의 양이 지수함수적으로 늘어나게 되는 경우 IRAF는 사용되기 어려울 것으로 판단됩니다. 전천을 Subaru 8-m 망원경 수준으로 탐사하게 될 LSST의 경우에도 이러한 방대한 양의 데이터를 처리하기 위해 IRAF를 배제하고 Python 기반으로 데이터를 처리할 것으로 계획되고 있습니다.
IRAF의 두 번째 문제점은 이 소프트웨어가 오래된 것, 그러니까 처음 방대한 인력을 쏟아붓던 시기가 현재 우리의 컴퓨터와 달랐던 시기이기에 가지는 문제인데, 다음과 같은 것들을 포함합니다:
마지막 문제점에 대한 에피소드 중 하나입니다만, 아직도 IRAF에서는 비항성천체의 측광을 위한 적합한 패키지가 없는 반면, Python에는 벌써 TRIPPY라는 툴이 개발되어 공개돼 있습니다. IDL에서는 이미 수도 없이 많은 패키지들이 개발되어 있습니다.
PyRAF는 이러한 문제점들 중 마지막 문제점인 디버깅과 CL의 복잡성 문제를 해결하기 위해 Python을 기반으로 만들어진 대안책입니다. 링크에 의하면 1999년에도 이미 Python을 이용해 CL을 대체하는 시도는 진행중이었습니다. 이 보고서 에서는 1998년에 시작되었다고 합니다. PyRAF가 처음 만들어지던 2000년대 이전의 시기에는 IRAF가 완전히 무료로 배포되던 시절도 아니니, 완벽한 오픈소스인 Python을 이용한 이 시도는 획기적인 것이었습니다. PyRAF는 또한 Windows 환경에서도 작동합니다 (IRAF 중 일부 중요한 기능들은 애초에 UNIX에서만 작동하게끔 짜여져 있어 Windows에서 도저히 작동하지 않으므로 주의하라고 STScI 공식 웹사이트에서도 언급합니다).
그러나 이 PyRAF도 몇 가지 문제점이 있습니다. 우선 동일한 CL 코드라도 IRAF와 PyRAF의 결과물이 다를 때가 있습니다. 이는 PyRAF Tutorial 에서도 암시적으로 설명하고 있는데, "You can even run more than 90% of IRAF CL scripts!" (PyRAF에서 그렇다는 말) 라는 문장입니다. 바꿔 말하면 10% 정도는 IRAF와 다른 형태로 스크립트를 만들어야 제대로 작동한다는 말입니다. 그렇다면 과거에 IRAF의 기존 CL을 이용해 스크립트를 짜둔 사람들은 PyRAF를 이용하며 "무엇이 안 돌아갈지 모르는" 리스크를 감수하려 하지 않을 테지요. 정말 안타까운 것은, 기존 CL과 다른 결과가 나왔다는 것을 알려주는 에러 메세지 등이 없어서 직접 IRAF에서도 돌려보고 PyRAF에서도 돌려본 뒤 비교를 해야만 한다는 점입니다.
그 외에도 만들어지던 당시에 Python 2를 기반으로 만들어져서 backward-incompatible 형식으로 만들어진 현대의 Python 3에서 작동이 어려운 점도 문제입니다 (물론 요즈음 들어 Python 3에서도 상당히 동일하게 작동되고 있습니다마는 어떤 알려지지 않은 버그가 있을지 모를 일입니다. 설사 버그가 알려져도 그것을 고치기 위한 인력과 예산이 예전만 하지 못합니다.). 그리고 여타의 Python 패키지들에 비해 매뉴얼이 잘 갖춰져 있지 않아 딱히 IRAF CL에 비해 코딩에 있어 장점이 없는 듯이 느껴진다는 점도. 또한 IRAF의 첫 번째 문제, 즉 추가적인 수정이나 보완 문제는 PyRAF도 같이 가지고 있습니다. 제대로 확인할 수는 없으나 근래 들어 IRAF/PyRAF로의 인력 배치는 많이 줄어들고 있는 것으로 보입니다. 이는 AstroPy 및 여타 Astropy affiliated 패키지들의 업데이트 주기와 PyRAF의 업데이트 주기를 비교해볼 때 알 수 있습니다. 비록 지속적으로 업데이트가 되고는 있으나, 그것이 얼마나 오래 효과적으로 지속될지 예측하기 어렵습니다. STScI의 과학 소프트웨어 팀의 Lim Pey-Lian은 2016년 말 공식 헬프 이메일 계정을 통해 제게 "IRAF 지원은 점차 줄여가고 있으며 Python 대안인 Astropy를 이용해달라"는 답을 준 적이 있습니다.
이러한 문제들은 많은 사람들이 IRAF의 대안을 찾고 싶어하는 충분한 이유가 됩니다. 그러한 __해결책 중 하나가 IDL__이었습니다. 코딩이 쉽고 OS에 관계없이 사용할 수 있다는 점, 그리고 전문적인 프로그래머들이 지속적으로 언어를 안정적으로 유지해준다는 것이 장점이었습니다. 그러나 IDL은 또한 몇 가지 문제를 가지는데, __가장 중요한 것이 라이센스__이고, 그 외에 프로그램 언어로서의 문제 (링크, 그림을 그릴 때에 있어 매우 느린 속도와 절차지향적 언어체계로 인한 비효율적인 3D-plot, 그리고 python에 비해 덜 체계화된 매뉴얼 등이 그것입니다.
라이센스는 IDL 이용자에겐 치명적인 문제일 수 밖에 없는데, 100만원 수준의 비용뿐 아니라 버전마다 새로운 라이센스를 구매해야 하기 때문에 소속 기관에서 매번 라이센스를 업데이트해 주지 않으면 언제 호환성 문제가 생길지 알 수 없기 때문입니다. 소속기관에 있어 이러한 라이센스 비용은 상당한 부담이 됩니다 (사람이 많으면 그에 비례해 많은 돈이 필요하므로). 그래서, 개인이 IDL 8 버전의 코드를 가지고 있는데 새로 취직한 기관이 IDL 7의 라이센스만 있다고 한다면 해당 코드가 제대로 작동하는지, 제대로 된 결과를 주는지를 다시 확인해야하는 번거로움이 있습니다. 그럼에도 불구하고 코딩의 용이성 덕분에 IRAF 대신 많은 관측소에서 사용되고 있습니다.
아래는 IDL과 IRAF가 사용되는 예시들입니다.
사실 정말 똑똑한 사람이라면 그냥 머릿속으로 binary 코드를 만들어서 (11000101011101000010101101....) 돌리는 것이 가장 빠릅니다. 2011년 제가 학부생이던 시절 의무과목이었던 Introduction to Programming 과목의 한 교수님께서 자신이 미국에서 공부하던 때의 일화를 들려주시던 때가 생각납니다. "I had a friend who believes it is the best way to make all the programs in binary from the beginning. But the thing is, not everyone is as smart as she does." 그 다음으로는 C를 비롯한 저급 언어들 (low-level languages)을 사용하는 방법이 있고, 이미 만들어진 IRAF를 적절히 수정하여 훨씬 빠르게 만드는 방법도 있습니다. 하지만 우리는 대다수의 그렇지 않은 사람 들을 생각할 필요가 있습니다. 우리는 우리가 가진 호기심과 궁금증들을 푸는 데에 있어 그들이 미래에 가질 천문학자로서의 역할을 잃을 여유가 없기 때문입니다. "대다수"에는 상당히 많은 과학자들도 포함된다는 것은 IRAF가 아직도 전산학계 최전선의 최적화방식을 도입하지 못하고 있다는 점에서 알 수 있습니다.
그래서 우리가 차선책으로 선택할 수 있는 방법은 아래와 같은 장점을 가진 언어일 것입니다:
위의 모든 조건들을 완벽하게 만족하는 언어가 바로 Python입니다.
첫 번째는 다시 말해 좀 더 많은 사람이 개발에 참여하기 쉬운 언어라는 말과 비슷하고, 두 번째의 경우 결국 천문학자 외에도 사용하는 언어라는 말과 비슷할 것으로 생각합니다. CL과 같이 어떤 IDE에도 하이라이팅 기능이 없고 매뉴얼이 난해한 언어를 범인(凡人)이 사용하기는 쉽지 않겠습니다. 세 번째에 있어 Python은 완벽한 무료프로그램이며, 거의 모든 LINUX 배포판에 기본으로 설치되어 있고, 덕분에 라이센스 인증과 같은 복잡한 과정을 거칠 필요가 전혀 없다는 점이 굉장한 장점이 됩니다. 네 번째와 다섯 번째는 Python을 사용한 사람이라면 누구나 동의할 수 밖에 없는 큰 장점입니다. Anaconda라는 플랫폼을 이용하는 경우, Windows에서도 shell을 사용해서 패키지들을 관리하고 업데이트하고 Spyder 라는 IDE를 사용할 수 있습니다. 또한 Python의 매뉴얼은 잘 갖춰져 있기로 유명하죠.
여섯 번째는 차차 알아가게 될 NumPy나 SciPy, MatPlotLib과 같은 패키지들을 의미합니다. 수많은 수치 계산과 그래프 플랏에 특화되어있는 툴들입니다. 일곱 번째는 Stack Overflow와 같은 다양한 사이트들에서 충분히 확인하실 수 있습니다. IRAF와는 비교할 수 없는 양의 질답 데이터베이스가 존재하며, 천문학계 이외의 사람들이 충분히 존재하므로 IDL보다도 다양한 내용을 접할 수 있습니다.
마지막으로 장차 큰 호응을 얻을 것으로 기대되는 Julia 라는 언어라거나, Jupyter & Markdown이라는 워드프로세서 (이 머릿말도 md로 만들어졌습니다) 및 방대한 양의 데이터를 처리해야하는 미래를 생각할 때 Python은 또한 장점을 갖습니다. Markdown 덕분에 Python이 갖는 장점은 앞으로 조교 강의 노트들을 보시면서 알게 될 것입니다. 요즈음에는 비록 유료이지만 Excel에 Python을 장착하여 훨씬 학술적이고 깔끔한 그래프들을 에러 없이 그려내는 툴도 생겨나고 있습니다. Python이라는 언어를 기반으로 한 발전이 한 고비 꺾이는 데에는 앞으로 한참의 시간이 걸릴 것으로 보입니다.
몇몇 천문학자들은 일찍이 이러한 이유에서 Python의 이용을 꿈꿔왔습니다. 그리고 그러한 것이 현재 Astropy 프로젝트로 이어져오고 있습니다. Astropy는 기본적으로 FITS파일의 조작, WCS 등 천문학적 좌표계의 변환과 조작, 천문학에서 주로 사용되는 상수 및 단위계 변환, 측광 및 분광작업 툴, 천문학에서 자주 사용되는 통계 툴, 우주론 관련 계산/변환 툴 등을 포함합니다. 그 외에 Astropy affiliated 패키지라 하여 이미지를 띄우고 분석하는 (기존의 SAO ds9 기능에 IRAF의 IMEXAM 기능이 합해진 형태) Ginga(깅가) 등을 추가로 설치할 수 있습니다. Anaconda라는 플랫폼 위에서 Astropy를 관리하는 경우 업데이트가 매우 용이하고, 버그의 보완이 IRAF에 비교할 수 없이 쉽습니다. 또한 Astropy 자체적으로 아주 깔끔하고 자세한 매뉴얼과 많은 예제들을 제공하고 있습니다.
Python을 이용함으로써 생기는 부수적인 장점 중 하나는 바로 대다수의 여러분들께서 새로운 환경에 적응할 능력을 키울 수 있다는 점입니다. 어느 날 갑자기 Python이 낙후된 언어가 되고 새로운 어느 언어가 학계를 잠식한다 하더라도, IRAF와 IDL 및 Python 등 다양한 언어를 함께 배운 여러분들은 어느 환경에도 쉽게 적응할 수 있으리라 생각합니다. 또한 새로 개발될 언어는 분명하게도 Python보다 다루기 쉬우면 쉬웠지 더 어려워지지는 않을 것이기 때문에, 그러한 시기에 다양한 언어들을 사용할 수 있는 여러분들의 가치는 상대적으로 높을 수 밖에 없습니다.
그러나 이러한 Python이 아무 문제가 없는 것은 아닙니다. 많이 사용되고 있는 몇 가지 패키지들은 비록 널리 사용되고 잘 작동하는 것으로 생각되지만, 공식적으로는 아직 안정적 배포(stable release)가 되지 않은 경우가 더러 있습니다. Astropy의 핵심 패키지들은 상당히 안정적으로 구동되나, 측광 및 분광 패키지는 아직 0.x 버전입니다. 비록 Astropy 프로젝트 공식 웹사이트에서는 측광 패키지가 안정적인 상태라고 명시해 두고 있지만요.
앞서 Python이 사용되게 된 역사적 배경을 간략히 서술했습니다. 이것은 기존 IRAF나 IDL을 이용한 천관실 체계를 바꾸는 것을 생각해볼 이유로 충분히 타당하다는 것을 인지하셨으리라 생각합니다. 제가 새로운 체계로의 전환을 추구하는 기본적인 철학은 간단합니다. 교육은 미래를 대비할 능력을 키우는 것을 하나의 큰 목표로 설정해야 한다고 믿기 때문입니다.
이전과 같이 IRAF를 가르치는 것은 당연히 매우 쉽고 안정적일 수 있습니다. 하지만 시간이 감에 따라 환경이 변하고, 모든 학생들이 IRAF만 배운 뒤 나중에 연구자의 길을 선택하고 나서야 Astropy까지 스스로 찾아보고 배우게 만든다면 교육이 비효율적인 것은 아닌지 의심이 갑니다. 최근 서울대학교 전산천문학과 같은 수업들이 Python 체계로 전환중이고, 이 기회에 언어적으로 좀 더 유연한 Python 체계가 서울대학교에 자리잡을 수 있다면 훨씬 좋지 않을까 생각합니다.
좀 두려운 것은 IRAF 대 AstroPy 구도에서 아예 언어가 달라짐으로써 거대한 단절이 생길 것이 우려된다는 점입니다. CCD 생겼는데 사진건판 보는 느낌이라기엔 좀 너무하지만 대략 그렇다고 느껴집니다. 일례로 Ginga의 단어는 ds9과 묘하게 다르고 그래서 ds9에 익숙하다면 쉽게 헷갈립니다. 그렇다면 제가 교육의 일부를 맡고 돈을 받는 입장에서 해야할 일은 당연하게도 바뀌어가는 시대에 맞는 교육 체계를 구축하는 데 일조하되, 피교육자들이 이전 세대와의 소통에서 큰 문제가 발생하여 소통에 지나친 비효율과 인력의 손실이 생기지 않도록 하는 것이 아닐까 합니다. 새로운 툴을 배울 학생들 입장에서는 윗세대와 소통이 어려워질테니 불편할지 모릅니다. 그러나 그러한 고통은 cgs로부터 SI체계로의 변환에서도 똑같이 있었지요. 천문학에서 아직도 cgs가 널리 사용되는 데에는 타 분야와의 효율적 소통이 상대적으로 낮은 가중치를 가졌기 때문이라고 생각되는데, 언젠가 이는 큰 불이익이 될지도 모를 일입니다. 추가적으로 제기될 수 있는 문제는, 분명 아주 멀지는 않은 어느 미래에 Astropy나 심지어 Python자체가 과거의 유산이 되어있을지 모른다는 점입니다. 그런데 그 이후가 불투명하다거나 IRAF가 "역사적 기준(historical standard)"이라는 이유로 현대의 최전선을 경험할 기회를 충분히 주지 않게 된다면, 미래에 우리 모두가 겪어야 할 세대간 단절은 좀 더 클 것으로 예상되어 더 우려스럽습니다.
그렇게 예상하는 이유는 모든 피교육자가 해당 “경험”을 스스로 찾아 할 만큼 훌륭하지 못하기 때문입니다. 제가 대학원 초년생이던 시절, 만약 관측법 수업에 강력한 반감심이 없었다면 저와 같은 학생은 분명 IRAF 외의 것들(PyRAF 등)을 볼 생각조차 하지 못했을 것이 분명합니다. 다른 이유가 아니라 그저 제 실력에 비해 제가 해야하는 다른 일들이 워낙 많아 그것들을 소화하기도 바쁜 와중에 주변의 다른 것을 살필 여유가 없기 때문입니다. 그런 저같은 학생들이 최대한의 발전효율을 내기 위해서는 어느 교육자가 현대적 기술과 지식을 알려줄 필요가 있다고 생각합니다.
그렇다고 IRAF/ds9을 가르치지 않는 것이 아닙니다: IDL이나 IRAF/ds9 등이 편하다면 누구든 그 선택은 자유이고 IRAF의 기본적인 조작은 반드시 알아둘 필요가 있습니다. 많은 관측소에서는 아직도 IRAF를 기본으로 사용하고 있으며 (관측 도중 관측이 얼마나 잘 이루어졌는지 즉석에서 체크하도록 컴퓨터가 제공되는데, 이 컴퓨터에서 IRAF를 사용하기 좋게 세팅이 되어있는 경우가 많습니다) 이전 세대와의 소통의 용이성, 역사적 교육이라는 의미에서의 중요성 등 여러 이유가 있겠습니다. 결국 사용 언어의 자율성을 보장하는 동시에 IRAF의 기초 또한 가르치는 것은 새로운 시도가 피교육자들에게 지나친 하중으로 다가오지 않아야하며 급격한 세대간 단절을 피해야 한다는 신념에서 기인합니다. 동시에 매뉴얼의 작성은 그러한 시도가 일회성으로 끝나지 않고, 시간상 연속적이면서 부드럽게 교육방식을 전환하는 것이 필수적이라는 믿음을 근거로 합니다.
제게 남겨진 과제는 만약 이러한 시도를 하게 된다면 매뉴얼에 최대한 가독성이 좋으면서 간결하게, 그러나 중요한 내용을 충분하게 담아 그것이 다음번 피교육자 뿐 아니라 후에 조교를 맡을 누군가에게 도움이 되도록 해야한다는 것입니다. 그리고 후에 교육이라는 엄중하고 막대한 책임을 지게 될 어느 조교는 길고 지난한 고뇌와 사전조사와 끊기있는 노력으로 이 새로운 시도를 평가하여야 할 것이고, 그 이후, 앞으로의 역사를 어떻게 써나가야할지를 결정해야 할 것입니다.
비록 Astropy라는 새로운 툴을 배운 몇 세대가 그 툴을 사용하는 유일한 세대가 되어 고립될 지라도, 어느 넘어설 수 없는 불이익, 비효율, 내지는 문제점이 존재한다면, 이곳의 모든 매뉴얼은 더 이상 불필요합니다. 그것은 선행 조교가 되어있을 저의 잘못이고, 만약에 있을 그러한 사태로 인한 피해가 최소화되도록 하기 위해서라도 기존의 IRAF/ds9 체계에 대한 교육을 없앨 수 없습니다. 만약 그런 일이 발생한다면 이후의 교육은 이전과 동일한 IRAF/ds9 + IDL 정도의 체계로 다시 돌아가야할 것입니다. 그렇게 되지 않기 위해, 혹은 혹시나 이것이 잘못된 시도가 아닐지 판단하기 위한 저의 노력이 무엇보다 중요하다고 믿습니다.
여러분들에게 제공될 올 1년의 시간이 좋은 모습으로 다음 시기에 기억되고 있도록 최선의 노력을 다 하겠으나, 그것이 그렇지 못하게 되었다면 그것은 순전히 저의 잘못이니 여러분들의 냉철한 판단과 비판을 부탁드립니다.
2017년 겨울 끝자락, 서울대학교 19동에서 박윤수