인터뷰: 정성권

최종수정일: 2013.5.26

작성자: 안정배

일시: 2012.9.14

인터뷰 대상: 정성권

질문자: 안정배, 전응휘

via Skype

UNIX 설치 과정

서울대 전자계산기(현 컴퓨터)공학과의 PDP-11/44를 구미 전자기술연구소(KIET)의 VAX와 TCP/IP로 연결하기 위한 기반 운영체제로 UNIX가 선정되었다. PDP에 기본으로 탑재된 운영체제는 DEC에서 제공하는 RSX11이었으므로, (R은 realtime이란 뜻이다. 지금과 달리 당시는 운영체제가 다양했다.) 프로젝트의 첫 이정표는 PDP 컴퓨터에서의 UNIX 설치였다.

PDP 기종에 UNIX를 설치할 때, 가장 먼저 부딪친 문제는 특정 CPU 형상과 호환되는 UNIX 버전을 찾는 것이다. 당시 PDP에서 일반적으로 사용되는 UNIX는 버전7이었는데, 전길남 박사님이 UNIX 버전7이 담긴 마그네틱 테이프를 전해주셨다. 전길남 박사님 측에서 운영체제를 선정하고 호환되는 버전을 파악해서 우리에게 자료를 전해주셨기 때문에 바로 설치 작업을 시작할 수 있었다.

국내 최초의 UNIX는 KIET의 VAX에 설치된 UNIX였을 가능성이 크다. 이 UNIX가 버전7이었는지는 모르겠다. 서울대는 KIET를 통해 UNIX를 받았다. 당시엔 대부분 마그네틱 테이프를 걸어놓고, 테잎으로부터 부팅하고 OS를 시스템에 올리는 방식이었다.

