자바가 아닌 다른 언어를 배워야 하는 이유


들어가는 말


최근 오랜만에 오키에서 신세 한탄이나 돈 문제가 아닌 기술 이야기로 활발한 논쟁이 불붙는 것을 보고 한 편으로는 반가운 마음도 들었지만, 내용에 대해서는 아쉬움이 훨씬 크게 남는 토론이었다고 생각합니다.

스칼라(Scala)를 홍보하는 분의 다소 편협한 태도와 빈약한 근거로 인해 오히려 스칼라에 대한 반감만 늘어난 것 같고, 이를 반박하는 분들의 주장을 보아도 스칼라의 장점들에 대한 오해에서 비롯된 내용이 자주 보여서 상당히 안타까웠습니다.

하지만 이 문제에 대해 본격적으로 글을 쓰기에는 바쁜 일정 탓에 많은 시간을 할애할 수 없었습니다. 그리고 무엇보다 제 자신이 아직 스칼라를 배워가는 단계라고 생각하기 때문에 스칼라나 함수형 패러다임에 대해 다른 분들에게 도움이 될만한 글을 쓸 자격이 있는지도 의문입니다.

또한, 이번 토론의 내용을 보더라도 아마 많은 자바 개발자 분들이 굳이 스칼라와 같은 생소한 언어를 새로 배워야 한다는 데 큰 공감을 하지 못하고 있다는 느낌을 받았습니다.

그래서 처음부터 진지하게 스칼라 언어의 기술적 장점들에 대한 강좌를 쓰는 것보다는 우선 시간을 내서 자바 개발자로서 자바가 아닌 다른 대안 언어를 배워야 하는 이유를 먼저 되짚어 보는 것도 의미가 있을 것 같다는 생각이 들어 글을 쓰게 되었습니다. 그런 만큼 내용에 두서가 없거나 다소 깊이가 부족하더라도 미리 양해 부탁드리겠습니다.


자바가 주류 언어가 되기까지 - 오픈소스 진영과의 불편한 동거


90년대 중반 처음 등장한 이래 많은 곡절이 있었지만, 자바 언어는 최근까지 특히 엔터프라이즈 응용프로그램 분야에서 독보적인 위치를 유지하고 있습니다. 그렇기 때문에 특히 자바의 입지가 절대적인 우리나라의 자바 개발자의 입장에서 다른 언어를 본격적으로 배워야할 필요성을 절감하기 어려운 것이 사실입니다.

하지만 우리나라의 개발 환경은 항상 세계적인 흐름을 시차를 두고 따라가는 형태로 변화해왔다는 점을 감안한다면, 최근 세계적으로 자바의 위상이 급격하게 위협 받고 있는 추세를 무시해선 안된다고 봅니다.

세계적인 웹 기술의 추세는 구글이나 페이스북 같은 몇몇 기술력 있는 기업과 오픈소스 진영을 중심으로 생겨나고 발전해 나가고 있습니다. 자바의 경우도 메이븐에 존재하는 수 많은 오픈소스 프로젝트 라이브러리가 증명하는 것처럼 오픈소스 진영의 영향력은 절대적이라고 할 수 있습니다.

하지만 자바를 중심으로 하는 오픈소스 진영은 시작부터 기존 리눅스를 중심으로 하는 오픈소스 진영과 다소 껄끄러운 관계를 유지하고 있었습니다. 여기에는 여러 이유가 있는데, 썬(Sun Microsystems) 사가 자바의 오픈소스화에 대한 약속을 몇 차례 번복했던 일도 있고, 무엇보다 근본적으로 자바가 지향하는 식의 운영체제와 무관하게 모든 것을 자바로만 거대하고 복잡하게 쌓아 올리는 접근이 일반적인 리눅스/유닉스 철학과 호환되지 않는다는 점도 크게 작용했습니다.

여기에 더해 기존 C/C++ 개발자들이 자바 언어에 대해 가지는 우월감이나 반감, 혹은 '해커'들이 이른바 '기업형 프로그래머'에 대해 느끼는 비슷한 감정 등이 더해져서 같은 오픈소스라고는 하지만 오픈소스 자바 진영과 기존 리눅스 중심의 오픈소스 진영 사이에는 묘한 감정적 괴리가 항상 존재했던 것이 사실입니다.

물론 시간이 지나면서 자바와 리눅스의 결합이 시장에서 힘을 얻고, 자바 자체도 오픈소스화 되면서 이런 반감이 어느 정도 완화되긴 했습니다. 하지만 이런 갈등이 전면적으로 부각되지 않았던 가장 큰 이유는 오픈소스 진영에 있어서 썬보다는 마이크로소프트가 보다 진정한 '악의 축'에 가까웠고, 무엇보다 엔터프라이즈 환경에서 유닉스/리눅스와 자바의 조합에 대한 마땅한 대체제가 없었기 때문입니다.

하지만 이 모든 상황은 최근 몇 년 동안 급격하게 변화하기 시작합니다.


오라클 시대의 자바, 그리고 자바 스크립트의 반격


2010년, 자바 진영을 이끌던 썬 사가 오라클에 인수 합병되면서 자바의 미래에도 어둠의 그림자가 드리우기 시작합니다. 한편, 거의 비슷한 시기에 node.jsangular.js와 같은 본격적인 자바스크립트 프레임워크 프레임워크들이 등장함으로 인해, 루비 온 레일즈(Ruby on Rails: RoR)에서 가능성을 보였던 엔터프라이즈 시장에서 자바를 밀어낼 대안이 다시 한 번 빠른 속도로 구체화 되기 시작합니다.

오라클은 자바를 인수하자마자 구글을 상대로 자바 API의 특허권을 공격적으로 사용함으로써, 가뜩이나 오라클이 관리하는 자바의 미래에 의구심을 품고 있던 기존 오픈소스 진영 개발자들의 마음을 결정적으로 자바에서 돌아서게 만듭니다.

한 편, 마이크로소프트는 닷넷(.NET)을 오픈소스로 공개하고, 역시 오픈소스로 타입 스크립트(TypeScript) 언어를 발표하면서 오픈소스 진영의 호감도를 높이는 동시에 이제 막 시작된 자바 스크립트의 추세에도 발빠르게 올라타는 대조적인 행보를 보입니다.

그 와중에 터진 브라우저 자바 플러그인의 보안 취약성으로 인한 일련의 사고 및 이에 대한 오라클의 뒤늦은 대응은, 개발자 뿐 아니라 기업의 IT 인프라의 아키텍쳐를 결정하는 데 영향을 줄 수 있는 경영자를 포함한 일반인들에게 까지 자바에 대한 부정적인 인식을 퍼뜨리는 치명적인 결과를 가져오게 됩니다.

