테크레시피

인터넷을 형성한 세상을 바꾼 코드들

인터넷은 이제 인간의 삶에 있어 없어서는 안 될 대상이다. 이런 인터넷을 형성한 기술 중 세상을 바꾼 코드에는 어떤 게 있을까.

먼저 1725년 이진 천공카드. 이진 프로그래밍이 시작된 건 현대 컴퓨터 등장보다 훨씬 이전이다. 1725년 프랑스 리옹에서 일하던 바실 부송(Basile Bouchon)이 종이에 구멍을 뚫어 기계를 제어하는 방법을 짜냈다. 구멍이 뚫린 부분은 1, 구멍이 없는 부분은 0을 의미한다. 이 2진수로 직기를 제어한 것이다. 0과 1로 기계를 제어하는 개념은 현대 코드의 기초와 다르지 않기 때문에 컴퓨터가 존재하지 않던 1725년 태어난 천공카드는 첫 번째 코드라고 할 수 있다.

다음은 1948년. 세계 첫 컴퓨터 프로그래머 중 하나로 잘 알려진 폰 노이만과 로스알라모스국립연구소 연구원인 니콜라스 메트로폴리스는 에니악(ENIAC)을 이용해 처음으로 현대적인 코드를 실행했다. 첫 번째 코드는 읽기 전용 메모리에서 실행한 수백 개 수치 명령이었다. 프로그래밍은 몬테카를로법을 이용해 원자폭탄 설계 시뮬레이션에 이용하는 확률 분포를 반복 맵핑했다고 한다.

다음으로 1952년 프로그래밍 언어인 코볼(COBOL)의 창조자로 알려진 그레이스 호퍼는 초기 컴퓨터로 프로그래밍을 하던 인물 중 하나다. 그녀는 제2차세계대전 중 해군 예비역으로 군에 입대했을 때 군 상사가 바이너리 코드를 이해하는데 어려움을 겪는 모습을 본 경험에서 프로그래밍을 더 인간 언어로 이해하기 쉬운 것으로 하는 걸 목표로 했다고 한다.

호퍼의 아이디어는 어떤 이들에겐 조롱의 대상이었지만 1950년 초까지 컴파일러를 고안한다. 첫 번째 컴퍼일러는 인간이 언어로 이해할 수 있는 코드를 컴퓨터가 직접 처리할 수 있는 명령 세트로 변환하는 것이었다.

이후 호퍼는 동료와 함께 세계 첫 영어에 가까운 표기를 한 데이터 처리 프로그래밍 언어인 플로매틱(FLOW-MATIC)을 개발했다. 호퍼가 만든 컴파일러로 컴퓨터가 단어를 처리할 수 있게 됐다.

1961년 후반 MIT 학생들은 PDP-1을 이용할 수 있게 됐다. 당시 비군사컴퓨터에서 최첨단 컴퓨터였던 PDP-1은 12만 달러에 팔리던 최고가였다. 워드 길이는 18비트, 표준 주기억장치는 4K워드 그러니까 9KB 상당 용량으로 최대 64K워드 그러니까 144KB까지 확장 가능한 컴퓨터였다.

학생 그룹은 프로그래밍을 위한 스토리지에 종이테이프를 이용해 5개월간 플레이어 2명이 우주선을 제어하는 스페이스 워라는 게임을 만든다. 스페이스 워는 코어 메모리에 탑재한 PDP-1과 함께 DEC에 의해 배포되면서 초기 해커 커뮤니티에서 빠르게 확산, 게임 개발자에 큰 영향을 준다. 현재도 에뮬레이터 등으로 스페이스 워를 즐길 수 있고 컴퓨터 역사 박물관에 전시된 PDP-1에서도 정기적으로 시연을 하기도 한다.

다음은 1961년 MIT 해커가 여러 사용자가 동시에 동일한 컴퓨터에 로그인할 수 있는 시스템인 시분할 시스템을 개발했다. 그리고 1965년 코더가 시분할 시스템을 이용하는 사용자가 서로 통신할 수 있는 방법으로 디지털 문서를 송수신, 표시할 수 있는 명령 시스템을 만든다.

WHENEVER A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE

PRFULL.($’R’1INSTRUCTIONS:$)

PRFULL.($ ‘4MAIL NAME1 NAME2 PROB1 PROG1 PROB2 PROG2 …$)

PRFULL.($ WHERE ‘=NAME1 NAME2’= IS THE FILE TO BE MAILED,$)

PRFULL.($ AND ‘=PROBN PROGN’= ARE DIRECTORIES TO WHICH ‘8$,

1 $IT IS TO BE SENT.’B$)

CHNCOM.(0)

END OF CONDITIONAL

