2022년 5월
여행 중 읽던 책에 ‘책읽기의 의미'에 대해 이야기한 부분이 있었다. 전공과목에 대한 추억들이 갑자기 떠올라서 기록해본다.
대학교 때 전공과목 중에서 특별히 기억에 남는 것은 여섯가지다. 데이터구조론에 이어지는 컴퓨터알고리즘과 데이터베이스가 있고, 컴퓨터구조론과 신호와 시스템에 관련된 책이 있었다. 컴퓨터그래픽스 과목도 매우 흥미로웠다.
전기의 신호가 켜짐과 꺼짐, 즉 참true과 거짓false이 입력되고 특정한 회로, 즉 함수function를 거쳐 출력신호가 되는 원리를 배웠다. 그 켜짐과 꺼짐을 0과 1의 이진수로 개념화 논리를 구현할 수 있게 된다. 신호를 스스로 순환loop하는 디자인을 통해 신호를 그냥 흘려보내지 붙잡고 있는 구조를 만들어낸 것이 컴퓨터의 재밌는 부분이기도 하다. 그게 메모리라는 개념의 시작이다. 매우 정교한 회로를 설계하고 그 집적도를 높여 엄청난 양의 다양한 계산을 빠르게 할 수 있는 반도체를 개발하여 '전자제품'의 시대가 되었다. 컴퓨터는 그런 전자제품들 중, 수행하는 일을 인간이 직접 주입해서 원하는 일을 할 수 있게 만든 것이다.
이 계산 기계에 이제 어떤 입력과 계산 콘텐츠를 넣어서 원하는 일을 할지에서의 그 콘텐츠가 소프트웨어이고 그것을 디자인하는 것을 당시에는 프로그래밍이라고 했다. 요즘은 그 말을 잘 쓰진 않고 좀더 넓은 의미의 '개발'이라는 말을 많이 쓰지만 개발은 수많은 프로그래밍의 집합이기도 하다.
그 프로그래밍을 배우기 위해서 컴퓨터 시스템 상에서 사용하는 데이터의 구조를 디자인하고 그 약속을 이해하는 것이 데이터 구조론이고, 그 데이터들을 효과적으로 다루어 좀더 효율적으로 결과를 도출해내는 방법론이 컴퓨터 알고리즘이다. 컴퓨터는 입력을 넣고, 보유한 데이터에서 원하는 것을 찾아 계산을 하고 답을 출력하는 기계이기 때문에 알고리즘에서 가장 중요한 것은 속도다.
알고리즘은 그 효율성으로 평가된다. 후진 알고리즘과 훌륭한 알고리즘이 있는데, 처리할 데이터의 양이나 기대하는 결과 도출의 속도가 미미할 때에는 알고리즘의 중요도가 낮지만, 그 반대의 경우에는 알고리즘이 매우 중요하다. 가장 이해하기 쉬운 예를 든다면, 방문자의 트래픽이 기하급수적으로 증가할 때 잘못 설계된 웹사이트는 빠르게 응답하지 못하는 것과 비슷한 원리다. 이 속도를 좌우하는 것은 하드웨어적 시스템의 물리적 처리속도도 중요하지만, 알고리즘에서는 많은 데이터에서 빠르게 원하는 데이터들을 걸러내고 접근하는 수학적 기술을 이야기한다. 어차피 컴퓨터의 하드웨어 속도는 정해져있다. 물론 이 부분을 더 집적화하여 설계하고, 분산 또는 병렬처리 시스템을 연구하는 것들도 매우 중요하지만 나는 소프트웨어에 관심이 많았기 때문에 해당 과목은 잘 수강하지 않았다.
알고리즘은 많은 데이터에서 얼마나 빠르게 원하는 데이터를 찾아내거나, 데이터를 처리하는 속도를 수학적으로 연구한다. 알고리즘 학습에서 가장 기본이 되는 것이 검색searching과 정렬sorting이다. 원하는 데이터가 어디에 있는지 빠르게 찾아가기 위한 것과 데이터들을 최대한 빠르게 원하는 순서에 맞게 정렬해서 보여주는 것 말이다. 사실 검색이 곧 정렬이고 정렬이 곧 검색이다. 이런 알고리즘 공부는 꼭 소프트웨어 전문가가 되기 위해서가 아니라 수학적 논리를 공부하는 것에도 큰 도움이 되기 때문에, 나는 알고리즘이 청소년들의 교과목 중 하나였으면 좋겠다는 생각도 한다. 요즘 유행하는 '코딩교육'의 핵심도 컴퓨터 개발 언어를 배우는 게 아니라 알고리즘을 배우는 것이 되어야 한다고 생각한다.
알고리즘이 데이터에 대해 효율적인 접근과 처리를 이야기하는 것이라고 한다면 이어지는 것이 그 데이터의 문제다. 데이터가 점점 많아진다. 요즘엔 빅데이터라는 말이 있지만 사실 당시, 2000년대 초반만 해도 '데이터베이스'라는 말이 가장 큰 의미였다. 수집된 데이터를 어떤 방식의 구조로 저장할지를 디자인하는 것이 데이터베이스 구조론이다. 집에 물건이 잘 정리되어 있어야 필요할 때 쉽게 찾을 수 있는 것처럼 데이터들을 목적에 맞는 구조로 - 주로 표의 형식이지만, 깊게 들어가면 꼭 그렇지만도 않았다 - 디자인을 해야 좋은 알고리즘을 적용할 수도 있다.
그때 데이터구조론과 컴퓨터알고리즘을 한 교수님께 배웠는데, 그분은 참 수업시간이 세련되고 집중이 잘되는 분이었다. 꼰데같은 면도 없었고 수업이 지루하지 않았다. 그분은 주로 자연어처리를 연구하는 분이었다. 쉽게 말해 우리가 사용하는 실제 언어를 어떻게 컴퓨터가 이해하기 쉽게 처리할지를 연구하는 것이었는데, 특별히 영어와는 언어구조가 너무나 다른 한국어를 컴퓨터에서 어떻게 처리할지를 연구하시는 것 같았다. 잘은 모르지만, 대부분의 연구과정이 언어의 소리적특성이나 문법적 구조를 연구해서 그것을 컴퓨터가 효과적으로 이해할 수 있는 구조로 디자인하는 연구들을 하시는 것 같았다. 매력적인 분야라는 생각을 했었고, 그 교수님은 과에서 프로그래밍 좀 한다는 애들 사이에서는 인기가 많은 교수님이었다.
내가 수업을 들을 당시가 2002년에서 2004년 사이였다. 그로부터 10년 정도 지났을 때에는 이미 빅데이터와 인공지능의 시대가 왔었다. 나는 엔지니어로 살고 있진 않았지만 당시 다니던 회사도 일종의 IT계열이었고, 그때는 모든 IT관련 서비스 회사들이 인공지능과 빅데이터를 떠들고 있었다. 사실 나는 그때 그 교수님의 근황이 궁금했었다. 자연어의 문법이나 언어적 원리를 연구해서 컴퓨터 알고리즘으로 만드는 연구를 하셨던 분인데, 어느새 빅데이터와 인공지능 시대가 와버리다니.
빅데이터 시대 이전의 알고리즘은 인간이 원리를 어떻게 분석해서 컴퓨터에게 설계해주느냐의 문제였다면, 그 이후는 엄청난 양의 데이터를 모으는 방법과 그것을 시스템이 엄청나게 빠른 속도로 접근하고, 학습하는 것만이 중요해졌다. 언어적 특성을 논리적으로 연구하는 것보다는 수많은 문장과 단어들을 컴퓨터에게 학습하게 하면 그것이 실제 사람이 언어를 이해하는 방식과 유사하고, 그를 통해 빠르고 정확한 번역 시스템이나 문장에서 데이터를 추출하는 것들이나 검색엔진 등의 개발이 가능해졌다.
많은 사람들에 쉽게 체감할 만한 사례를 들자면 이렇다. 예전에는 포털이나 어떤 서비스에서 '검색창'에 검색어를 입력하면 '로딩중' 바람개비가 돌면서 검색결과를 찾는 중이라는 시간을 기다린 뒤 결과가 표시되었다. 그런데 어느때 부터 검색어를 타이핑하는 중간중간 실시간으로 관련 검색어나 결과가 표시되기 시작한 것을 알 것이다. 지금 '어느때부터'라는 부분을 쓸 때도 띄어쓰기를 어떻게 해야하는지 잘 모르겠는데, 메모 프로그램이 맞춤법을 체크해주고 있다. 이것도 자연어처리와 연관되는 시스템이다. 한가지 문제는 맞춤법 결과를 완벽하게 신뢰하지도 않고, 문법을 체크해줘도 내 맘대로 글을 써서 게시한다면 나의 틀린 맞춤법이 또 어떤 학습의 데이터가 되어 인공지능 시스템도 틀린 언어를 수집하게 될 가능성의 존재다.
그런데, 맞춤법을 체크해줘도 틀리게 언어를 구사하는 나같은 인같이 많다면 그건 틀린 표현인 걸까? 틀린 게 아니라 다른 거라고들 하면서 계속 틀리다고 말하고 있는 우리의 언어습관을 인공지능 시스템은 어떻게 이해하고 있을까? 좋은 여행이 되길 '바라'라고 굳이 표현하는 인간들은 점점 줄어들 것이다. 나는 짜장면을 말하듯 일부러 '바래'라고 말한다. 철수를 부를 때는 "철수야"라고 하고 미숙이를 부를 때는 "미숙아"라고 하는 것은 이름 끝에 받침이 붙어있는 이유다. 그 문법적 규칙을 연구해서 다른 규칙과 충돌이 되는 예외상황을 잘 고려하여 거의 완벽한 알고리즘을 설계하는 것이 연구의 과제였다면, 빅데이터 시대에는 수많은 표현들을 모아서 아이가 언어를 이해하듯 학습하는 방식을 연구해야 하는 시대가 되었다.
물론 많은 학자들의 연구가 인공지능의 학습시스템을 연구하는 것으로도 자연스럽게 이어졌을 것이니 모든 연구들이 낙동강오리알 신세가 된 것은 아닐 것이다. 약력을 찾아보니 그 교수님께서 77학번이다. 이제 곧 은퇴를 하실 때가 되었을 것 같다. 모교의 교수진에는 이제 나보다 어린 사람도 있는 것 같다.
아무튼 컴퓨터공학, 정확하게는 소프트웨어 공학을 공부했던 것은 나의 사고방식에 많은 영향을 줬다. 어떤 것을 로지컬하게 이해하고 원리를 정의하려는 습관을 가진 것은 장점이나, 너무 모든 것을 그렇게 바라보려고 하는 것은 또 단점이기도 하다. 매 순간에 집중하기 보다는 시스템을 만들려고 한다. 다시 하거나 반복적으로 해야 하는 문제들을 항상 고려하는 습관이 들었다. 룰rule을 정의하려고 하는 습관이 있다. 예외상황을 잘 고려하려는 것은 장점이지만, 발생하지 않았거나 발생할 가능성이 적은 문제를 너무 미리 염려하는 습관이 있다.
사랑하는 사람과 행복한 날들을 보내는 것에 집중해야 하는데, 많은 사람들이 골고루 행복하지 않은 시스템이 불만이라고 느끼는 시간이 더 많았다. 구조적인 문제를 보면 견디기 어려운 성격이 된 것은 내 머리를 늘 피곤하게 만들었다.
인생 전체에 있어 대학 4년은 정말 어린 날의 짧은 순간이었다.