하지만 무엇보다 자바의 입지를 크게 위협하는 것은 자바 스크립트의 급부상으로, npm으로 관리되는 자바 스크립트 패키지 수가 고작 2년만에 메이븐의 자바 라이브러리 수를 추월해버릴 정도로(참조: modulecounts.com ) 가히 폭발적인 기세로 빠르게 자바와 같은 기존 언어들의 영역을 잠식해나가기 시작합니다.

이처럼 자바가 서버 시장에서 강력한 도전에 직면한 와중에 안드로이드 덕에 모바일 시장에서는 건재한 모습을 보이고 있지만, 안드로이드를 이끄는 구글이 오라클과 자바에 대한 특허 분쟁을 경험한 당사자이며 누구보다 강력하게 자바 스크립트나 고(Go)와 같은 대안 언어에 힘을 보태고 있는 상황을 감안하면 종합적인 면에서 자바 언어의 전망은 과거 어느 때보다 어둡다고 할 수 있습니다.


자바의 미래, 그리고 대안 모색의 시기


이렇듯 자바의 입지가 급격하게 위협 받게 된 것은 최근의 일이지만, 자바 언어에 대한 대안을 찾는 시도는 훨씬 이전부터 꾸준하게 진행되어 왔습니다.

여기에는 여러 이유가 있겠지만, 무엇보다도 자바 언어는 다수 대기업이 참여하는 JCP(Java Community Process)를 통해 관리되는 통에 상대적으로 C# 등과 같은 언어에 비해 발전 속도가 너무 느리다는 것이 결정적이라고 할 수 있습니다.

예컨대, 람다식(lambda expression)을 지원하는 스칼라 언어가 처음 등장한 것은 2003년이지만 JSR(Java Specification Request)의 형태로 자바 언어에 처음 비슷한 개념이 등장한 것은 2010년이고, 이 것이 실제로 완성되어 발표된 것은 작년의 일입니다.

LINQ(Language INtegrated Query)는 2007년에 닷넷 환경에 포함되었지만, 유사한 기능이 포함된 자바의 EL 3.0은 2013년이 되서야 발표되었습니다.

스칼라나 JVM의 또 다른 대안 언어인 실론(Ceylon) 등에서 제공하는 옵셔널 타입(optional type) 또한 작년 자바 8에 포함되어 발표되었지만, 아직도 실무 환경에서 자바 6나 심지어 자바 5를 흔하게 사용하는 것을 감안하면 일반적인 자바 개발자들이 이러한 기능을 널리 사용하기 위해서는 아직도 몇 년의 시간이 더 필요할 것으로 보입니다.

무엇보다, 메이븐에 있는 수 많은 라이브러리의 API가 대부분 람다와 옵셔널 타입을 통해 개선되기까지는 이보다도 많은 시간이 필요할 것이고, 어쩌면 자바의 핵심 API 같은 경우 영원히 바뀌지 않을 가능성이 높습니다. (제가 기억하는 한 자바는 1.0 시절 이래 한 번도 핵심 API에서 deprecation을 제거한 적이 없습니다.)

한 편, 지난 십여 년간 빅데이터의 등장 및 클라우드 서비스의 일반화로 인해 어느 때보다 동시성의 문제가 중요한 화두로 대두되었고, 이러한 문제를 해결하기 위해서는 불변(immutable)의 데이터 형의 활용을 핵심으로 하는 접근이 대세로 떠오르게 되었습니다.

이러한 맥락에서 함수형 패러다임의 접근 방법이나 메시징 기반 아키텍쳐가 빠르게 입지를 넓혀 나가기 시작했고 스칼라나 아카(Akka)와 같은 대안 언어나 기술들이 각광 받게 되는 배경으로 작용하게 되었습니다.

하지만 20년 가까이 발전하면서 수 많은 라이브러리와 프레임워크로 생태계를 구축한 자바를 하루 아침에 대체하는 것은 결코 쉬운 일이 아닙니다. 따라서 JVM 플랫폼 자체와 그 위에서 돌아가는 여러 라이브러리는 그대로 두고, 컴파일을 통해 클래스 파일을 생성하는 원본 언어만을 대체하는 접근이 널리 쓰이고 있으며, 스칼라, 실론, 코틀린(Kotlin), 그루비(Groovy) 등 수 많은 자바의 대안 언어들이 이와 같은 방식을 채택하고 있습니다.


대안 언어를 배워야 하는 이유?


앞서 언급한 대로, 자바 언어의 입지가 빠르게 위협 받고 있고, 이에 대한 대안 또한 활발하게 연구되고 있지만 상대적으로 우리나라, 특히 SI 환경의 개발자들이 이러한 변화를 체감하기까지는 아직도 상당한 시간이 필요할 것으로 보입니다.

그런 환경에서 "당장 필요한 것도 아닌데 굳이 다른 언어까지 배워야 하는가?"하는 의문이 드는 건 어찌보면 자연스러운 현상입니다.

하지만 우리나라의 IT 환경은 안타깝지만 항상 세계적 흐름에 대해 종속적으로만 움직여왔습니다. 개인적으로 처음 스트러츠(Struts)를 도입했을 때도 많은 반발을 경험했고, 이후 스프링(Spring Framework)으로 이행했을 때도 비슷하게 그 필요성에 의문을 제기하는 목소리는 항상 있어왔지만, 결국 몇 년의 시차를 두고 해외의 추세를 고스란히 따라가는 결과가 되었을 뿐입니다.

이미 SI에서 오랜 경력을 쌓고 안정된 일자리를 기술적 호기심보다 중시하는 분들이라면 아마도 새로운 언어를 배우기 보다는 자바를 계속 하는 것이 올바른 선택이 될 것입니다. 설사 우리나라에서도 자바가 몰락하고 대안언어나 자바스크립트가 대세가 되더라도 아마도 그런 개발자들이 은퇴하기 이전에 자바 일거리가 끊기진 않을 가능성이 높습니다.

반면 아직 자바 경력이 오래지 않았거나, 언제라도 스타트업이나 기술 중심 기업, 혹은 해외 취업등으로 일자리를 옮길 의향이 있는 분들, 혹은 SI를 하더라도 아키텍트 수준까지 오르는 것을 목표로 하는 개발자라면 기술 추세의 변화에 보다 민감하게 반응할 필요가 있고, 지금 시점에서 자바 아닌 다른 언어를 배우는 것은 선택이기 보단 거의 필수에 가까운 상황이 되었음을 인식할 필요가 있다고 봅니다.

사실 한 가지 언어만 사용하면 서 다른 언어의 장점을 이해하기는 무척 어렵습니다. 예컨대 자바 언어의 이넘(enum)이나 예외(Exception) 같은 장치들도, 아마 그런 개념이 없는 언어에 익숙한 개발자에게 소개하면 "그냥 문자열 비교하는 게 더 편한데 왜?", "실패하면 그냥 -1을 반환하면 되잖아?"와 같은 반응을 경험하기 십상일 것입니다.

