씨줄과 날줄, 사유의 확장 17. 비전공자 IT지식, AI지식 part1
씨줄과 날줄, 사유의 확장 17. 비전공자를 위한 이해할 수 있는 IT지식, AI지식(AI 4부작 세 번째) part 1
(연관성이 있는 2권 이상의 책을 엮어 사유의 폭을 확장하는 이야깃거리를 전달하고자 합니다.)
충분히 발달한 기술은 마법과 구분되지 않는다. - 아서 C. 클라크
마법사 '해리포터'와 '머글'들의 차이점은 뭘까? 명석한 두뇌, 마법을 쓸 수 있는 재능 등을 얘기할 수도 있겠지만 가장 큰 차이는 '마법의 언어'를 알고 있다는 것이다.
같은 뜻임에도 불구하고
나는 수호성인을 고대하고 있다!
라고 아무리 외쳐도 마법은 구현되지 않는다. 정해진 용어를 정확한 발음과 억양으로 완벽하게 외쳤을 때에만 해당 의미가 전달되어 신비로운 현상이 일어나는 것이다.
익스펙토 페트로눔!
이러한 마법의 언어는 비단 소설 속의 이야기에만 존재하는 것이 아니다. 현실 속에도 언제나 있어 왔다.
인쇄기 발명 이전 시대의 마법의 언어는 서양 라틴어, 동양 한자였다. 가장 중요한 종교서적, 왕실 행사 등이 해당 언어로 쓰이고 진행되었다. 라틴어(한자)를 읽고 쓰는 리터러시(문해력)를 갖춘 고위신관(학자)들은 일반 백성들 눈에는 마법사나 마찬가지였다.
글로벌 시대의 마법사는 '영어구사자'였다. 영어를 구사할 수 있다는 것은 최신의 정보를 가장 먼저 습득할 수 있다는 의미였고, 이는 개인에게 No.1 경쟁력이 되었다. 심지어 '마법의 언어'인 영어를 전수하는 행위만으로도 큰 부를 축적할 수 있었다.(강남의 영어교육 시장을 보라.)
그렇다면 AI 시대의 '영어'는 무엇일까?
인간에게 쉬운 것은 컴퓨터에게 어렵고
반대로 인간에게 어려운 것은 컴퓨터에게 쉽다 - 모라벡의 역설
컴퓨터는 인간이 하는 일상적인 행위를 수행하기 매우 어렵지만 수학적 계산, 논리 분석 등은 순식간에 해낼 수 있다. 또한 AI 시대의 가장 중요한 정보는 컴퓨터가 가지고 있다. 이러한 컴퓨터의 장점을 십분 활용할 수 있는 사람이 시대를 이끌어 가는 마법사가 될 수 있을 텐데, 그 열쇠는 컴퓨터와의 의사소통 능력에 달려있다.
'모라벡의 역설'에서 말한 것처럼 컴퓨터가 가장 이해하기 힘든 언어는 인간이 쓰는 자연어이다. 그리고 인간이 가장 이해하기 힘든 '마법의 언어'가 기계어(0과 1로 이루어짐)이다. 자연어 처리는 AI 연구에서 가장 빠르게 발전하는 분야 중 하나이긴 하지만, 영어 원서와 번역서 발행 사이에 시차가 존재하듯, 아직까지는 한계가 명확하다. 오죽하면 기계가 인간 수준의 지능을 가졌는지 시험해 보기 위한 테스트로 '자연어 처리능력'을 이용하겠는가?(튜링테스트) 이것을 해내는 컴퓨터는 인간 수준, 어쩌면 그 이상의 복잡성을 갖춰야 한다.
결국 컴퓨터가 쉽게 알아듣고 임무를 빠르게 수행하게 해주는 언어가 필요한데, 그러한 언어를 프로그래밍 언어라고 하고, 그 언어를 통해 컴퓨터와 의사소통 하는 것을 '코딩'이라고 한다. 기계어와 자연어 사이에 여러 단계의 프로그래밍 언어가 존재하는데 기계어에 가까운 언어를 구사할수록 '덤블도어'에 가까운 고급 마법사가, 사람의 언어에 가까울수록 '호그와트 1학년' 같은 '초보 마법사'라 볼 수 있겠다.
'덤블도어'는 의사소통이 안 되는 인간과 컴퓨터를 위해 '컴파일러'를 만들어 인간의 요구를 컴퓨터에게 전달해 준다. 자바, 파이썬, 루비, 스위프트 등 영어로 되어 있는 프로그래밍 언어를 사용해 컴파일러에게 명령을 전달하면, 컴파일러가 그 명령을 기계어인 0과 1로 변환해 컴퓨터에게 전달을 하는 방식이다.
대화 주고받기 사전준비
서로 파일을 주고받기 위해서는 컴퓨터끼리 선으로 연결되어야 한다. 이 선을 연결하기 위해 1990년대부터 수많은 공사가 이루어졌다. 현재 우리가 쓰는 스마트폰도 선으로 이어져 있기에 카톡을 주고받을 수 있다. 단지 그 선(전자파)이 보이지 않을 뿐.(당신의 집 와이파이 공유기에서 점점 멀어지다 보면 이 말뜻을 이해하게 될 것이다.)
이미지 파일, 동영상 파일, 메시지 등을 보내기 위해서는 해당 컴퓨터가 위치한 주소가 필요하다. 그 주소를 IP 주소라고 한다. 숫자는 문자보다 간편하고 명확하기 때문에 IP 주소에서는 숫자를 사용하고 있다.
예) 214.123.142.12
우리는 도메인 네임(영어 이름)을 치지만, 우리가 알지 못하는 사이에 IP로 바뀌어서 컴퓨터의 위치를 찾는다. 즉, 도메인 네임은 IP와 같다.
주는 놈, 받는 놈
파일을 달라고 계속 보채는 컴퓨터를 '클라이언트'라고 한다. 그리고 파일을 주는 컴퓨터를 '서버'라고 한다.
클라이언트 컴퓨터를 다른 말로 '프로트 엔드', 서버를 다른 말로 '백 엔드'라고도 한다.
브런치에서 이 '서버 컴퓨터' 연합군을 24시간, 365일 켜놨기 때문에 우리는 아침에도, 새벽에도, 저녁에도 브런치에서 글을 쓰고 읽을 수 있다. 만약 이 컴퓨터들이 꺼진다면 우리는 브런치 이용할 수 없게 된다.(작년 10월에 카카오에서 이러한 사실을 절절히 체험시켜 줬다.)
나중에 딴소리 안 하기 위한 약속
컴퓨터라는 친구는 애매한 것을 싫어한다.
따라서 요청을 정확히 구분할 수 있도록 하는 '체계'가 필요하다. 그 체계가 바로 API이다. API는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고받을 수 있게 만든 체계이다. IP 주소 뒤에 어떤 문자를 쓰느냐에 따라 다른 기능을 수행하도록 약속하는 것이다. API를 통해 요청과 응답을 주고받을 때는 데이터도 같이 전달된다.
API(Application Programming Interface) 주요 요청 4가지
CREATE(올려줘!)
READ(불러와줘!)
UPDATE(바꿔줘!)
DELETE(지워줘!)
잘 설계된 '프로그래밍 인터페이스'를 사용하면 환경(플랫폼)이 달라져도 동일한 코드가 동일한 결과를 수행하며, 보다 편리하게 프로그래밍을 할 수 있다. 이것이 바로 API의 존재 목적이다.
자신이 개발자이고 이용자가 휴대폰으로 촬영한 영상을 유튜브에 업로드하고 카카오 지도에 촬영한 장소를 기록할 수 있는 앱을 만든다고 가정해 보자. 이를 구현하기 위해선 이용자의 구글 계정과 비밀번호를 받아서 유튜브에 업로드할 수 있는 기능을 만들어야 할 것이고 카카오 지도와도 상호 작용이 필요할 것이다. 한데 일개 앱 개발자가 유튜브나 구글 서버 DB에 직접 접근할 수 있을 리가 만무하다. 그렇다고 구글 입장에서는 이러한 서드 파티 앱과 상호 작용을 원천 봉쇄하는 것도 애매하므로 무차별적인 접근을 막고 '적절한 상호 작용'을 위해 자체 개발 API를 배포하는 것이다. - 출처: 나무위키 'API'
보다 농밀한 대화를 위한 장소
애플리케이션은 구체적인 목적을 위해 설치해서 사용하는 모든 프로그램을 말한다. 응용프로그램, 애플리케이션, 어플, 앱, 모두 같은 그룹으로 이해하면 된다.
컴퓨터 웹과 스마트폰 어플의 차이점
애플리케이션을 1.0.0에서 2.0.0으로 변경하기 위해서는 업데이트가 필요하다. 업데이트 결과를 유저가 다운로드해야 한다. 그래야 변화가 반영된다. 하지만 웹은 다르다. 그냥 서버의 원본을 바꾸면 된다. 새로고침 하면 자동으로 반영된다.
웹과 어플의 장점과 단점
먼저 웹은 수정이 용이하다. 원본만 수정하면 유저가 업데이트하지 않아도 새로 고침 하면 반영된다. 빠르게 적용할 수 있다. 대신 웹은 네트워크의 환경의 영향을 크게 받는다. 초고속 인터넷망이 깔려있지 않는 곳에서는 많이 느려질 수 있다. 반면 어플은 웹보다 효율적으로 네트워크의 영향을 조금만 받도록 만들 수 있다.
웹과 앱을 만들기 위해 모든 것을 처음부터 코딩하지 않는다. 기존에 만들어진 프레임워크와 라이브러리를 이용해 자신이 원하는 프로그램을 만든다. 프레임워크와 라이브러리의 차이점은 흐름을 누가 지니고 있냐의 차이이다. 프레임워크는 전체적인 흐름을 자체적으로 가지고 있어 프로그래머는 그 안에서 필요한 코드를 작성한다. 반면에 라이브러리는 프로그래머가 전체적인 흐름을 가지고 있어 자신이 원하는 기능을 구현하고 싶을 때 라이브러리에서 가져다 사용하는 것이다.
비유하자면 기존의 완성된 집에 인테리어를 바꾸는 정도라면 '프레임워크'를 사용하는 것이고, 스스로 집을 설계하고 만드는 과정에서, 여러 가구나 가전제품을 들이는 것은 '라이브러리'를 이용하는 것이다.
(요약) 고위 개발자의 마법들
컴파일러: 인간의 언어를 기계어로 바꾸어 줌
API: 환경(플랫폼)이 달라져도 동일한 코드가 동일한 결과를 수행하게 해 줌
프레임워크 및 라이브러리: 완성된 제품을 만들기 위해서 개발자를 도와주는 또는 기반이 되는 역할을 함
한 시대의 부와 권력은 언제나 '신'에 가까운 '고위신관'의 차지였다.
종교의 신이 위세를 떨칠 때는 라틴어로 쓰인 성서에 접근 가능한 고위신관이
영미 제국주의가 득세했을 때는 영어 리터러시를 지닌 표준영어 구사자가
기계장치의 신이 등장할 AI 시대에는 그들과 자유로이 소통이 가능한 최상위 개발자가
그 과실을 차지할 것이다.
새로운 호그와트에 들어가야 하는 '나의 자식'에게 어떤 걸 가르쳐야 할까?
컴파일러, API, 프레임워크 및 라이브러리를 직접 만들지는 못하더라도, 그러한 것들을 잘 활용할 수 있게 도와주어야 '머글'로 남는 것만큼은 방지할 수 있을 것이다.(part 2에서 계속...)