인공지능이나 빅데이터 분야를 보면 많은 공개 소스 코드들이 있고 이것들을 많이 활용되고 있습니다. 그런데 전산유체역학(CFD, Computaional Fluid Dynamics) 분야에서는 많은 공개 소스들이 있음에도 불구하고 국내에서는 아직 대부분의 산업체에서 상용 프로그램을 사용하고 있습니다. 왜 그럴까요? CFD라는 것이 유체역학의 지배방정식인 Navier-Stokes 방정식을 유한체적법을 사용해서 컴퓨터로 계산하는 것이라고 볼 때, 아주 오래 전에 정립된 학문 분야이고 특별한 첨단 기술이 지속적으로 도입되어야 하는 것은 아닙니다(물론 학술적으로는 아직 많은 난제들이 있고 최신 기술들이 개발되고 있지만 산업체 응용이라는 면에서 그렇다는 것입니다). 그럼에도 불구하고 잘 사용되지 않는 것이 공개소스에 대한 오해 때문인 것 같아, 대표적인 공개소스 코드인 OpenFOAM을 중심으로 이야기해 보려고 합니다.
Open Source CFD Toolbox?
OpenFOAM Foundation이나 ESI의 홈페이지에 “OpenFOAM is free, open source software for CFD”라고 소개하고 있습니다. 예전에는 아래와 같은 “CFD Toolbox”가 포함된 로고를 많이 사용했었는데 요즘 들어 이 말을 잘 안 쓰는 것 같습니다. Toolbox라고 하면 사용자가 필요한 솔버를 만들기 위한 도구가 되고, 그냥 solftware라고 하면 포괄적이긴 하지만 그냥 갖다 쓰면 되는 것(solution)이라는 의미가 강해집니다. Foundation이나 ESI는 toolbox라는 의미를 좀 버리고 싶어 한다고 생각됩니다.
OpenFOAM은 toolbox와 solution이라는 두 가지 셩격을 모두 갖고 있습니다.
산업체에서 OpenFOAM을 solution으로만 생각해서 뭔가 부족한 면이 있다고 느끼는 것 같습니다. 일부 solver들의 안정성이 부족하다는 것, CLI(Command-Line Interface) 밖에 없다는 것 등이 대표적인 것입니다. 하지만 toolbox라는 관점에서 보면 solver, interface 등 필요한 것들을 맞춤형으로 만들어 쓸 수 있는 것이 됩니다. 직접 만들거나, 전문 기관과 협력하거나, 누군가가 공개한 것을 갖다 쓰는 방법이 있습니다. 자신들이 적용하고자 하는 분야에 OpenFOAM이 solution으로 충분한지를 판단하고, 부족한 부분이 있다면 어떻게 개발할 것인지를 계획해야 합니다.
비용에 대한 오해
공개 소스 소프트웨어의 잇점으로 가장 쉽게 떠오르는 것은 공짜라는 것입니다. 누구나 쉽게 생각할 수 있는 당연한 것이라 부연이 필요없을 것 같지만, 이와 관련해서 잘못 이해하기 쉬운 부분은 이야기해야 될 것 같습니다.
Open source와 freeware는 차이가 있습니다. Open source에서의 free는 “자유”라는 의미이고 freeware에서의 free는 “공짜”라는 의미입니다. 공개 소스 소프트웨어는 공개가 중요한 것이지 공짜라는 것은 아닙니다. 어쨌든 대부분의 공개 소스 소프트웨어는 공짜로 사용할 수 있긴 합니다. 그렇지만 돈을 내고 사용하던 상용 프로그램을 공개 소스 소프트웨어로 바꾸면 상용 프로그램 비용만큼이 절약되는 것은 아닙니다.
상용 프로그램의 가격(1년 단위의 임대 가격)은 프로그램의 사용권한에 대한 비용만 있는 것이 아니라 크게 4가지로 구성되어 있다고 볼 수 있는데요, 각각이 얼마인지는 아무도 모릅니다.
- 프로그램의 사용권한에 대한 비용 – 동시에 사용할 수 있는 개수와 병렬연산을 위한 CPU 코어 개수 당 사용료 부과
- 유지보수 – 프로그램의 설치에 대한 지원과 문제 발생시 장애대응에 대한 서비스 비용
- 기술지원 – 사용법에 대한 교육 및 기술적 애로사항 지원에 대한 서비스 비용
- 프로그램 업그레이드 – 계약 기간에 업그레이드 그냥 해 주는것 같지만 가격에 포함되어 있음
이 4가지는 산업체나 CFD 프로그램을 효율적으로 사용하기 위해 모두 필요한 것들인데, 많은 경우 첫번째 것이 전부라고 생각하기 때문에 공개 소스 소프트웨어를 사용하면 공짜라는 오해를 하게 됩니다. 공개 소스 프로그램의 subscription 계약이 첫번째 것을 제외한 비용이라고 볼 수 있습니다. 이 부분을 오해하면 공개 소스 소프트웨어를 도입했다가 오히려 비용이 더 많이 드는 결과를 초래하기도 합니다. 라이선스 비용은 조금 줄었는데 담당 엔지니어들이 투자해야 되는 시간이 훨씬 커져서 손해가 발생하는 것이죠.
프로그램의 사용권한에 대한 비용도 공개 소스 소프트웨어라고 해서 항상 공짜인 것은 아닙니다. Github나 웹에 공개된 버전을 그냥 다운로드 받아서 쓰면 공짜이겠지만, 거기에 무언가 수정된 것들을 구매하거나 프로젝트 비용을 들여 개발해야 되는 경우도 있습니다. 그러나 유료로 구매한 경우에도 소스코드를 받을 수 있기 때문에 동시 사용자수나 병렬연산을 위한 코어수에 제한을 받지는 않습니다. 이 부분이 상용 프로그램보다 비용면에서 유리한 지점이며, 사용자가 많거나 대형 HPC에서 계산해야 하는 경우 비용 상의 이점이 매우 커지게 됩니다.
결론적으로 공개 소스 소프트웨어를 잘 활용하면 비용을 상당히 줄일 수 있습니다. 그러나 전략을 잘못 수립하면 오히려 손실이 생길 수도 있기 때문에 어느 정도의 초기 투자(직원들의 시간 투자 혹은 외부 기관과의 협업)에 대한 고려가 필수적입니다.
성능에 대한 오해
비용 문제와 함께 많이 오해하는 부분이 성능입니다. 공개 소스 프로그램을 공짜라고 생각하면 싼게 비지떡이라는 속담 때문인지 자연스럽게 성능이 떨어질 것이라는 편견을 갖게 되는 경우가 많습니다. 결론부터 말하면 공개 소스 프로그램의 성능이 상용 프로그램의 성능 보다 떨어지는 것은 아닙니다.
성능에 대해서 무슨 물리모델들이 있는지를 먼저 생각하는 경우가 많습니다. 난류, 다상유동, 화학반응, 소음 등의 다양한 물리현상을 해석할 수 있는지의 관점에서 보면 OpenFOAM은 상용 코드들 보다 오히려 더 많은 기능들을 갖고 있다고 볼 수 있습니다. ESI, OpenFOAM Foundation, Extend group, 넥스트폼 등에서 공개하는 OpenFOAM 버전들 뿐 아니라 기관이나 개인들이 개발해서 공개한 소스 코드까지 생각한다면 훨씬 많은 기능을 갖고 있는 것이 맞습니다.
코드의 정확성과 안정성이 다음으로 고려되는 문제인데요. 코드의 정확성과 안정성은 별개의 문제는 아니고 격자의 품질과도 연결된 하나의 복잡한 문제입니다. 대부분의 코드들이 좋은 품질의 격자에서 안정적으로 정확한 결과를 줍니다. 안정성을 위해 뭔가를 코드에 넣는 순간 정확도에 문제가 될 수 있는 여지가 생기기 때문에 이런 것을 사용할지 말지는 사용자의 선택의 문제이죠. 상용코드는 매우 낮은 품질의 격자에서도 계산이 된다고 합니다. 그렇지만 이런 경우는 결과가 만족할 수준인지 판단하기 위해 뭔가를 또 잔뜩 해봐야 되기 때문에, 차라리 그냥 격자를 다시 만드는 것이 더 빨리 결과를 얻는 경우가 많습니다. 반면 OpenFOAM의 어떤 솔버들은 안정성에 문제가 있는데 그런 걸 고려하지 않고 만들었기 때문일 것입니다. 이 경우는 솔버의 보완이 필요합니다. NextFOAM의 솔버들은 OpenFOAM 표준 솔버들 보다 안정성에 더 많은 고려를 해서 만든 것입니다.
그 다음은 코드가 얼마나 빠른지의 문제입니다. 한번 iteration하는데 소요되는 시간과 몇 번 iteration 해야 수렴하는지가 계산 시간을 결정하는데, 이건 격자 상태와 솔버에 따라 조금씩 다르지만 큰 차이는 없는 것 같습니다. 대신 OpenFOAM의 경우는 병렬연산을 할 때 라이선스에 의한 코어수 제한이 없기 때문에 컴퓨터만 좋다면 훨씬 빨리 계산할 수 있다는 장점이 있습니다.
사용 편의성
OpenFOAM의 가장 큰 문제는 사용 편의성의 문제일 것입니다. C++, 리눅스, TUI(Text User Interface)가 대표적인 불만의 대상입니다. C++은 코드 개발자가 아니고 사용자이면 아무런 문제가 되지 않지만 리눅스는 많은 사람들에게 익숙하지는 않고 TUI는 확실히 불편합니다. 리눅스와 TUI 문제를 해결하기 위해 넥스트폼의 BARAM을 비롯한 많은 OpenFOAM 기반의 솔루션들이 있습니다. 이런 솔루션들도 상용 프로그램에 비해 사용편의성이 떨어진다는 의견도 있지만, 그건 편의성의 문제가 아니라 익숙함의 문제인 경우가 많습니다. 자기가 익숙한 프로그램보다 더 편한 건 없으니까요. 현재 익숙한 것을 포기하지 않는 한 뭔가 새로운 것을 시작할 수는 없습니다.
대부분 상용 프로그램들은 어떤 문제든 풀 수 있게 범용으로 만들어져 있지만 산업체에서는 자신의 제품만 풀 수 있으면 되니 상용 프로그램의 사용법이 불필요하게 복잡한 경우도 있습니다. 제품에 특화된 인터페이스와 프로세스를 개발한다면 훨씬 쉽게 사용할 수 있고, CFD 비전문가도 사용할 수 있게 만들 수 있습니다.
배우기가 어렵다?
OpenFOAM은 배우기가 어렵다는 의견이 많습니다. 익숙한 상용 프로그램들도 처음 배울 때를 생각해 보면 그렇게 쉽지만은 않았을 겁니다. 지나고 나면 지난 일들은 쉽게 느껴지기 마련이니까요. 그래도 OpenFOAM은 처음 접하면 많이 어렵게 느껴지는데, 소스 코드가 있다는 것도 어렵게 느껴지는 이유가 아닐까 싶습니다. BARAM과 같은 GUI 기반의 프로그램을 사용하더라도 웬지 소스 코드도 좀 알아야 될 것 같은 느낌이 있다보니 갈 곳이 멀어보여서 그런 것 같습니다. 상용 프로그램에서도 제한적이긴 하지만 사용자 정의 함수를 통해 코드를 작성해서 사용할 수 있는데 사용용 프로그램도 사용자 정의 함수까지 배운다면 OpenFOAM 못지 않게 어려울 것 같습니다. 그리고 상용코드는 판매 업체로부터 기술지원을 받을 수 있지만 공개 소스 프로그램은 그렇지 않다는 오해가 있습니다. OpenFOAM도 비용 지불을 통해 기술지원을 받을 수 있습니다.
업무에 활용할 때까지 필요한 시간
공개 소스 프로그램을 업무에 본격적으로 활용할 때까지 많은 시간이 필요하다는 것은 앞의 ‘비용에 대한 오해’ 부분에서 이야기한 초기 투자가 필요하다는 점으로 이해해야 할 것 같습니다. 전략을 어떻게 세우냐에 따라 이후 업무 효율성은 훨씬 높아질 수도 있습니다. 그리고 상용 프로그램 구매를 위한 예산 확보를 위해 소요되는 노력과 시간을 고려한다면 오히려 시간이 더 짧을 수도 있습니다.
CFD 분야에서도 전략을 잘 세우셔서 공개 소스 활용이 많아졌으면 좋겠습니다. 감사합니다.