하지만 그런 개념들이 그 언어 고유의 디자인 철학을 만들고 이를 통해 해당 언어를 사용하는 개발자들이 공유하는 원칙(best practice, principles)으로 자리 잡는 것을 감안하면, 자바보다 이후에 등장한 언어들이 새로 도입한 개념들의 중요성을 간과하는 것은 어리석은 일입니다.

더구나 스칼라나 해스켈 등의 함수형 언어적 특성은 이러한 단순한 기능이 아닌 객체지향과 같은 패러다임의 변화이고, 그 만큼 간단히 이해하기 어렵지만 더욱 큰 함의를 지닌 여러 새로운 개념들을 소개하기도 합니다.

자바가 반드시 나쁜 언어는 아니지만, 이러한 새로운 언어들을 공부하면 어렵지 않게 자바만의 '단순 문자열 비교'나 '-1을 반환'하는 시대에 뒤떨어진 여러 관습들을 깨닫게 될 것입니다.


어떤 대안 언어를 선택할 것인가?


사실 냉정하게 이야기하자면 현 시점에서 자바 언어에 대한 대안을 찾는다면 스칼라 같은 JVM 기반 언어 보다는 자바스크립트를 고르는 것이 가장 합리적인 선택이라고 할 수 있습니다. 어떤 언어를 사용하건 클라이언트 환경은 브라우저를 주요 플랫폼으로 고려할 수 밖에 없고, 자바스크립트는 이미 '웹 시대의 어셈블리'라고 불리울 정도로 브라우저 환경에서 유비쿼터스한 존재감을 확보하고 있습니다.

따라서, 단순히 화면에 효과를 주고 Ajax로 내용을 갱신하는 수준을 넘어 클라이언트 환경에서도 자바 스크립트를 활용하는데 있어서 점점 수준 높은 기술을 요구한다면 그런 기술력을 갖춘 개발자나 회사들은 중복 투자없이 동일한 기술을 서버측에도 적용하기를 희망하는 것은 자연스러운 현상입니다.

반면에, 이렇듯 점점 개발 규모가 커지고 복잡할수록 동적 언어로서 자바스크립트의 단점이 장점보다 더 부각되는 것을 감안하면, 아마도 웹 기술의 미래는 컴파일을 통해 자바스크립트를 생성할 수 있고 (transpiler) 서버에서도 편리하게 사용할 수 있는 생태계를 갖춘 정적인 언어가 대세가 되지 않을까 생각합니다.

그런 면에서 node.js 위에서 구동되는 타입 스크립트나 고와 같은 언어가 앞으로 대세가 될 수 있는 후보군이라고 조심스래 예상해 볼 수도 있을 것입니다.

하지만 이를 위해서 이러한 자바스크립트 기반 기술들은 JVM 기반 기술과 치열하게 경쟁해야할 것으로 보입니다. 앞서 흐름에서 뒤쳐진 자바 언어를 비판했지만, 상대적으로 언어가 아닌 플랫폼 자체, 즉 JVM과 그 위에서 구축된 수 많은 라이브러리와 프레임워크의 생태계는 여전히 꽤나 강력한 경쟁력을 유지하고 있습니다.

플랫폼 독립성은 변화된 환경에서도 여전히 중요한 개념이며, 20년 가까이 썬의 기술력이 집약된 결과 성능 면에서도 아직까지는 기타 대안들에 비해 무시 못할 우위를 유지하고 있기도 합니다.

따라서, JVM 환경을 버리지 않으면서 최근 기술 동향을 보다 적극적으로 반영하는 대안 언어를 찾는 것은 여전히 유효한 접근이며, 그런 관점에서 스칼라나 실론 등 JVM에서 구동되며 기존 자바 라이브러리를 그대로 활용할 수 있는 언어들에 주목할 필요가 있습니다.

사실 JVM에서 구동되는 언어는 자바와 스칼라 이외에도 매우 다양하게 찾아볼 수 있습니다(위키 백과 참조 ). 하지만 이들 중 스칼라(Scala.js ), 실론, 코틀린 등 소수만이 자바스크립트로 컴파일해서 브라우저에서 구동할 수 있으며, 또한 자바스크립트에 비해 정적인 언어의 장점을 극대화하기를 원한다면 그루비와 같은 동적인 언어는 좋은 선택이 되지 않을 것입니다.

이러한 점을 종합했을 때 남은 언어들 중 상대적으로 스칼라가 실론 등에 비해서는 훨씬 넓은 저변을 확보하고 있으며 최근 기술적 추세가 된 이벤트 중심 아키텍처나 함수형 접근 등에 보다 최적화된 특성을 보이는 점을 감안하면, 자바의 대안 언어를 찾는 개발자가 스칼라 언어를 우선적으로 고려하는 것은 합리적인 선택이될 수 있다고 봅니다.


글을 마치며


마음 같아서는 논란이 되었던 글에서 언급된 근거들 보다는 좀 더 설득력 있는 내용으로 스칼라의 기술적 장점에 대해 논해보고 싶다는 생각이 듭니다. 하지만 제가 그런 글을 쓸 수 있을 만한 시간적 여유나 기술적 식견을 갖추고 있는 지는 스스로 상당히 의문이 드는 상황이기 때문에 지금 시점에서는 확실한 말씀을 드리긴 어려울 것 같습니다.

하지만 이런 식으로 기술 외적인 측면에서 자바 이외의 언어를 배워야 하는 이유에 대한 생각을 공유해서 이전처럼 무의미한 언어 간의 자존심 대결 대신 좀 더 차분하고 유익한 논의를 이끌어 낼 수 있다면 그 자체로 어느 정도 의미는 있는 시도가 되었으면 하는 바램이 있습니다.

긴 글 읽어 주셔서 감사드리며, 혹시 앞으로 스칼라에 대해 기술적인 이야기를 할 기회가 있다면 계속 관심을 가지고 지켜봐 주시기를 부탁 드리겠습니다.


최근, 미국의 오픈소스 (Open Source) 기업이 업계 최초로 매출 20 달러 ( 2 3000 억원) 매출을 달성했다는 뉴스가 나왔다. 또한, 기업들의 수요 증가로 매년 자릿수 이상 성장을 하고 있다. 세계적인 불경기의 영향으로 올해 소프트웨어(SW) 시장이 크게 위축된 가운데, 오픈소스 경비 절감과 연관된 분야는 성장세를 이어가고 있다는 소식이 연일 보도되고 있다.