다음은 인류 첫 달 착륙에 성공한 아폴로11호는 아폴로 유도 컴퓨터 AGC라는 아폴라 우주선의 전체 항해 기능을 자동 제어하고 우주 비행사가 비행 정보를 확인, 수정하는데 이용한 컴퓨터를 탑재했다. AGC는 제한된 전력과 스토리지 공간에서의 동작을 요청하기 때문에 항상 가장 중요한 작업에 집중할 수 있도록 해야 했다. AGC 소프트웨어를 개발한 팀은 계획에 없던 사태 발생 가능성을 고려해 코드(BAILOUT)를 작성한다. 이는 AGC가 공간 부족이나 오버플로 위기에 노출되면 중요한 데이터와 선체 작업만은 유지할 수 있게 중요하지 않은 데이터와 작업을 예약하는 것이다.

달착륙선 이글이 달을 향해 강하할 때 이글의 AGC가 동작 불량인 1202 경보를 울렸다. 이 경보 이유는 닐 암스트롱 등의 경우 곧바로 인식하지 못했지만 미션 제어를 하는 컴퓨터 전문가는 AGC로 설정한 코드(BAILOUT)가 정상 작동하는 것으로 이해했다. 다시 말해 우선순위가 낮은 작업을 취소하고 중요한 선체 제어 등 작업을 재개했기 때문에 달 강하는 문제가 없었다는 것이다.

POODOO INHINT

CA Q

TS ALMCADR

TC BANKCALL

CADR VAC5STOR # STORE ERASABLES FOR DEBUGGING PURPOSES.

INDEX ALMCADR

CAF 0

ABORT2 TC BORTENT

OCT77770 OCT 77770 # DONT MOVE

CA V37FLBIT # IS AVERAGE G ON

MASK FLAGWRD7

CCS A

TC WHIMPER -1 # YES. DONT DO POODOO. DO BAILOUT.

TC DOWNFLAG

ADRES STATEFLG

TC DOWNFLAG

ADRES REINTFLG

TC DOWNFLAG

ADRES NODOFLAG

TC BANKCALL

CADR MR.KLEAN

TC WHIMPER

새로운 프로그래밍 언어를 배울 때 처음 하는 건 컴퓨터에 ‘Hello, world!’라는 문구를 표시하는 일이었다. 이 문구는 1974년 벨연구소가 발표한 프로그래밍 교본(Programming in CA Tutorial)에 적혀 있는 것이지만 이전인 1972년 쓰인 다른 교본에도 적혀 있다.

main( ) { printf(“hello, world\n”); }

1988년 당시 23세이던 미국인 계산기 과학자 로버트 T 모리스는 모리스 웜이라는 세계 첫 악성코드를 개발한다. 이 웜은 인터넷에서 처음 등장한 공격으로 인터넷에 연결된 컴퓨터를 공격하는데 쓰여 많은 피해를 낳았다. 뉴욕타임스는 이 때 처음으로 지면에 인터넷이라는 말을 썼다고 한다. 당시 프로그래밍을 잘 알던 인물조차도 모리스 웜의 확산 범위에는 놀랐다고 한다. 모리스 웜을 이용해 공격할 의도는 없었다지만 세계 첫 컴퓨터 사기와 남용에 관한 법률(Computer Fraud and Abuse Act)에 근거해 기소된 첫 인물로 기록되기도 했다. 3년간 보호 관찰을 선도받은 뒤 모리스는 와이콤비네이터 공동 설립자이자 MIT 내 컴퓨터과학 분야 교수가 됐다.

다음으로 1990년대. 컴퓨터 시스템에서 수행되는 도스(DoS) 공격 일종이 포크(Fork)다. 이중에서도 유명한 건 다음 코드다.

: ( ) { : | : & } ; :

이 코드르 실행시키려면 배치를 이용하는 등 특정 조건이 필요하지만 실행하면 컴퓨터가 사용 가능한 모든 메모리를 소비해 단말이 충돌할 때까지 작동을 멈출 수 없다. 코드는 매우 간단하지만 위험성은 높다. 하지만 그 이상으로 특징적인 함수에 콜론을 이용하는 점, 대부분 함수는 ‘Print’와 ‘isThisEmailValid’라는 친숙한 이름이 붙어 있지만 그렇게 해야 한다는 규칙이 있는 건 아니다. 대부분 컴퓨팅 언어에선 함수명에 콜론을 쓸 수 없지만 배치에서 사용할 수 있었다는 게 한 줄로도 동작하는 흉악한 바이러스를 만들어내는 계기가 된 것으로 알려져 있다.

다음은 1990년 W3(World Wide Web)을 고안해 하이퍼텍스트 시스템을 구현한 팀 버너스 리는 하이퍼텍스트에서 여러 문서를 묶는 링크 기능으로 하이퍼링크를 만든다.

<a href = “https://techrecipe.co.kr/”>techrecipe</a>