그런데 이유를 알 수 없는 문제로 우리가 사용했던 PDP11/44에서는 UNIX 버전7이 잘 설치되지 않는 것이었다. 요즘 같으면 그런 문제가 발생하면, 인터넷을 검색해서 해결책을 찾았겠지만, 당시에는 그런 도움을 받지 못한 상태로 정보 탐색을 해야 했다. 이 때도 전길남 박사님이 미국 쪽의 아는 분을 통해 해결책을 찾아줬던 것으로 알고 있다. 전길남 박사님도 전화나 편지(우편)로 이런 문제를 문의했을 가능성이 크다. 전길남 박사님이 DEC의 어느 연구소가 다양한 PDP 기종을 지원하는 새로운 버전의 UNIX를 개발해서 배포한다는 소식을 알려주셨다. (흥미롭게도, 지금은 웹에서 V7m 관련정보를 바로 찾을 수 있다. 참고: http://en.wikipedia.org/wiki/Version_7_Unix)

당시에는 이런 방식으로 해보면서, 안되면 몇 주가 흐르고, 또 몇 주가 흐르는 식이었다. 그래서 새롭게 찾은 버전이 UNIX 버전7m이었다. 전길남 박사님을 통해 이것이 있다는 이야기를 듣고 내가 DEC의 담당자에게 편지를 써서 우편으로 요청했다. 버전7m을 요청한 후 2~3주 지난 뒤, 릴 테이프가 하나 왔는데 이것을 다시 걸고 부팅을 했더니 감쪽같이 잘 되는 것이었다. UNIX 부팅이 안되는 상황에서는 TCP/IP 설치 작업을 전혀 진행할 수 없고 다른 해결책이 없는 어려운 상황이었기 때문에, 버젼7m의 부팅은 획기적인 첫 성과였다.

이렇게 PDP11에 UNIX가 처음 올라가면서, 우리 대학원생 팀원들은 그룹 스터디를 하며 시스템 명령어도 이것저것 사용해보고, 소스 코드도 살펴보았다. 당시에는 소스 코드를 넓은 라인 프린터 용지에 프린트해서 큰 책처럼 바인드해서 읽었는데, 출력한 커널 소스 바인더 두께가 7~8cm나 되었다. 소스코드가 이렇게 많으니까 인덱스도 따로 만들어 커널 소스를 찾아보는데 활용했다. (새로운 시스템의 대용량 소스 코드를 처음 대하는 학생으로서 쉘 스크립트로 자동 인덱스생성도구를 만들어 그 시스템을 이해하는 데 활용하는 것은 신선한 경험이었다.)

UNIX를 설치하기 전부터 UNIX를 이해하기 위해 스터디를 했는데, 우선 UNIX의 시스템 개념을 이해하고, 디렉토리, 계정부터 시작해서 커널까지 개념을 이해하고 사용법을 스스로 익힌 것이다. 시스템을 이해하고 커맨드를 사용할 수 있을 정도까지 주로 두권의 책을 보면서 배웠는데, 벨렙에서 출간한 UNIX 관련 논문 모음집과 C 언어 책(K&R C)이었다. 복사판 책을 제본해서 나눠갖고 스터디를 하는 식이었다. 그리고 나서 TCP/IP 솔루션인 UNET에 필요한 커널 인터페이스 작업을 하면서 시스템 속의 커널이 어떻게 되어 있는지는 소스 코드를 열어놓고 실제 경험을 해 본 것이다. 맨 땅에 헤딩을 한 셈이다.

처음 UNIX 버전7을 설치하느라 이것저것 하는데 몇 주일의 시간을 보냈고, 그 사이에 전길남 교수님이 새로운 버전(UNIX 버전7m)을 소개해줄 때까지 시간이 걸렸고, 그 다음에는 DEC에서 릴테잎을 배송받는 물리적인 시간이 걸렸으니 전체적으로는 근 두 달 정도 걸렸다. 설치를 하다가 막히면 다른 일을 하지 못하고 계속 작업을 해야 했기 때문에 이 기간 동안 밤을 새는 경우도 허다했다. 이것이 내가 석사 입학한 첫 학기였던 1982년 초반의 일이다.

UNIX 사용은 컴퓨터 네트워크(TCP/IP)를 염두에 둔 것

운영체제의 결정이 아주 중요한 결정이었을 텐데, 당시에는 학생이었기 때문에 그에 대한 이해가 그리 깊지 않았다. 다만, UNIX가 상당히 큰 흐름이었기 때문에 이를 고려해 전길남 교수님이 판단하셨던 것으로 기억한다. 당시 전길남 교수님이 UNIX의 중요성과 그 의미에 대해 우리에게도 간간이 얘기해주시곤 했다.

TCP/IP 네트워크 구축에는 3Com이 판매하는 UNET 소프트웨어를 사용했다. UNET은 UNIX에서 작동하는 TCP/IP 소프트웨어였고 소스도 포함되었다. 생각해보면 두 가지의 서로 관련된 흐름이 있었다. UNIX 자체가 큰 흐름이었고, UNET을 사용해 TCP/IP 네트워크를 구축하는 것이 또 하나이다.

UNET은 소프트웨어로 TCP/IP 네트워크를 구현하는 방식이라 당시 미국의 알파넷에서 소개되던 통신전용기기 방식과는 달랐다. 당시 관련 분야 책이나 논문에 알파넷의 IMP가 간간이 나왔는데 사실 그게 무엇인지 굉장히 궁금했었다. IMP 실물을 본 적은 없었지만, 전용 하드웨어로 구축하는 것이었고, UNET은 일반 컴퓨터에 소프트웨어를 올리는 방식이었다.

내가 대학원생 시절이었을 때는 LAN이 전혀 없었고, 그에 대한 정보를 찾기도 어려웠다. 우리가 사용할 수 있는 통신 미디어는 직렬 포트(serial port)가 전부였다. 물리적으로 도시와 도시를 연결할 수 있는 일반적인 통신 장비는 기본적으로 전화선 밖에 없었기 때문에 전화선에 모뎀을 연결해 세팅해야 했다. LAN 등은 내가 대학원을 마칠 쯤에 ETRI 연구실 등에서 LAN을 연구하기 시작했던 것으로 기억한다.

UNIX 커널의 수정

직렬포트를 UNET과 연동시키려면 UNIX 커널을 조정해야 했다. 직렬 포트 드라이버를 조정해서 UNET 제일 아래 계층의 TCP/IP 프로토콜 드라이버와 데이터를 주고받을 수 있게 연결해 하는데, 이런 장치 드라이버와 통신 드라이버가 연결 방식은 당시 UNIX 커널의 경우 고정된 테이블 안에 정의되었기 때문에 이것들을 맞춰주기 위해 커널을 수정해줘야 했던 것이다.

호환되는 시스템환경에서는 UNET을 설치하기 위해 UNIX 커널의 테이블만 세팅하면 됐다. 즉, 장치 드라이버 테이블을 수정하고, 커널을 컴파일해 올리면 작동해야 했다. UNET의 설치매뉴얼에도 커널의 어느 부분을 어떻게 고치면 된다고 나와있어서 어려운 작업이 아니었다. 그런데 그게 잘 되지 않았다. 이것이 두 번째 벽이었다. 그것은 정말 암담한 문제였다. 대개 시스템에 문제가 생기면 터미널에 오류 메시지가 표기된다든지 징후가 나타는데, 이것은 커널 안에서 통신 데이터를 읽어들이다가 유실되는 것이라서 아무것도 밖으로 나타나지 않는 것이었다. 보통은 직렬 포트와 연결이 잘 되면 어떤 변화(통신이 된다든지)가 일어나야 하는데 아무 변화 없이 통신 부분은 작동되지 않는 "먹통" 상태로 남아있는 것이었다.

이렇게 구체적인 것은 알아볼 수 있는 곳도 없을 것 같아서 커널 점검 작업을 본격적으로 시작했다. 요즘에는 커널 디버거도 있어서 운영체제의 커널 상태를 비교적 손쉽게 파악하면서 작업할 수 있지만, 당시에는 가장 초보적인 방법으로 할 수밖에 없었다. 어디서 문제가 생겼을지 예상하고 그 길목에 출력문을 넣어서 진행 상태를 하나하나 파악하면서 확인하는 방식이었다. 시간이 많이 걸릴 수 밖에 없었다. 커널을 고치고 다시 올리는 것만 해도 시간이 많이 걸렸다. 수정한 커널 소스를 컴파일하고 기다리는 시간이 길었기 때문에 당시 어떤 OS 매뉴얼에는 커널 컴파일을 시작한 후에 커피 휴식시간을 가지라고 권할 정도였다. 그러다보니 개발 속도가 더딜 수밖에 없었다. 이 때가 가장 고비였는데, 정확히 기억은 나지 않지만 한 달은 충분히 넘겼다.

KIET에서 이런 고생을 했다는 얘기는 듣지 못했다. 매뉴얼 대로 해서 잘 되었던 것으로 생각된다. 처음 하는 일이기 때문에 착오는 있었겠지만, 차의영 연구원에게 들은 바로는 서울대처럼 벽에 부딪친 적은 없었던 것으로 알고 있다. 하다 막히면 전화로 확인하곤 했다. KIET에서는 작업이 일찍 끝나고, 서울대는 고생을 했기 때문에 할 수 없이 커널을 많이 만지게 되었고 그런

경험은 쌓였다.

그런데 2012년 KRNET 발표자료를 만들면서, 이 문제에 대해 검색을 해봤더니 당시 우리와 유사한 환경에서 우리와 같은 별도의 수정 작업 없이 UNET을 잘 사용했다는 얘기가 있는 것이 아닌가? 한 USENET 디스커션 그룹에 SRI의 연구자가 쓴 글이었는데, UNIX version7을 설치한 PDP-11/44에 커널 수정 없이 UNET을 설치해 아무 문제 없이 사용해 잘 쓰고 있다는 내용을 보았다. 사실, UNIX 버전7도 PDP-11/44에 잘 올라간다는 버전(그래서 처음에는 버전7을 사용함)이었는데, 문제가 있었던 것을 보면, 아마 우리가 사용하는 PDP의 디바이스나 시스템 형상에 어딘가 조금 다른 게 있었던 것 같다. 그래서 버전7은 부팅이 안되고, 버전7m은 잘 되었으나 디바이스 드라이버가 약간 다른 경우였을 수 있다. 실제로 당시 커널에서 고친 부분은 직렬 포트 입력 부분의 조건문 한 줄 뿐이었다. 여러 시도 끝에 문제가 되었던 부분을 고친 후, 어느날 밤에 작동이 잘 되는 것을 보면서, 이제 이 고비를 넘었구나 하고 좋아했던 기억이 난다.

최초의 TCP/IP 네트워크 구축 장면

당시 연결은 전용회선이니까 항상 연결이 되어 있는 상태였다. DEC사의 컴퓨터에서 사용하던 UVTP(UNIX vertual terminal protocol)가 원격터미널 응용프로그램이었는데, 텔넷과 비슷하게 로그인해서 접속하는 방식이었다. 이것을 통해 KIET의 컴퓨터에 로그인해서 유닉스의 텍스트 메시지 명령어(write)로 당시 KIET의 차의영 연구원과 일종의 채팅 같이 "hello" 메시지를 보내보고, 이후 TCP/IP 기반의 메일 서버도 연동하였다. 이렇게 TCP/IP가 작동하는 것을 확인한 것이다. 서울대와 KIET는 전용선(직통전화회선)으로 연결되어 있었기 때문에 얼마 동안 그 연결을 유지했는지는 모르지만, 한동안 연결을 유지한 상태에서 이메일도 사용해보고 다른 실험도 하였다.

초기 네트워크 사용환경과 실태

그 이후에는 컴퓨터 네트워킹이 성공했으니까, 일종의 잠재적 사용자를 유치하기 위해 교수님들이나 대학원생들에게 알리는 설명회도 개최했다. KIET와 서울대 양쪽에서 메일 시스템을 운영했고, 양쪽 컴퓨터 간에서 메일을 주고 받고 할 수 있었다. 당시에는 영어만 사용할 수 있었다.

하지만 사용자들이 처음부터 활발하게 네트워크를 사용한 것은 아니었다. 사용자들에게 네트워크에 대해 설명을 하면, 네트워킹이 되었다는 것은 알겠는데, 한글도 안되고, 이메일이 있다고는 하지만 실용적으로 이메일을 쓰는 환경도 아니었으니까… 그러니까 실험은 했지만, 사용의 필요성이 크지 않았던 것 같다. 메일, 원격접속, FTP 모두 UNET 설치에 기본적으로 포함되어 있었기 때문에 환경은 갖춰져 있었다고 할 수 있지만, 굳이 사용할 필요가 크지 않았다. 이메일로 주고받을 무언가가 있어야 이메일을 사용하는데, 인사하는 것 말고는 할 수 있는 일이 거의 없었던 것이다. 당시 속도는 1.2Kbps로 기억하지만, 정확한 수치인지는 잘 기억나지 않는다. 그보다 빠르지는 않았던 것으로 기억한다. 전용선 연결은 당시 과의 조교 대학원생이었던 서울대 김영호가 맡았다. 테잎이 와서 UNIX를 깔던 당시에 KT의 직통전화회선이 깔리고, 모뎀이 오고 했던 기억이 난다.

프로젝트의 목적과 영향

전길남 박사님이 굉장히 열심히 프로젝트 관련 자료를 멤버들에게 보내주셨다. 당시에는 그 내용을 모두 이해하지는 못했지만, 중요한 것이라는 것을 느끼고 외부에서 많은 일이 일어나고 있음을 인지하던 정도라고 기억한다. UNET을 설치하는 것은 SDN 프로젝트의 기반이 되는 일인데, 이것을 국내에서 처음 하는 것이다 정도로 이해하고 있었다. 첫 프로젝트에서는 TCP/IP 솔루션으로 UNET 외에 다른 소프트웨어를 시도하지는 않았으나, 전화회선을 통한 UUCP/Usenet 연결 작업이 병행되었다. UNIX와 TCP/IP(UNET)라는 가장 중요한 두 시스템 요소를 전길남 박사님이 선택해서 계획을 하셨고, 우리는 실제 네트워크를 구축하는 작업을 한 것이다.

이 프로젝트와 같이 시스템의 하부 계층을 다루는 분야는 UNET 작업의 경우와 같은 계기가 없으면 특별한 노력을 들이기 전에는 접하기 쉽지 않다. 따라서 대학원생인 나에게는 이 프로젝트가 OS부터 TCP/IP까지 시스템 소스를 두루 보고 맞춰서 연동시키고, 버그를 찾으면서 그 안의 내용을 공부도 해보고, 디바이스들이 어떻게 얽혀있나 알아보기도 하는 귀중한 학습의 기회가 되었다. 그것이 학생에게는 아주 중요한 측면이었다. 전길남 박사님이 가끔 강조한 것도 이것이다. 미국에서 UNIX가 확산되고 있는데, 소스를 볼 수 있고 실험할 수 있어서 많은 사람들이 사용한다는 얘기를 종종하셨다. 나도 그 혜택을 받은 사람 중의 하나인 셈이다.

2013.5.26

문의: sec at InternetHistory.kr