하지만 이러한 흐름이 장점만을 지니고 있는 것은 아니다. 지속적으로 저작권 관한 혼란이 발생하고 있는 것이다. 지난해 초반, 오픈소스 프로젝트를 운영하는 비영리단체 소프트웨어자유관리단 (SFC) 세계적인 가상화 전문업체 VM 웨어를 저작권 침해를 이유로 독일 법원에 제소한 사건도 있었다. 이렇듯, 전세계적으로 오픈소스가 확산되는 추세에 맞춰 계약·저작권 위반 관련 분쟁이 늘고 있으며 우리나라 SW 업체들도 이와 관련된 법적분쟁에 잠재적으로 노출돼 있는 상황이다. 특히, 국내 SW 업체들 중에는 오픈소스 라이선스 규약을 지키지 않고, 무료라고 생각하는 업체들도 있다. 스마트폰과 태블릿용 애플리케이션 경우 오픈소스만으로 제작이 가능한 것도 상당수 있는데다, SW 업계에서는 안드로이드 앱의 90%, iOS 앱의 절반 가량이 오픈소스를 활용하는 것으로 추정하고 있다.

 

양날의 검과 같은 오픈소스’, 특징과 우리가 가지고 있는 오해들, 그리고 활용상 주의점에 대해 락플레이스의 윤종민 수석을 통해 알아보자.

 

 

< 락플레이스 윤종민 수석연구원 >

 

Q: 오픈소스 (Open Source) 언제부터, 어떻게 생겨난 것인가요?

 

1960 년대는 IBM360 으로 대표되는 메인프레임이 지배하던 시대였습니다. 당시에는 소프트웨어와 하드웨어가 밀접하게 결합 (bundling) 되어 있었기 때문에 특정 기종을 위해 만들어진 소프트웨어는 다른 기종에서 작동하지 않았죠. 이때 IBM 소프트웨어 소스코드를 하드웨어와 함께 제공했고, 운영체제 소프트웨어의 소스코드를 폐쇄하지 않았습니다. 그러나 IBM 반독점법 패소에 대한 대응방안의 하나로 소프트웨어를 하드웨어와 분리(unbundling) 하면서 소프트웨어 자체가 중요한 산업이 되었고, 기업들간의 경쟁이 심화되면서부터 소프트웨어의 소스코드는 기업의 비밀이 되었습니다. 그리고 모든 기업들에게 소스코드는 경쟁우위를 보장해주는 기술자원으로 변하였죠.


이러한 흐름의 다른 한쪽에서는 소스코드를 공개하는 새로운 흐름이 형성되고 있었습니다. 1969 AT&T 벨연구소에서 근무하고 있던 톰슨 (Ken Thompson) 개인적인 연구를 수행하기 위해 유닉스 (Unix) 라는 운영체제를 만들었는데요. 운영체제는 C 라는 새로운 고급 언어로 작성되었는데, 이는 하드웨어에 종속되지 않는 특징을 지니고 있었습니다. 이로 인해 연구소가 아닌 곳에서도 유닉스를 사용할 있게 되었고, 이렇게 개발된 유닉스의 소스코드는 주로 연구기관을 중심으로 배포되었습니다.


1980 년대 들어 유닉스는 전세계의 대학이나 연구기관으로 퍼져 나갔으며, 이러한 경향으로 인해 기업들은 유닉스가 시장성이 있음을 인지하고, 유닉스 기종을 만들기 시작했습니다. 이로 인해 유닉스는 상업화의 길을 걷기 시작했죠. 1984 독점금지법 관련해서 AT&T 분할이 이루어지면서 AT&T 컴퓨터업계에 진출할 있게 되었는데요. 과정을 통해 AT&T 과거 거의 무료로 소스코드를 공개하던 방식에서 유닉스의 상품화로 입장을 바꾸어, 가격도 오르고 소스 코드 역시 엄격하게 관리되어 이상 개방되지 않게 되었습니다.


이렇게 유닉스 분야에 상업화 바람이 불면서 유닉스 초기에 존재하던 활발한 소스코드 공개 문화는 사라져 버리게 되어, 결국 제각각이 되어버린 유닉스들은 점차 폐쇄적으로 바뀌어 호환성을 갖지 못하게 되는 상태까지 이르게 됩니다.


유닉스의 상업화 경향이 강화되면서 이에 대한 반발의 움직임으로 자유소프트웨어 운동이 추진되기 시작했는데요. 폐쇄적으로 진행되어 가는 상업용 유닉스의 흐름과는 별개로 자유소프트웨어 (Free Software) 개발되기 시작한 것입니다.


1983 경에 시작된 GNU 프로젝트는 리차드 스톨만 (Richard Stallman) 주도하였는데요. 프로젝트의 목표는 기술적으로 완벽한 유닉스 호환 소프트웨어 체계를 개발하는 이었습니다. 그러나 GNU 기술적으로 유닉스와 같지만, 사용자들에 자유를 준다는 점에서 유닉스와는 본질적으로 달랐습니다 . 결국 사회적 측면에서 , GNU 프로젝트는 기술적으로는 동등하지만 사회적으로는 완전히 다른 소프트웨어를 개발하는 것이었죠. 스톨만이 추구한 것은 사적 독점 소프트웨어 사회체계 맞서 소프트웨어를 공유하고 협력하는 공동체를 만들고, 궁극적으로는 사적 독점 소프트웨어 완전히 극복하는 것이었습니다. 그래서 스톨만은 프로젝트를 수행하기 위해 1985 자유 소프트웨어 재단(Free Software Foundation)’ 설립하였습니다.


< 그림 1> 자유 소프트웨어 재단 (Free Software Foundation) 로고

 

자료 : www.gnu.org

 

자료 : www.fsf.org

 

여기서 자유 다음 가지의 의미를 지닙니다.

첫째, 어떤 목적으로도 프로그램을 가동시킬 있는 자유

둘째, 필요에 맞게 소프트웨어를 수정할 자유

셋째, 무료 또는 유로로 복사본을 재배포할 있는 자유

넷째, 전체 공동체가 혜택을 있도록 프로그램의 수정본을 배포할 있는 자유


한편, 이와 같은 공공의 영역에 위치하고 있는 자유 소프트웨어의 약점은 누군가 그것을 사유 소프트웨어로 사용할 가능성이 있다는 점일텐데요. 문제를 해결하기 위해 스톨만은 저작권에는 반대하지만, 그것을 이용하여 저작권에 대응하는 GPL(General Public Licence) 개발하였습니다. GPL 해당 프로그램을 마음대로 복사, 배포, 수정할 있으나, 수정된 프로그램의 소스는 반드시 공개되어야 한다는 라이센스죠.


GNU 프로젝트는 여러 가지 기술을 개발했으나, 1990 년대 초까지 운영체제의 핵심기능을 담당하는 커널 개발이 지지부진한 상태로 진행되고 있었습니다. GNU 독립된 운영체제로 완성되기 위해서 커널은 반드시 필요한 것이었는데요. 문제는 리눅스 (Linux) 라는 프로그램이 개발되어 GNU 프로젝트에 합류함으로써 해결되었습니다. 리누스 토발즈 (Linus Benedict Tovalds) 유닉스를 개조하던 끝에 새로운 커널을 개발한 것이죠. 1992 년에 새로운 커널이 불완전했던 GNU 체계와 결합하면서 완전한 자유운영체제인 GNU/Linux 완성되었습니다.

 

