Haskell이 AI 네이티브 시대에 왜 안전성과 신뢰성을 제공하는 최적의 도구가 될 수 있는지, 함수형 패러다임과 강한 타입 시스템, TensorFlow Haskell 바인딩을 중심으로 살펴보며 소프트웨어 안전성의 윤리와 실천을 논하는 글.
미래는 함수형이다: Haskell과 AI 네이티브 세계 | James Bowen | HackerNoon.com | Medium
===============
가입하기
가입하기

· 매거진 팔로우
Elijah McClain, George Floyd, Eric Garner, Breonna Taylor, Ahmaud Arbery, Michael Brown, Oscar Grant, Atatiana Jefferson, Tamir Rice, Bettie Jones, Botham Jean
매거진 팔로우
팔로우
읽는 데 6분
·
2017년 8월 7일
76
1
공유
이 블로그의 단골 독자라면 알겠지만, 저는 언어로서의 Haskell의 미래에 대해 이야기하는 것을 좋아합니다. 저는 Haskell이 성장하는 데 도움이 될 방식으로 프로그래밍의 미래를 어떻게 만들어갈 수 있을지에 관심이 있습니다. 저는 여러 번 네트워크 효과가 주요 장애물이라고 언급했습니다. 회사들은 Haskell 개발자가 그리 많지 않다는 이유로 Haskell을 시도하는 데 주저합니다. 그 결과, 다른 개발자들도 Haskell을 유료로 배울 기회를 덜 갖게 됩니다. 그리고 이 악순환은 계속됩니다.
아주 똑똑한 사람들 중에도 비즈니스의 프로덕션 코드에 Haskell을 쓰는 데 편견이 있는 경우가 많습니다. Haskell이 학술 언어라는 인식에서 비롯된 것이죠. 그들은 Haskell이 “실제 세계” 문제에 적합하지 않다고 봅니다. 이에 대한 가장 좋은 반박은 사람들이 매일 사용하는 시스템을 만드는 데 Haskell이 얼마나 다양하게 쓰이는지를 보여주는 것입니다. 지금 여기 앉아서 Haskell로 웹 서버를 만드는 일이 얼마나 쉬운지, 프런트엔드 UI를 설계하는 뛰어난 메커니즘을 가리킬 수도 있습니다. 하지만 아직 다루지 않은, 프로그래밍의 미래에서 아주 중요한 영역이 하나 남아 있습니다.
바로 AI와 머신러닝의 세계입니다. AI는 천천히(혹은 그리 천천히도 아니게) 사실상 모든 소프트웨어 기반 비즈니스의 주된 관심사가 되어가고 있습니다. 지난 5–10년간 “클라우드 네이티브” 아키텍처와 시스템이 부상했습니다. 하지만 머지않아 모든 주요 소프트웨어 시스템이 핵심에 AI와 머신러닝을 사용할 시대에 살게 될 것입니다. 요컨대, 제 회사의 창업자가 표현했듯 우리는 곧 AI 네이티브 미래에 진입하려 합니다.
이는 Haskell을 사용해 AI 애플리케이션을 작성하는 활용법을 탐구하는 연재의 첫 번째 글입니다. 앞으로 몇 주 동안 저는 Tensor Flow의 Haskell 바인딩 사용에 집중할 것입니다. Tensor Flow는 프로그래머가 단순하지만 강력한 애플리케이션을 만들 수 있게 해줍니다. 파이썬 튜토리얼은 많지만, Haskell 라이브러리는 아직 초기 단계입니다. 그래서 이 라이브러리의 핵심 개념을 훑고, Haskell에서의 사용법을 보여드리겠습니다.
하지만 저에게는 Haskell로 AI 애플리케이션을 만들 수 있다는 것을 보여주는 것만으로는 충분하지 않습니다. 그것만으로는 판도를 바꾸거나 현 상태를 뒤집지 못할 겁니다. 궁극적 목표는 이런 종류의 시스템에 Haskell이 바로 “최고의” 도구임을 증명하는 것입니다. 그 전에, 먼저 AI가 어디에 사용되고, 왜 그렇게 중요한지 감을 잡아봅시다.
…그리고 이는 그다지 논란거리도 아닙니다. 해마다 AI 연구에서 더 많은 발견이 나오고 있습니다. 우리는 불과 몇 년 전만 해도 상상하기 어려웠던 문제들을 이제 해결할 수 있습니다. IBM 왓슨 같은 NLP 시스템의 발전으로 챗봇이 여기저기서 등장하게 되었습니다. Tensor Flow는 고급 딥러닝 기법을 모든 프로그래머의 손끝에 올려놓았습니다. 시스템은 점점 더 빨라지고 있습니다.
게다가 대중에게 미치는 함의도 점점 더 잘 알려지고 있습니다. 자율주행차가 여러 미국 주요 도시의 거리를 누비고 있습니다. 자율 아마존 드론이 배송을 맡는다는 아이디어는 거의 확실해 보입니다. 수백만 명이 Nest 같은 IoT/AI 결합 기기에 집 안 시스템의 일부를 맡깁니다. AI는 정말 곧 어디에나 존재하게 될 것입니다.
하지만 AI의 보편화는 많은 우려를 동반합니다. 소프트웨어 엔지니어는 훨씬 더 많은 책임을 지게 됩니다. 우리의 코드는 어렵고 잠재적으로 인생을 바꿀 수도 있는 결정을 내려야 합니다. 예컨대 자율주행차의 설계에는 많은 철학적 함의가 담겨 있습니다.
여기에 급성장 중인 또 다른 시장인 사물인터넷(IoT)과 AI가 섞이면 문제는 더 복잡해집니다. 지난해 한 공격은 IoT 기기 봇넷을 이용해 인터넷의 큰 부분을 마비시켰습니다. IoT 세계에서는 아직 보안이 최우선이 아닙니다. 하지만 곧 더 많은 사람들이 카메라, 음성 녹음 장치, 화재 경보기, 보안 시스템을 인터넷에 연결할 것입니다. 그렇게 되면 그들의 안전과 프라이버시는 IoT 보안에 달리게 됩니다.
이 작가의 업데이트를 무료로 받으려면 Medium에 가입하세요.
구독
구독
안전과 보안의 필요성은 일부 소프트웨어 패러다임을 재고해야 함을 시사합니다. “Move fast and break things(빨리 움직이고 부숴라)”는 태도가 많은 곳에서 지배적입니다. 하지만 “부숴지는 것”이 누군가의 집이 타버리는 일이라면 이 생각은 그리 좋아 보이지 않습니다.
그렇다면 이것이 Haskell과 무슨 상관이 있을까요? 우리가 개발 언어를 선택할 때 직면하는 트레이드오프를 생각해봅시다. 강력한 타입 시스템과 컴파일 타임 보장을 갖춘 Haskell은 더 신뢰할 수 있습니다. Javascript나 Python 같은 언어와 비교해 컴파일 시점에 더 많은 오류를 잡을 수 있습니다. 이런 언어에서는 문법적이지 않은 문제들이 런타임에 가서야 드러나는 경향이 있습니다. 프로그래머는 잠재적 오류를 잡기 위해 테스트 시스템에 더 크게 의존해야 합니다. 하지만 테스트는 어렵고, 최선의 방법론에 대해서도 여전히 이견이 많습니다.
반대로 Javascript 같은 언어로 코드를 쓰는 것이 다소 더 쉽습니다. 타입 시스템의 모서리를 깎아 “동적” 객체를 더 많이 가질 수 있기 때문입니다. 그래서 우리 모두 “신뢰할 수 있는” 소프트웨어를 원하지만, 종종 코드를 더 빨리 띄우기 위해 타협합니다. 이것이 바로 “Move fast and break things” 마인드셋의 정수입니다.
그러나 소프트웨어의 안전에 대한 관심이 폭발적으로 늘어나면서 판돈이 커졌습니다. 누군가의 웹 브라우저가 Javascript 때문에 크래시해도 대수롭지 않을 수 있습니다. 사용자는 페이지를 새로고치고 그 조건을 다시 유발하지 않길 바라면 됩니다. 앱이 응답을 멈추면 사용자는 짜증을 내고 고객을 잃을 수도 있습니다. 하지만 프로그래밍이 다른 시장으로 침투하기 시작하면, 어떤 오류든 치명적일 수 있습니다. 자율주행차가 갑작스런 버그를 만나 시스템이 다운되면 많은 사람이 목숨을 잃을 수 있습니다. 그러므로 우리 소프트웨어가 이런 종류의 오류를 만나는 일을 불가능에 가깝게 만드는 방법을 찾는 것은 우리의 윤리적 책임입니다.
Haskell은 여러 면에서 매우 안전한 언어입니다. 그래서 대형 금융기관, 대형 데이터 사이언스 기업, 심지어 자율 비행 제어 분야에서 일하는 회사도 Haskell을 신뢰합니다. 코드가 임의의 부작용을 가질 수 없을 때, 크래시를 방지하기가 훨씬 쉬워집니다. 또한 임의의 효과로부터의 누출을 방지할 수 있을 때(IoT 장치처럼) 시스템을 보안하기도 더 쉽습니다. 이런 기법들은 종종 Haskell에는 존재하지만 다른 언어에는 없습니다.
의존형 타입(dependent types) 분야는 프로그래밍에 더 많은 보안을 추가할 또 하나의 영역입니다. 이들은 동작에 대한 컴파일 타임 보장을 더 많이 가능하게 합니다. 제대로 사용하면 안전성을 크게 높일 수 있죠. Haskell은 아직 의존형 타입을 완전히 지원하지 않지만, 작업이 진행 중입니다. 그동안은 Idris처럼 1급으로 지원하는 언어도 있습니다.
물론 AI와 딥러닝에서는 이런 보장을 얻기가 어렵습니다. 특정 길이의 벡터를 보장하는 타입을 만드는 것과는 차원이 다릅니다. 자동차가 앞에 서 있는 12명의 사람을 보았을 때 반드시 브레이크를 밟아야 한다는 것을 보장하는 타입을 만드는 것은 전혀 다른 문제죠. 하지만 이런 도전이야말로 AI 네이티브 미래에서 프로그래머가 마주해야 할 과제입니다. 그리고 Haskell이 그 미래에서 제자리를 차지하게 하려면, 이런 결과가 가능함을 보여주어야 합니다.
AI와 머신러닝은 소프트웨어 공학에서 가장 큰 분야라는 것은 자명합니다. 이들은 오랫동안 이 분야를 지배할 것입니다. 우리의 삶에 놀라운 영향을 미칠 수 있습니다. 하지만 이런 영향을 허용하는 순간, 우리는 우리의 안전을 더 많이 소프트웨어 엔지니어의 손에 맡기게 됩니다. 이는 우리가 소프트웨어를 개발하는 방식에 중대한 함의를 가집니다.
우리는 종종 개발 용이성과 신뢰성 사이에서 트레이드오프를 해야 합니다. Haskell 같은 언어는 우리 프로그램의 동작에 대해 많은 컴파일 타임 보장을 제공합니다. 이런 보장은 많은 다른 언어에는 없습니다. 그러나 이런 보장을 달성하는 과정은 개발 과정에 더 많은 고통을 가져올 수도 있습니다.
하지만 곧 우리의 코드는 자율주행차, 배송 드론, 홈 보안 장치 같은 것들을 제어할 것입니다. 그러니 우리는 가능한 모든 방법을 동원해 코드를 최대한 신뢰할 수 있게 만드는 윤리적 책임이 있습니다. 이런 이유로 Haskell은 AI 네이티브 미래에서 유리한 위치에 있습니다. 이를 활용하려면 많은 노력이 필요합니다. Haskell 프로그래머는 Haskell을 더 신뢰할 수 있게 만들기 위해 의존형 타입 같은 언어 도구를 개발해야 합니다. 또한 Haskell로 머신러닝 애플리케이션을 쉽게 작성할 수 있도록 라이브러리에도 기여해야 합니다.
이러한 관점에서, 앞으로 이 블로그의 몇몇 글은 Haskell을 활용한 머신러닝에 초점을 맞출 것입니다. 먼저 Tensor Flow의 Haskell 바인딩 기본을 훑는 것부터 시작할 겁니다. 우리 Haskell Tensor Flow 튜토리얼을 다운로드해 일부 내용을 미리 살펴볼 수 있습니다!
Haskell을 한 번도 프로그래밍해 본 적이 없다면, 꼭 시도해 보세요! 시작하기 좋은 두 가지 자료가 있습니다. 먼저 Getting Started 체크리스트가 있습니다. 언어 다운로드부터 시작해 초보자용 자료 방향을 안내합니다. 둘째, Stack 미니 코스가 있습니다. 이는 프로젝트 빌드, 코드 구성, 의존성 관리가 매우 쉬워지는 Stack 도구 사용법을 안내합니다.
76
76
1
팔로우
HackerNoon.com ---------------------------에 게재됨
Elijah McClain, George Floyd, Eric Garner, Breonna Taylor, Ahmaud Arbery, Michael Brown, Oscar Grant, Atatiana Jefferson, Tamir Rice, Bettie Jones, Botham Jean
팔로우
팔로우
작성자 James Bowen ----------------------
Monday Morning Haskell 저자 (http://mmhaskell.com)
팔로우

응답 작성
취소
응답
James,
Haskell로 구현된 AlphaZero가 있나요? 그래야 그 AI의 성능을 확인할 수 있겠네요.
--
답글

2020년 8월 24일

in
by
2017년 3월 30일

in
by
Tmux 커스터마이징 ---------------- ### 제정신을 위한 Tmux 상태줄 커스터마이징
2018년 1월 26일

in
by
2018년 8월 6일
9월 9일
9월 14일

in
by
9월 12일

in
by
2일 전

우리가 지금 사는 세계 ------------------------------ ### Ron Paul Institute 2025 연례회의 강연
9월 15일
9월 15일