팀 버너스리가 만든 하이퍼링크는 현재 인터넷 상에 존재하는 모든 버튼, 링크의 기반이 되고 있다. 하이퍼링크는 모든 것에 접속할 수 세상을 바꾼 있는 툴이라고 할 수 있다.

1992년 통합사진전문가단체(Joint Photographic Experts Group)가 이미지 파일을 압축하기 위한 표준 사양으로 JPEG를 공개했다. 당시는 다른 데이터 압축 포맷도 가능했지만 JPEG가 세계 표준 포맷이 된 이유 중 하나는 로열티 때문이다. 또 JPEG는 인간의 눈으로는 감지할 수 없는 이미지 측면을 제거하는 과정에 비손실 압축 방식을 채용했다. 이후 MP3와 같은 손실 압축 방식의 데이터 압축 형식에도 큰 영향을 미쳤다.

NCSA 모자이크는 1993년 출시된 웹브라우저로 미 국립슈퍼컴퓨터응용연구소 NCSA가 개발한 소프트웨어다. 모자이크가 등장할 때까지 브라우저는 불친절한 텍스트를 렌더링할 수 있는 경우에도 이미지는 다른 위도가 아니면 볼 수 없는 등 제한이 있었다. 이런 가운데 탄생한 모자이크는 이미지와 텍스트를 창 하나에서 볼 수 있는 오늘날 웹브라우저의 기초를 먼저 실현했다. 이미지와 텍스트가 같은 화면에 나란히 표시되게 해 인터넷 콘텐츠가 잡지나 신문처럼 친숙해져 많은 사용자를 모으는 계기가 되기도 했다.

특정 웹페이지를 열 때 자동으로 맨 위에 표시되는 팝업 광고가 탄생한 건 1990년대 중반이다. 여기에서 팝업 광고는 폭발적으로 인터넷으로 확산된다. 무료 홈페이지에 좋아하는 콘텐츠를 올릴 수 있지만 이런 페이지를 유지하려면 광고를 게재하고 수익을 창출해야 한다. 하지만 광고주는 자신이 광고를 게재하는 페이지 방문자가 항상 광고를 선호한다고 생각하기 때문에 웹콘텐츠와 광고를 분리하는 아이디어를 낸다. 이게 팝업 광고다.

팝업 광고는 콘텐츠와 광고를 분리해 표시하는 생각이었지만 페이지를 표시할 때 화면 맨 앞에 광고창이 표시되어 버린다는 점에서 오히려 광고를 밀어내는 것이 되어 폭발적인 인기를 얻었다.

다음은 1996년. 구글은 검색엔진에서 웹페이지 중요도를 결정하는 알고리즘으로 페이지 랭크를 이용하고 있다. 이전까지 검색어가 문서 내 단어와 일치 여부에 따라 정보를 정리했지만 구글 페이지랭크는 온라인에서 링크된 페이지 수에 따라 페이지 순위를 표시하는 알고리즘이다.

다음은 2002년 룸바 안내 시스템. 룸바가 등장한 건 2002년이다. 등장 당시에는 그다지 현명한 청소기는 아니었을지 모르지만 현재 시점에서 고성능 로봇 청소기다. 룸바 개발사인 아이로봇이 첫 번째 로봇청소기를 개발한 건 아니지만 룸바는 로봇청소기에선 처음으로 안내 시스템을 탑재했다. 이는 로봇청소기 혁명을 주도했다고 할 수 있다.

(define-behavior (bounce

:start-when (or (bump?)

bounce-trigger? )

:abort-when (bump-edge?)

:onetime? t

)

)

다음은 2008년 비트코인. 폭발적 인기를 얻은 암호화폐라는 말을 세상에 알려지게 한 건 비트코인이다. 비트코인은 개발자 나카모토 사토시가 2008년 공개한 백서에서 비롯됐다. 비트코인은 공격자가 비트코인 블록체인을 납치할 가능성을 무한하게 작게 하기 위한 코드를 포함하고 있다. 이 코드는 비트코인이 신뢰할 수 없는 사람에게 만들어진 시스템에도 세계가 신뢰할 만한 납득을 주고 2,777가지 다른 암호화폐의 미래를 여는 계기가 됐다.

2009년 페이스북은 좋아요 버튼을 구현했다. 페이스북은 사용자가 친구 게시물에 댓글을 쓸 만한 시간적 여유가 없다고 가정하고 더 간단하고 쉽게 게시물 내용에 표현을 하는 기능으로 좋아요 버튼을 만든다. 좋아요 버튼은 전 세계 사용자가 더 많은 정보를 공유할 수 있도록 해 2012년까지 1조번 이상 좋아요 버튼이 눌려지게 됐다고 한다. 좋아요 버튼은 아래 코드로 실현하고 있다.

{“__typename”:”PageLikeAction”,”action_type”:”LIKE”,”label”:{“text”:”Like”}

관련 내용은 이곳에서 확인할 수 있다.