< 그림 2> GNU/Linux 로고

 

자료 : http://www.howopensource.com/2012/12/linux-and-gnulinux/

 

리눅스가 발전하면서 자유소프트웨어 운동도 발전하였는데, 과정에서 자유소프트웨어 운동 내부에서도 분화가 이루어지기 시작했습니다. 이상주의적이고 도덕적인 스톨만의 입장에 대해서 실용주의적 관점에서의 비판이 이루어지기 시작한 것입니다.


자유소프트웨어 운동을 주도해왔던 스톨만은 공유와 협동의 문화에 입각해서 소프트웨어를 개발해야 하며, 사적 이익과 독점을 추구하는 산업체 주도의 문화에 반대해야 한다고 역설했습니다. 도덕적인 측면에서 자유소프트웨어의 개발을 주장했던 것이죠. 그러나 자유 소프트웨어의 정신은 존중하지만, 스톨만의 도덕적이고 이상주의적 운동방식에 대해 비판적인 입장을 취하는 집단들이 형성되기 시작했습니다.


새로운 접근의 논리적 근거는 에릭 레이몬드 (Eric Raymond) 성당과 시장 (Cathedral and Bazaar)’ 이라는 논문이 발표되면서 이루어졌는데요. 글은 리눅스를 개발하는 방식이 성공적인 결과로 귀결되었는지를 분석하고, 분석결과를 자신이 참여한 오픈소스 프로젝트를 통해 검증한 글입니다. 리눅스 오픈소스 소프트웨어 기술 개발에 대해 인류학적 접근 시도한 글이라고 있죠


레이몬드는 GNU 프로젝트에서 리눅스가 수행한 기능과 역할보다도, 리눅스가 개발되고 개선되는 방식에 주목했습니다. 리눅스의 개발 방식은 스톨만이 주도한 GNU 프로젝트의 개발 방식과는 매우 다른 것이었죠. 레이몬드에 따르면, 스톨만이 주장하는 방식은 탁월한 능력을 가진 전문가들이 복잡한 프로그램을 개발하기 위해 위대한 고립 속에서 주의 깊게 작업하는 것과 유사했습니다. 이것은 중세의 성당 (Cathedral)’ 건축하는 것과 유사한 접근 방식이었는데요. 그러나 리눅스 개발되는 과정은 마치 시장 (Bazaar)’ 에서 여러 사람들이 모여 어지럽게 뒤섞여 제품을 개발하는 방식을 취했다고 주장하며, 바로 이러한 방식이 리눅스의 성공을 가져온 것이라고 의견을 펼쳤습니다.


그는 충분히 많은 베타테스터(β tester) 공동 개발자가 있으면, 거의 모든 문제들은 빨리 파악될 것이고, 중에는 쉽게 고치는 사람이 있게 마련이다 라는 사실을 지적하면서, 불완전한 소프트웨어를 자주 빠르게 발표하여 수많은 사람들이 버그를 수정하는 방식에 주목하였습니다. , 그는 리누즈 토발즈가 리눅스를 만들었다는 사실보다, ‘리눅스의 개발 모델 만든 것에 의미를 부여하였습니다.


레이몬드의 발표는 프로그래머와 업계에 커다란 반향을 일으켰는데요. 특히 1998 1 넷스케이프 사가 레이몬드의 논리를 수용하여 넷스케이프 커뮤티케이터 소스코드를 공개한다고 발표하였습니다. 넷스케이프사의 결정은 스톨만이 주장하는 자유소프트웨어 운동 과는 입장을 달리하는 운동을 형성하는 직접적인 계기가 되었죠. 레이몬드와 그의 입장에 동의하는 사람들은 이러한 오픈소스운동 관리하기 위해 ‘Open Source Initiative’ 라는 조직을 결성하였습니다. 자유소프트웨어의 이념적 측면보다는 그것이 개발되는 방식에 초점을 맞추는 실용적 접근을 취하는 이들은 산업체와의 관계에서도 스톨만과는 다른 입장을 취하는데요. 이들은 자유소프트웨어는 산업계는 물론이고, 개발자에도 경제적인 보상을 제공할 있어야 한다 주장하고 있습니다. 스톨만은 산업계와의 협력을 거부하면서 폐쇄적인 전략을 취하고 있으며, 소프트웨어의 개발자에게도 도덕적인 대의에 협력할 것을 요구한다고 파악하는 것이죠. 이데올로기적 관점이 아니라, 굳건한 실용적 기반위에 자유소프트웨어가 있어야 한다는 것이 이들의 주장입니다.


운동의 흐름을 종합해 보면 다음 < 1> 같이 정리할 있으며, 결국 자유소프트웨어는 원칙에 입각한 소스코드의 자유로운 사용이라는 측면을 오픈소스 소프트웨어는 사회적 실용성에 중심을 두고 소스코드의 공개라는 측면을 강조한다고 있다.

 

< 1> 자유 소프트웨어 운동의 분화


 

Q: 오픈 소스의 범위와 이에 대한 정의에도 많은 혼란이 있는 것으로 알고 있는데요,

    정확히 오픈소스란 무엇인가요?

 

오픈소스 소프트웨어 소스코드를 공개한 상태로 소스코드를 누구나 자유롭게 개작 개작된 소프트웨어를 재배포할 있도록 허용된 소프트웨어를 말합니다.


하지만, 소스코드가 공개 되어 있다고 하여서 이를 오픈소스 소프트웨어라 하지는 않는다는 것이 중요합니다.


오픈소스 소프트웨어는 누구라도 소스코드를 읽을 있고 사용자가 능력이 있다면, 각종 버그의 수정은 물론이고 그것을 개조하여 기능을 추가할 있으며, 누구나 소프트웨어의 개발에 참여할 있죠. 따라서 오픈소스 소프트웨어는 프로그램을 복제하여 배포할 있는 권리’, 소프트웨어의 소스코드에 접근할 있는 권리’, 프로그램을 개선할 있는 권리 개발자에게 보장한다는 특징이 있습니다.

 

< 그림 3> 오픈소스와 관련된 개념들


자료 : 구글 이미지

 

그렇기 때문에 오픈소스란, 단지 소스 코드에만 국한되는 용어가 아닙니다. 오픈소스 소프트웨어의 배포 조건은 OSI(Open Source Inititive) 에서 오픈소스 정의 (OSD, Open Source Definition) 규정하고 있으며, 이는 다음과 같습니다. (아래 10 가지)

1. 자유 배포 (Free Redistribution)

특정한 소프트웨어의 라이센스에는 해당 소프트웨어의 일부나 전부가 다수의 프로그램으로 구성되는 배포판의 일부로 포함되어 재배포되지 못하도록 배포나 판매상의 제한을 설정할 없다. 또한 이러한 종류의 배포판에 대한 판매나 양도에 있어서 별도의 라이센스 비용을 징수할 없다.

