Skip to main content

운영체제와 프로그래밍 언어가 세상을 번역하다

Views 18약 7분생성형 AI 활용
Summary

컴퓨터는 사람의 말을 알아듣지 못했다

메인프레임 시대의 컴퓨터는 거대한 기계였다. 방 하나를 차지했고, 전기를 많이 먹었고, 아무나 만질 수 없었다. 하지만 더 큰 문제는 따로 있었다. 컴퓨터는 사람의 말을 알아듣지 못했다.

사람은 "월급 명세서를 계산해 줘", "로켓의 궤도를 구해 줘", "파일을 저장해 줘"라고 말하고 싶었다. 컴퓨터가 알아듣는 것은 0과 1, 그리고 아주 낮은 수준의 명령뿐이었다. 하드웨어가 몸이라면, 그 몸을 움직이게 하는 말과 규칙이 필요했다. 그 역할을 맡은 주인공이 소프트웨어였다.

운영체제와 프로그래밍 언어가 세상을 번역하다

기계어라는 높은 벽

초기의 프로그래머는 컴퓨터와 거의 맨몸으로 대화했다. 컴퓨터가 직접 이해하는 명령, 즉 기계어를 써야 했다. 기계어는 숫자의 나열이었다. 어느 위치의 값을 가져오고, 더하고, 저장하고, 다음 명령으로 이동하라는 식이었다.

문제는 사람이 숫자만으로 긴 일을 설명하기 어렵다는 점이었다. 명령 하나를 잘못 쓰면 전혀 다른 결과가 나왔다. 기억장치의 주소를 하나 착각하면 프로그램은 멈추거나 엉뚱한 값을 냈다. 컴퓨터는 실수를 봐주지 않았다.

그래서 등장한 것이 어셈블리어였다. 어셈블리어는 기계어에 별명을 붙인 언어였다. 예를 들어 숫자로 된 명령 대신 "더하라", "저장하라", "이동하라"에 가까운 짧은 기호를 썼다. 메모리 주소에도 이름을 붙일 수 있었다. 사람은 조금 더 읽기 쉬운 명령을 쓰고, 어셈블러라는 프로그램이 그것을 기계어로 바꿔 주었다.

어셈블리어는 컴퓨터를 다루는 부담을 크게 줄였다. 하지만 여전히 컴퓨터 가까이에 붙어 있는 언어였다. 프로그래머는 기계의 구조를 잘 알아야 했다. 어느 레지스터를 쓸지, 메모리 어디에 값을 둘지, 명령을 어떤 순서로 움직일지 세세하게 신경 써야 했다. 컴퓨터를 움직일 수는 있었지만, 사람의 생각을 그대로 표현하기에는 아직 멀었다.

수학자와 과학자를 위한 언어, 포트란

1950년대에 컴퓨터를 많이 쓰던 사람들은 과학자와 공학자였다. 이들은 미사일 궤도, 원자력 계산, 날씨 예측, 구조물 해석처럼 복잡한 수식을 빠르게 계산하고 싶어 했다. 그런데 매번 기계어와 어셈블리어로 수식을 풀어 쓰는 일은 너무 고통스러웠다.

이 문제를 해결하려고 등장한 대표적인 언어가 포트란이다. 이름부터 "공식 번역"에 가깝다. 사람이 쓰는 수학 공식과 비슷한 형태로 프로그램을 작성하면, 컴파일러가 그것을 컴퓨터가 실행할 수 있는 기계어로 바꿔 주었다. 컴파일러는 번역가였다. 사람의 언어에 가까운 명령을 기계의 언어로 바꾸는 소프트웨어였다.

포트란의 의미는 컸다. 프로그래머가 기계의 내부 사정에 덜 묶이고, 문제 자체에 더 집중할 수 있게 되었기 때문이다. 과학자는 "어느 메모리 주소에 값을 넣을까"보다 "이 방정식을 어떻게 계산할까"를 생각할 수 있었다.

이때부터 프로그래밍 언어는 단순한 명령 목록이 아니라 사고의 도구가 되기 시작했다. 좋은 언어는 사람이 문제를 바라보는 방식을 바꿨다.

회사의 장부를 읽는 언어, 코볼

컴퓨터가 과학 연구소와 군대를 넘어 기업으로 들어가자 다른 문제가 나타났다. 회사가 다루는 정보는 수식만이 아니었다. 고객 명단, 급여, 세금, 재고, 주문서, 보험 기록처럼 길고 복잡한 데이터가 많았다.

기업 담당자들은 숫자 계산보다 "기록을 읽고, 분류하고, 보고서를 만드는 일"을 원했다. 그래서 등장한 언어가 코볼이다. 코볼은 업무용 데이터를 다루기 위해 만들어졌다. 문장이 영어에 가까웠고, 파일과 기록을 처리하는 데 강했다.

코볼의 장점은 명확했다. 회사의 업무 흐름을 프로그램으로 옮기기 쉬웠다. 직원의 이름, 부서, 급여 같은 항목을 정해 놓고, 조건에 따라 계산하고, 결과를 보고서로 만들 수 있었다. 컴퓨터는 이제 과학자의 계산기만이 아니라 회사의 사무원이 되었다.