2. 소스코드 공개 (Source Code Open)

프로그램 저작물에는 반드시 소스 코드가 포함되어야 하며, 컴파일 형태 뿐만 아니라 소스코드의 배포 또한 허용되어야 한다. 만약 소스코드를 제외한 상태로 배포하고자 한다면 일반적으로 통용되는 매체를 이용해서 제작 실비에 준하는 비용으로 소스 코드를 제공해야만 한다. 경우 가장 바람직한 방법은 인터넷을 통해서 소스 코드를 무료로 다운로드 받을 있도록 하는 것이다. 소스코드는 프로그래머들이 개작하기에 용이한 형태로 제공되어야 하며, 고의로 복잡하고 혼란스럽게 만들어진 형태와 선행 처리기나 번역기에 의해서 생성된 중간 형태의 코드는 허용되지 않는다.

3. 2차적 저작물 (Derived Works)

라이센스에는 프로그램 원저작물의 개작이나 이를 이용한 2 프로그램의 창작이 허용되어야 하며, 이러한 파생적 프로그램들은 최초의 프로그램이 갖고 있던 라이센스의 규정과 동일한 조건하에서 재배포될 있어야 한다.

4. 소스코드 수정 제한 (Integrity of The Author's Source Code)

빌드 과정을 통해서 프로그램을 개작할 목적으로 소스 코드와 패치 파일을 함께 배포할 경우에는, 정상적인 빌드를 보장하기 위해서 라이센스 안에 소스코드의 수정을 제한하는 항목을 추가할 있다. 그러나 이러한 경우에도 수정된 소스 코드를 이용해서 만들어진 소프트웨어에 대한 자유로운 배포를 허용해야 하며, 수정된 소스코드를 통해서 만들어진 2 차적 프로그램을 원래의 프로그램과 구별하기 위해서 별도의 이름과 버전을 사용할 것을 요구하는 항목을 추가할 있다.

5. 개인이나 단체에 대한 차별 금지 (No Discrimination Against Persons or Groups)

라이센스는 모든 개인과 단체에 대해서 동일한 기준으로 적용 되어야 한다.

6. 사용 분야에 대한 제한 금지 (No Discimination Against Fields of Endeavor)

라이센스 안에 특정한 분야에 종사하는 사람에 대한 프로그램 사용상의 제한을 설정할 없다. 예를 들면, 유전연구나 상용 사업체에서는 해당 프로그램을 사용할 없다는 등과 같이 특정한 분야에 대한 사용을 금지하는 제한을 설정해서는 안된다.

7. 라이센스의 배포 (Distribution of License)

프로그램에 대한 권리는 반복되는 배포에 따른 별도의 라이센스 승인이나 양도 과정 없이도 프로그램을 배포 받은 모든 사람에게 동일하게 적용된다.

8. 라이센스 적용상의 동일성 유지 (License must no be specific to a product)

프로그램에 대한 권리는 반복되는 배포 과정에서 특정한 배포판에 포함되어 있는 상태로만 유효하지 않고, 모든 배포 단계에서 동일한 효력을 갖는다. 만약, 특정한 배포판에 포함되어 있던 프로그램을 독립적으로 사용하거나 재배포한다면 해당 프로그램을 배포 받는 사람은 프로그램이 포함되어 있던 최초의 배포판 상태에서 발생된 권리와 동일한 권리를 갖는다.

9. 다른 라이센스의 포괄적 수용 (License must not contaminate other software)

라이센스에 오픈 소스 소프트웨어와 함께 배포되는 소프트웨어에 대한 제한을 설정해서는 안된다. 예를 들면, 동일한 매체를 통해서 배포되는 소프트웨어는 모두 오픈소스 소프트웨어여야 한다는 제한으로 인해서 다른 라이센스 기준을 따르는 소프트웨어가 함께 배포될 있는 형태를 금지해서는 안된다.

10. 이용허락의 기술 중립의무  (License Must Be Technology-Neutral)

이용허락 규정이 어떠한 개별 기술이나 인터페이스 형태를 단정해서는 안된다.

이는 이용허락자와 피이용허락자 사이의 계약 성립을 위해 명시적인 동의 표시를 요구하는 것을 막기 위한 것이다. 소위 '클릭랩 (click-wrap)' 이라 불리우는 강제 조항은 FTP 다운로드나 CD-ROM 수집물, 미러링 같은 중요한 소프트웨어 배포 방식과 상충하며, 이런 강제 조항은 코드 재사용을 가로막는다. 오픈소스 정의를 따르는 이용허락은, ( ) 클릭랩 다운로드를 지원하지 않는 웹이 아닌 접근 수단을 통한 소프트웨어 재배포와, ( ) 팝업 대화 창을 지원할 없는 그래픽 사용자 인터페이스 (GUI: Graphical User Interface) 아닌 환경에서 이용허락을 적용할 코드가 ( 또는 이러한 코드의 재사용 부분이 ) 실행될 가능성을 허용해야만 한다.

이와같이, 위에서 언급한 10 가지의 조건을 충족해야만이 오픈 소스 소프트웨어라 있습니다.

 

Q: 오픈소스와 항상 함께 따라다니는 용어가 바로 저작권 혹은 특허 한데요,

     이와 관련한 주의사항이 있다면?

 

먼저 알고 계셔야 하는 개념이 있는데요, 바로 저작권 특허 차이점입니다.  


저작권 정신적인 분야의 창작을 의미하는 저작물 보호하는 권리입니다. 정당하게 얻어진 저작물에 의해 허용되는 보호는 저작물의 표현만으로 범위가 정해지는데요. 보호 범위는 저작물에 의해 표현된 아이디어, 개념, 또는 원리까지 미치지는 않습니다.


반면 , ‘특허 발명 창작에 대한 권리 이며, 특허법은 권리를 보호하여, 법에 규정된 특정 기간 동안 그들을 사용할 독점권을 특허권자에게 부여한다는 특징을 가집니다. , 다른 사람은 특허권 소유자의 허락 없이 특허를 실시’(, 특허된 발명을 이용) 없는 것이죠.


저작권과 특허권은 서로 상이한 방식으로 획득되는데요.   저작권자는 저작물이 완성된 시점부터 자동적으로 보호 받을 있지만, 특허의 독점적 이용에 관한 권리를 획득하기 위해서는 출원 하여야 하고 성공적인 후속 심사 등록 절차 거쳐야 합니다.

보호기간 역시 상이한데요. 저작권의 보호기간은 원칙적으로, 저작자의 수명에 50 년을 더한 것으로서, 연장이 불가능한 반면, 발명 특허는 20 년의 특허 보호기간이 부여됩니다.


글에서 이야기한 오픈소스 라이선스, 소스 이용 허락 지금 이야기고 있는 저작권 형태로, 소프트웨어가 만들어져 배포되는 순간 자연 발생하여 적용이 된다 점을 분명히 숙지하고 있어야 함을 다시 한번 강조하고 싶습니다

ICT 산업에 종사하지 않는 사람들도 알파고의 영향으로 인공지능 (Artificial Intelligence) 대한 관심도가 높아지고 있다. 인공지능은 인간의 학습과 추론, 지각, 언어 능력을 소프트웨어로 구현한 기술이다.

이미 오래 전에 알려진 인공지능은 특정 분야에서 어느 정도 성과를 냈지만 실제 인간의 지능과 차이를 보여 크게 발전하지는 못했다. 하지만, ICT 기술의 발달은 인공지능에 대한 연구를 급속히 이끌었고, 최근에는 인공지능의 가시적인 성과가 다른 산업에 막대한 영향을 미칠 것으로 예측된다.

이번 공학트렌드는 인공지능의 분야로 최근 주목 받고 있는 러닝에 대해 살펴보겠다. 러닝에 대한 정확한 정의와 학습 방법의 유형을 이해하고, 최근에 적용된 사례를 살펴보면서 러닝을 활용하는데 좋은 가이드가 되기를 기대한다.


딥 러닝의 정의

딥 러닝은 인간의 신경망 (Neural Network) 이론 기반의 인공 신경망 (ANN; Artificial Neural Network) 의 일종이다. 입력층(Input layer)과 출력층(Output layer), 그 사이에 하나 이상의 중간층 (Hidden layer) 을 갖고 있는 계층 구조 (Layer Structure) 로 구성된다 ( 그림 1 참조 ).


< 그림 1> 신경망 계층 구조


인공 신경망 (Artificial Neural Network)

사람의 뇌는 250 억 개의 신경 세포 (Neuron) 로 구성되어 있고, 신경 세포 간 신호를 전달하며 정보를 교환한다. 인공 신경망(ANN)은 인간의 뇌를 모방하여 만든 수학적 모델이고, 뇌의 신경망에 대응하는 노드(Node), 입력(Input), 출력(Output), 가중치(Weight) 속성을 가지고 있다( 1 참조).


< 1> 인공 신경망의 속성

구분

설명

노드 (Node)

신경 세포

입력 (Input)

다른 세포로부터 신호를 입력

출력 (Output)

다른 세포에게 신호를 출력

가중치 (Weight)

입력과 출력을 연결해주는 연결부

 

뉴런은 다른 여러 뉴런들과 거미줄처럼 연결되어 상호 작용을 하게 된다. 이를 그래프로 표시할 수 있으며, 이를 인공 신경망 모델이라고 한다. 인공 신경망 모델에서 각 노드는 뉴런을 나타내며, 각 노드를 연결하는 연결부는 뉴런 간의 가중치 (연결강도 )를 나타낸다 (그림 2 참조 ).

 

<그림 2> 인공 신경망 가중치


<그림 2> 를 살펴보면, 다른 노드에서 값을 받아 가중치를 반영하여 입력 값을 산출하는데 이값이 노드에 전달된다. 학습해야 할 문제가 복잡해지면 중간층의 개수가 늘어나는데, 이 것을 심층 신경망 (Deep Neural Network) 이라 하고, 이 학습 과정을 딥 러닝이라고 말한다.


< 그림 3> 인공 신경망 모델의 예


<그림 3> 살펴보면, 예를 들어, 자동차가 입력되면 노드 간의 가중치에 따라 출력노드가 “car_mag” 결정되는 것이 정상이다. 만약, 다른 것이 선택된다면 가중치 값을 조절해서 정상적인 선택이 때까지 다시 학습한다. 인공 신경망을 통해 여러 마리 고양이를 입력하여 고양이로 출력되도록 학습 시켰다면 사람이 보는 것처럼 다른 고양이를 입력해도 고양이라고 인식한다.

심층 신경망의 경우, 학습 해야 하는 계층이 많아지면 너무 많은 학습 시간이 소요되거나 학습에 필요한 데이터가 부족했고 제대로 동작하지 않는 경우도 많았다. 과거 인공 신경망이 좋은 기술인데도 외면 받는 이유였다. 하지만, 최근에 빅데이터로 인해 충분한 학습 데이터가 확보되고 컴퓨터의 처리 속도가 높아져 학습 시간이 대폭 줄어들면서 개선된 학습 알고리즘이 나오기 시작했고 러닝은 재조명 받기 시작했다. 인공 신경망에서 사용되는 계산식은 공학트렌드에서는 언급하지 않으니 아래 사이트를 참고한다.

 

 

< 참고사이트 >

인공 신경망에서 출력 값을 계산하는 방법

프로그래밍 언어별 딥러닝 라이브러리 정리

 

딥 러닝의 중요도

오래 전부터 인공지능 이론과 기계가 만들어지면서 다양한 산업에 인공지능이 활용되었지만 인공지능의 내부 로직을 살펴보면, 대부분 입력에 따른 출력이 정해진 매트릭스 형태였다. 다양한 경우의 수를 미리 정해두고 입력에 따라 정해진 결과를 출력하기 때문에 스스로 판단하는 기능은 부족했다. 이런 점에서 러닝은 기존의 인공지능과 명확한 차이가 있다. 러닝의 향후 발전이 주목되는 이유다.

 

 

딥 러닝의 역할

러닝의 가장 중요한 역할을 본다면 학습에 의한 예측이다. 사람의 경우, 학습을 해도 어느 시점부터는 잊어버리지만 기계에 의해 학습되어 저장된 것은 잊어버릴 수가 없다. 학습한 것을 모두 기억한다면 조만간 인간보다 똑똑한 인공지능이 나타날 있을 것이고 학습 시간도 상상할 없을 만큼 인간보다 빠를 것이다(그림 4 참조).


 

<그림 4> 인공지능의 자가학습과 성장 모델

자료 : 솔루룩스 (http://www.saltlux.com/)


<그림 4> 살펴보면, 러닝의 학습을 위해서는 반드시 학습 데이터가 제공되어야 한다. 최근에 러닝 연구가 활발해진 가장 이유 중의 하나가 빅데이터를 학습 데이터로 제공하기 때문이다. 사람이 나이가 많아지면 지식이 많아지는 것처럼 러닝도 학습을 하면 할수록 정교한 예측을 있다. 체스나 바둑의 경우, 사람은 시간이나 체력의 한계 때문에 많은 대전을 없지만 러닝의 경우 짧은 시간에도 수많은 대전을 학습할 있다.

하지만, 러닝에서도 학습 데이터를 벗어나는 예측은 하지 못한다. 바둑을 학습했다면 바둑은 최고가 있지만 학습 데이터가 없었던 체스는 최고가 없다. 아직까지 학습한 지식을 모아 다른 분야의 예측이나 판단을 하기는 어렵다.


 

< 참고 >

알파고의 능력

얼마 전 우리나라 이세돌 9 단과 인공지능 컴퓨터인 알파고의 바둑 대결이 있었다. 일반인들의 예상과는 다르게 알파고가 4 1 승리를 거뒀다. 이 결과를 두고 많은 사람들은 알파고의 능력이 다른 분야에서도 성과를 거둘 수 있을 것이라 말했다. 하지만, 알파고에게 다른 학습 데이터를 입력하지 않았다면 알파고의 능력은 바둑에 한정된다. 알파고가 가지고 있는 신경망의 내부 값은 바둑을 위한 것이기 때문이다. 알파고가 스타크래프트 대결을 원한다면 스타크래프트 학습을 반드시 거쳐야만 가능한 일이다. 다만, 알파고가 가지고 있는 학습 알고리즘은 재사용할 수 있다.

 

인공지능의 구분

딥 러닝의 관점으로 인공지능을 본다면, 인공지능은 학습에 의한 예측이고 학습하지 않는 것은 예측을 할 수 없는 것이 현재의 딥 러닝이다. 학습하지 않은 것을 예측하거나 판단하기 위해서는 사람처럼 자아가 있어야 한다. 인공지능을 자아의 유무에 따라 크게 강인공지능과 약인공지능으로 구분할 수 있다( 2 참조).


< 2> 인공지능의 구분

강인공지능

약인공지능

- 다양한 분야에서 보편적으로 활용

- 알고리즘을 설계하면 AI 가 스스로 데이터를 찾아 학습

- 정해진 규칙을 벗어나 능동적으로 학습해 창조 가능

- 특정 분야에서만 활용 가능

- 알고리즘은 물론 기초 데이터 , 규칙을 입력해야 이를 바탕으로 학습 가능

-규칙을 벗어난 창조는 불가

자료 : 보스턴컨설팅


< 2>를 기준으로 아직까지 강인공지능은 알려진 바가 없다. 잘 알려진 구글의 알파고나 IBM 의 왓슨도 바둑과 같은 제한된 데이터를 학습하여 예측하는 약인공지능이다.

하나의 분야만 학습한 알파고나 왓슨과는 다르게 다양한 빅데이터를 학습한다면 강인공지능도 가능하다. 2030년 전후로 자아가 있는 인공지능이 개발될 것이라고 말하는 인공지능 학자들도 있다.


딥 러닝의 활용

아직까지 인공지능의 전통적인 분야인 영상 인식, 문자 인식, 음성 인식에 딥 러닝이 많이 활용되고 있다( 3 참조). 영상, 음성 인식은 이미 오래 전부터 연구가 되었지만 딥 러닝 기술이 적용되면서 더욱 빠르게 발전하고 있다.


< 3> 딥 러닝의 활용 사례

적용 회사

주요 적용 사례

페이스북 (Facebook)

게시하는 사진에서 사람을 인식 (Deep Face) 하고 ,
이를 누구와 공유해야 하는지 판단

구글 (Google)

Google+ 에서 사진 태깅 , 음성 인식 기능

마이크로소프트 (Microsoft)

음성 인식 기능을 통해 영어 , 중국어 등 통역 서비스

 

빅데이터 기반의 활용

빅데이터 분석 시 딥 러닝을 활용한다면 매우 효과적인 결과를 얻을 수 있다. 최근에 빅데이터를 활용하여 활발히 연구하는 분야는 의료 분야이다. 의료도 임상 결과를 통계에 적용하기 때문에 임상 결과의 빅데이터화가 가장 필요한 분야 중 하나다.

분당서울대병원은 빅데이터 기반의 임상의사결정지원시스템을 개발하였다. 환자 개인의 특이사항을 확인하여 임상적 의사결정을 지원하는 것으로, 시스템 도입 후 부적절한 신독성 약물 처방률이 30.6% 로 감소하였다. 해당 시스템은 빅데이터를 분석하여 자연어 검색을 지원하고 의약품의 처방과 조제, 안정성 정보도 제공하고 있다. 현재는 관리되는 빅데이터 요소들을 수작업으로 처리하고 있지만 딥 러닝이 반영된다면 자동 학습을 통해 숨겨진 인사이트를 찾아낼 수 있을 것이다. IBM 의 왓슨은 의료 분야에 딥 러닝을 반영해서 암 치료에 획기적인 효과를 나타내고 있다. 진료 기록으로 환자의 상태를 진단하고 의심 질환을 의사에게 전달하는 역할도 담당한다.


타 산업과의 연계

딥 러닝이 적용되는 산업은 점점 늘어가고 있다 . 최근에 가장 주목 받는 산업은 스마트 카 내세우는 자동차 산업이다 . 운전자가 없어도 자동차 스스로 목적지로 이동하기 위해서는 운전 중에 발생할 수 있는 다양한 상황을 미리 학습을 해야 한다 . 자동차 산업에서는 딥 러닝을 통해 이를 해결하고 있다 .

러닝은 지금까지 학습 결과를 데이터로 출력하여 활용하는 경우가 대부분이었지만 러닝의 활용을 고도화하기 위해서는 스마트 카와 같이 학습 결과를 산업의 비즈니스에 적용되도록 고민하는 것이 필요하다.

외에도, 미래창조과학부에서는 러닝을 위한 고성능 컴퓨팅(HPC) 시스템과 러닝 핵심 소프트웨어인 다중 노드 분산처리 SW 프레임워크 개발하여, 단일 서버가 수행하던 모델 트레이닝을 분산해서 처리한다(그림 5 참조). 다양한 기업과 학계에서 활용될 있어 러닝 국가 경쟁력 확보에 도움이 것으로 기대된다.

 

 

< 그림 5> 이종 가속기 기반 딥러닝 HPC 시스템


마무리 하며

최근 수년 동안 빅데이터는 ICT 산업에서 가장 주목받는 분야였다. 과거에는 상상도 없을 만큼의 데이터를 분석해서 객관적인 데이터로 정리하고 미래 예측까지 있다는 것은 빅데이터에 대한 무한한 기대감이 있었다. 하지만, 워낙 많은 데이터를 다뤄야 하다보니 사람의 능력으로 감당하기가 어려웠다. 러닝은 사람의 한계를 넘는 빅데이터를 다뤄줄 있고, 빅데이터를 활용해 새로운 정보를 알아내는 능력까지 갖추고 있다. 학습 알고리즘이 정교하게 완성된다면 예측 분야에서도 많은 역할이 기대된다.

'머신러닝 > 딥러닝' 카테고리의 다른 글

Neural Network  (0) 2016.07.06
쉽게 풀어쓴 딥러닝(Deep Learning)의 거의 모든 것  (0) 2016.06.01
DeepMind moves to TensorFlow  (0) 2016.05.09

+ Recent posts