코볼로 작성된 프로그램은 은행, 보험사, 정부 기관에서 오래 살아남았다. 기술의 세계에서는 새것이 늘 주목받지만, 실제 사회를 움직이는 시스템은 오래된 언어 위에서 계속 돌아가는 경우가 많다. 코볼은 그 사실을 보여 주는 대표적인 예다.

컴퓨터를 움직이는 언어, C

포트란이 과학 계산을 쉽게 만들고, 코볼이 업무 처리를 쉽게 만들었다면, C 언어는 컴퓨터 자체를 다루는 방식을 바꿨다.

C는 하드웨어에 가까우면서도 사람이 읽고 쓰기 좋은 언어였다. 메모리와 장치를 세밀하게 다룰 수 있었고, 동시에 어셈블리어보다 훨씬 간결했다. 운영체제처럼 컴퓨터의 깊은 부분을 만드는 데 적합했다.

C의 힘은 균형에 있었다. 너무 높은 곳에 떠 있지 않았고, 너무 낮은 곳에 갇혀 있지도 않았다. 필요한 경우 기계 가까이 내려갈 수 있었고, 대부분의 경우에는 사람이 이해하기 쉬운 구조로 프로그램을 짤 수 있었다.

이 특징은 매우 중요했다. 예전에는 특정 컴퓨터에 맞춰 프로그램을 만들면 다른 컴퓨터로 옮기기 어려웠다. 기계마다 구조가 달랐기 때문이다. 하지만 C로 작성한 프로그램은 비교적 쉽게 다른 기계로 옮길 수 있었다. 완벽한 마법은 아니었지만, 컴퓨터 세계에 "이식성"이라는 중요한 생각을 심어 주었다. 이식성이란 한 환경에서 만든 프로그램을 다른 환경에서도 돌아가게 만들 수 있는 성질이다.

운영체제, 보이지 않는 무대 감독

프로그래밍 언어가 사람의 생각을 컴퓨터 명령으로 바꿔 주었다면, 운영체제는 컴퓨터 안의 모든 일을 조율했다.

초기 컴퓨터는 한 번에 하나의 작업을 처리하는 경우가 많았다. 사용자는 프로그램을 준비해 제출하고, 결과가 나올 때까지 기다렸다. 컴퓨터실의 운영자는 작업 순서를 정하고, 기계를 관리했다. 컴퓨터가 비싼 시대였기 때문에 한순간도 놀리면 안 됐다.

그러다 여러 사람이 한 컴퓨터를 함께 쓰는 방식이 중요해졌다. 특히 시분할 시스템은 컴퓨터의 시간을 아주 잘게 쪼개 여러 사용자에게 나눠 주었다. 사용자는 마치 자기 혼자 컴퓨터를 쓰는 것처럼 느꼈지만, 실제로는 운영체제가 뒤에서 빠르게 작업을 바꿔 가며 처리하고 있었다.

운영체제는 무대 감독과 같았다. 배우가 무대 위에서 자연스럽게 움직이려면 뒤에서 조명, 소품, 음악, 등장 순서를 맞추는 사람이 필요하다. 컴퓨터에서도 마찬가지였다. 사용자가 프로그램을 실행하면 운영체제는 중앙처리장치, 메모리, 저장장치, 입력장치, 출력장치를 조율했다.

운영체제가 하는 일은 크게 네 가지로 볼 수 있다.

첫째, 파일을 관리한다. 사람은 디스크의 물리적 위치를 외우고 싶지 않다. "보고서.txt"처럼 이름을 붙여 저장하고 다시 열고 싶다. 운영체제는 복잡한 저장장치의 구조를 파일과 폴더라는 익숙한 방식으로 보여 준다.

둘째, 메모리를 관리한다. 여러 프로그램이 동시에 실행되면 각자 작업 공간이 필요하다. 운영체제는 어느 프로그램에 얼마만큼의 메모리를 줄지 정하고, 서로의 공간을 침범하지 않도록 막는다.

셋째, 장치를 관리한다. 키보드, 화면, 프린터, 디스크, 네트워크 장비는 모두 다르게 생겼고 다르게 작동한다. 운영체제는 장치 드라이버를 통해 이 차이를 숨긴다. 덕분에 프로그램은 장치의 세부 구조를 전부 몰라도 사용할 수 있다.

넷째, 작업을 관리한다. 어떤 프로그램을 먼저 실행할지, 멈춘 프로그램을 어떻게 처리할지, 여러 사용자의 요청을 어떻게 나눌지 결정한다. 컴퓨터가 복잡해질수록 이 조율 능력은 더 중요해졌다.

운영체제가 없었다면 컴퓨터 사용자는 매번 기계의 내부와 직접 싸워야 했을 것이다. 운영체제는 그 싸움을 대신 맡아 주었다.

유닉스, 작게 만들고 함께 잇다

운영체제의 역사에서 유닉스는 특별한 자리를 차지한다. 유닉스는 거대한 계획으로만 만들어진 운영체제가 아니었다. 연구소의 개발자들이 실제로 쓰기 좋은 환경을 만들려는 과정에서 자라났다.

유닉스의 중요한 생각은 단순함이었다. 하나의 프로그램이 모든 일을 하게 만들기보다, 작은 도구들이 각자 한 가지 일을 잘하게 만들었다. 그리고 그 도구들을 연결해 더 큰 일을 하게 했다. 이때 파이프라는 개념이 큰 역할을 했다. 한 프로그램의 결과를 다른 프로그램의 입력으로 넘기는 방식이다.

이 생각은 개발자에게 강력했다. 작은 도구를 조립해 새로운 일을 만들 수 있었기 때문이다. 마치 레고 블록처럼, 이미 있는 명령을 이어 붙이면 예상보다 복잡한 작업도 처리할 수 있었다.

유닉스는 또 "많은 것을 파일처럼 다룬다"는 생각을 발전시켰다. 일반 파일뿐 아니라 장치와 입출력도 비슷한 방식으로 접근하게 만들었다. 이 단순한 관점은 프로그래머가 시스템을 이해하고 다루기 쉽게 만들었다.

무엇보다 유닉스는 C 언어와 함께 성장했다. 운영체제를 C로 작성하면 특정 기계에만 묶이지 않고 다른 컴퓨터로 옮기기 쉬웠다. 유닉스는 여러 대학과 연구소로 퍼져 나갔고, 그곳에서 많은 개발자가 같은 철학을 배웠다. 간결한 도구, 명확한 인터페이스, 여러 사용자가 함께 쓰는 환경, 네트워크를 자연스럽게 받아들이는 문화가 만들어졌다.

유닉스는 단순한 운영체제가 아니라 개발자들의 사고방식이 되었다.

소스코드를 나눠 보던 사람들

오늘날 우리는 오픈소스라는 말을 자주 쓴다. 누구나 소스코드를 보고, 고치고, 공유할 수 있는 방식이다. 이 이름이 널리 쓰이기 전에도 비슷한 문화는 이미 자라고 있었다.

초기의 컴퓨터 세계에서는 소프트웨어만 따로 파는 시장이 지금처럼 크지 않았다. 컴퓨터는 비싼 하드웨어였고, 프로그램은 그 기계를 쓰기 위한 지식에 가까웠다. 대학과 연구소의 개발자들은 코드를 서로 보여 주고, 고치고, 개선했다. 같은 문제를 겪는 사람끼리 해결책을 나누는 것이 자연스러웠다.

해커 커뮤니티도 중요한 역할을 했다. 여기서 해커란 남의 시스템을 망가뜨리는 사람만을 뜻하지 않는다. 원래의 의미에 가까운 해커는 시스템을 깊이 이해하고, 더 우아하고 재미있는 방식으로 고치려는 사람이다. 이들에게 코드는 숨겨야 할 물건이라기보다 함께 읽고 배울 수 있는 지식이었다.

유닉스가 대학으로 퍼진 것도 이런 분위기에 영향을 주었다. 학생과 연구자들은 운영체제의 내부를 들여다보며 배웠고, 필요한 기능을 고쳤고, 새로운 도구를 만들었다. 나중에 자유 소프트웨어 운동과 오픈소스 운동이 등장할 수 있었던 바탕에는 이런 공유와 수정의 습관이 있었다.

소프트웨어의 역사는 회사 제품의 역사이기도 하지만, 동시에 함께 배우고 고치려는 사람들의 역사이기도 하다.

하드웨어를 도구로 바꾼 번역가들

컴퓨터는 전기를 흘려 계산하는 기계에서 출발했다. 하지만 사람이 직접 기계어만 써야 했다면, 컴퓨터는 소수 전문가의 장비로 오래 남았을 것이다.

어셈블리어는 기계어의 벽을 조금 낮췄다. 포트란은 과학자의 수식을 컴퓨터가 풀게 했다. 코볼은 회사의 장부와 기록을 컴퓨터의 일로 바꿨다. C는 운영체제와 시스템 소프트웨어를 더 유연하게 만들었다. 운영체제는 파일, 메모리, 장치, 작업을 조율하며 컴퓨터를 사람이 쓸 수 있는 환경으로 바꾸었다. 유닉스와 개발자 문화는 소프트웨어를 함께 만들고 나누는 방식까지 남겼다.

이 모든 변화의 핵심은 하나다. 컴퓨터가 인간을 이해한 것이 아니라, 소프트웨어가 인간과 컴퓨터 사이를 번역했다.

이제 컴퓨터는 더 이상 컴퓨터실 안의 신비한 기계로만 머물지 않게 된다. 운영체제와 프로그래밍 언어가 길을 닦자, 다음 변화가 찾아왔다. 컴퓨터는 전문가의 방을 벗어나 개인의 책상 위로 올라갈 준비를 하고 있었다.

책 목록

한 권으로 읽는 IT의 역사: 주판에서 생성형 AI까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기