저는 어린 시절부터 컴퓨터를 좋아했습니다. 컴퓨터를 좋아했다고 말하면 많은 분들은 "아. 어린 시절부터 코딩에 소질이 있었나?"라고 상상하시곤 합니다. 하지만 정확히 말씀드리자면 저는 '코딩'이 아니라 '컴퓨터로 하는 모든 시간'에 흥미를 느꼈습니다.
그 시절 저에게 컴퓨터의 용도는 두 가지로 압축됩니다. 하나는 도망칠 수 있는 방이었고, 다른 하나는 세상으로 나갈 수 있는 창구였습니다.
고등학교 시절에는 공부로 늘 숨이 막혔습니다. 왜 해야 하는지 설명도 해주지 않는 공부를 억지로 하려다 보니, 제 마음은 항상 탈출구를 찾고 있었습니다. 그 탈출구는 게임이었습니다. 책상 위의 교과서는 "해야 하는 일"이었고, 모니터 속의 게임은 "내가 선택한 일"이었습니다. 그 차이는 컸습니다.
게임은 저에게 요구하지 않았습니다. "너 이거 왜 하려고 해?"라고 묻지 않았습니다. "너 목표가 뭐야?"라고 심문하지도 않았습니다. "지금 너의 현재 위치는 전국 몇 등이야?" 같은 말을 물어오지도 않았습니다.
게임은 그냥 "할래?"라고 묻고, 제가 "응"이라고 하면 바로 시작해도 되는 세계였습니다. 그래서 저는 그 세계가 편했습니다. 푹 빠져 지냈습니다. 어쩌면 저는 공부를 피한 게 아니라, 설명 없는 통제를 피했는지도 모릅니다. 그 피신처가 컴퓨터였을 뿐입니다.
Turbo C 책 앞에서의 좌절
고등학교 시절에 저는 한 번 마음을 먹고 프로그래밍이라는 걸 해보려고 시도했습니다. 서점에 들러 프로그래밍 코너에서 두꺼운 'Turbo C 프로그래밍'이라는 책을 구매했습니다. 표지에는 뭔가 번쩍이는 회로 사진과 함께 '쉽게 배우는'이라는 문장이 항상 붙어 있었죠. 저는 그 '쉽게'라는 단어에 혹했습니다. 진짜 믿었습니다.
책을 구입하고 펼쳤습니다. 그다음 장면은 아주 간단합니다. 모든 글자가 저에게는 외계어였습니다. 평소에 책을 가까이하지 않아서 글을 읽어도 무슨 말인지 이해하지 못했습니다.
더군다나 프로그래밍 언어에서 설명하는 단어가 'main 함수가 어쩌고', '포인터는 이런 것이고', '메모리를 참조한다는 개념은', 'printf()로 문자열을 출력해 보자' 나타나자 머리부터 아팠습니다.
저는 '문자열(string)'이라는 단어에서부터 이미 길을 잃었습니다. 왜냐하면 제 머릿속에서는 '문자+열'은 그냥 '글자 줄줄이' 정도의 뜻이었는데, 책에서는 마치 그게 이미 모두가 알기로 약속된 전문용어처럼 쓰이고 있었습니다. 어떤 개념을 혼자서 모두 파악하기에는 진입장벽이 높았습니다.
초대받지 않은 방에 들어온 것처럼 느꼈습니다. 마치 프로그래밍은 내부자들의 언어 같았습니다. 저는 그냥 문 앞에 선 구경꾼 같았고요. 결국 책을 덮었습니다. 덮었다기보다는 책꽂이 구석으로 사라졌습니다. 저는 그걸 '내가 게을러서 포기했다'라고 오래도록 생각했습니다. 그런데 지금 돌이켜보면 꼭 그런 건 아니었다고 말하고 싶네요.
그 당시의 저는 '만드는 법'을 배우고 싶었습니다. 그런데 그 책은 '만드는 이유' 없이 곧바로 '문법'을 던졌습니다. 저는 이유가 없으면 잘 움직이지 않습니다. 그건 이전 글에서도 말했던 저의 성향이었습니다.
"왜 이걸 이렇게 써야 하지?"
"왜 괄호를 이렇게 닫아야 하는 걸까?"
"왜 세미콜론을 붙이지 않으면 안 될까?"
질문은 많았는데, 질문을 받아주는 존재는 없었습니다. 그래서 포기가 아니라, 단절이 일어났습니다.
1997년, 인터넷이 문을 열다
97년은 대한민국에 인터넷이 본격적으로 설치되던 시기였습니다. 지금 세대에게는 상상하기 어려운 감각일지 모르지만, 그때의 인터넷은 정말 "우와... 이게 진짜 실시간으로 다른 사람이랑 연결이 된다고?"라는 충격이었습니다.
전화선에 모뎀을 연결해서 '끼이이이잉. 삐삐빅.' 하는 소리를 들으면 어느 순간 화면에 텍스트가 보입니다. 채팅방이라는 게 있었고, 실명이 아닌 닉네임이라는 걸 처음으로 썼습니다. '이름 말고도 내가 될 수 있는 별명'이라는 감각은 해방 그 자체였습니다.
낯선 사람들과 의외로 깊은 이야기를 했습니다. 그 사람은 제 얼굴을 모르고, 저는 그 사람의 얼굴을 모릅니다. 이상하게도 그래서 더 솔직했습니다.
그리고 게임. 디아블로, 스타크래프트. 그 시절을 같이 지나온 분들은 아실 겁니다. 그건 단순한 오락이 아니었습니다. '같이 한다'라는 경험 자체가 문화였습니다. 혼자 플레이라는 감각에서 '같이 접속한다'라는 감각으로 넘어가는 순간이었죠.
저는 그 안에서 진짜로 살아 있다고 느꼈습니다. 현실에서는 "학교에서 몇 등?"이라는 질문이 핵심이었지만, 그 세계에서는 그러지 않았습니다. 온라인에서는 이런 질문이 더 중요했습니다.
"너 몇 시에 접속 가능해?"
"다음에 또 같이 할래?"
그건 제게 처음 온 협력의 언어이자 초대의 언어였죠. 그래서 저는 생각했습니다. '나는 이 세계가 너무 좋다. 그러니까 난 컴퓨터를 다루는 전산학과에 무조건 가야겠다.'
너무나 순수하고도 단순한 결정이었습니다. "좋아하는 것 = 진로"라고 믿던 시절의 선택이었습니다. 저는 게임이 좋아서 전산학과에 진학했습니다.
그런데요. '영화를 좋아하니까 영화과에 가야지'라고 생각했는데, 막상 들어가 보니까 '카메라 렌즈 곡률, 미분 방정식부터 외워라'라고 맞닥뜨리는 상황과 비슷했습니다.
전산학과의 현실: 게임을 좋아한다고 개발자가 되는 건 아니다.
전산학과에 입학하고 나서 깨달은 첫 번째 사실은 이것이었습니다. '아. 게임을 좋아하는 것과 게임을 만드는 것은 완전히 다르구나.'
저는 플레이어였습니다. 전산학과는 제작자를 키우는 곳이었습니다. 이 둘은 직감적으로 같은 것처럼 보이지만 실제로는 전혀 다릅니다.
강의실에서는 알고리즘, 자료 구조, 메모리 관리, 컴파일러, 운영체제, 객체지향 같은 말이 나왔습니다. 저는 어땠냐면요? 그 모든 것보다도 '이걸 왜 알아야 하죠?'에 먼저 걸려 있었습니다.
"정렬 알고리즘 여러 종류를 왜 배워요?"
"포인터를 왜 써요?"
"운영체제의 프로세스 스케줄링을 왜 알아야 하죠? 저는 그냥 스타 잘하고 싶은데.."
하지만 교수님은 그 질문을 전제로 수업하지 않았습니다. 당연히 알아야 하니까 배우는 겁니다. 저는 거기에서 또 막혔습니다.
게다가 대학 1학년은 공부 외에도 다른 유혹이 너무나도 많습니다. 어느 순간 성인이 되어 '밤늦게까지 있어도 아무도 뭐라 하지 않는 시간'이 생깁니다. 처음 마셔보는 술, 처음 새벽까지 붙잡고 있는 친구들, 처음 마음대로 이동할 수 있는 공간들. 공부보다 이런 것들에 더 끌렸습니다.
그건 방탕했기 때문이 아니라 그냥 처음이었기 때문입니다. 처음 가진 자유는 누구에게나 강력합니다. 그렇게 1학년은 정신없이 흘러갔습니다. '어느 과목이 중요한지' 같은 건 뒷전이었죠. 그때의 저는 그냥 '지금 나에게 허락된 자유라는 걸 만끽하고 있다'는 데에 정신이 팔려 있었습니다.
그게 청춘이라고 불리는 종류의 시간일지도 모르겠습니다. 그런데 문제는, 그 시간은 영원하지 않다는 데에 있었습니다. 그다음은 현실이 다가옵니다. 군입대.
군대 이후, 현실은 숫자처럼 선명해진다
군 복무를 마치고 다시 학교로 복학했을 때, 상황은 완전히 달라져 있었습니다. 전에는 "아.. 뭐 어떻게든 되겠지. 모르겠다. 한잔해."라는 마음이 가득했습니다. 돌아오니까 마음속에서 이런 목소리가 들립니다.
'너 지금 할 줄 아는 게 뭐냐?'
그 질문은 생각보다 무섭습니다. 나이가 조금만 들면, '나는 뭘 할 줄 아는 사람인가?'라는 질문은 더 이상 추상적인 질문이 아닙니다. 그건 '지금부터 네가 밥 벌어먹고 살 근거가 뭐냐'라는 질문이 됩니다.
저는 다시 전공을 바라보게 되었습니다. 전산학과. 컴퓨터공학과. 정보통신. 학교마다 이름은 조금씩 다를 수 있지만 결국 '컴퓨터로 문제를 푸는 사람'을 만들겠다는 학과. 그러면 나는 그동안 어떤 사람이 되어 있었는지 되돌아봤습니다.
C언어? 제대로 이해 못 했습니다. 포인터? 개념은 알겠는데 어떻게 써야 할지 전혀 모릅니다. 메모리 구조? 머릿속에서 맵이 안 그려졌습니다. C++? 객체지향? 클래스, 상속, 다형성? 그 단어들은 추상적인 외계 철학 같았습니다.
저는 이 상태에서 굉장히 큰 두려움을 느꼈습니다. '전산학 전공인데 프로그래밍을 못한다?' 이건 거의 정체성의 붕괴처럼 들렸습니다.
저는 전공자입니다. 그러니까 최소한 '개발자 후보'라도 되어야 하는 것은 아닐까? 근데 나는 그 최소한조차 안 되고 있는데?라는 아주 현실적인 공포를 느꼈습니다.
'나는 이 전공 안에서 실패자가 되는 건가?'
'졸업장을 받아도 나는 사실상 빈 껍데기인가?'
의외의 만남: 데이터베이스
그런데 그 시기에 제 인생을 살짝 틀어준 과목이 하나 있었습니다. 그것은 바로 데이터베이스. 데이터베이스 수업은 코드 한 줄부터 시작하지 않았습니다. 대신 이런 질문으로 시작했습니다.
"현실의 정보를 어떻게 구조화할 것인가?"
이 말은 저에게 너무 잘 들렸습니다. 왜냐하면 저는 혼란스러운 것들을 정리하는 걸 좋아했기 때문입니다. 혼란을 구조로 바꾸는 걸 좋아했습니다. 수업에서는 ER 다이어그램이라는 걸 다룹니다. 쉽게 말하면 '세상에 존재하는 것들(엔티티)이 서로 어떤 관계로 연결되어 있는가'를 시각적으로 표현하는 방식입니다.
예를 들어 설명하면 이렇습니다.
학생이 있다.
학생은 수업을 듣는다.
수업에는 교수가 있다.
교수는 여러 수업을 담당할 수 있다.
한 수업에는 여러 학생이 참여할 수 있다.
이러한 관계들을 선과 상자로 표현합니다.
"이건 1대 1 관계구나"
"이건 1대 N관계, 이건 N대 N 관계니까. 중간에 연결 테이블이 필요하네"
저는 수업을 점차 들으면서 이상하게 뇌 안에서 '딱' 하고 맞아떨어지는 소리를 들었습니다. 왜 맞았을까요? 그 이유는 제 성향과 관련이 있습니다.
저는 처음부터 완벽하게 만드는 사람은 아니었습니다. 대신 저는 복잡한 걸 펼쳐놓고 "이건 여기, 저건 저기"라고 분류하는 걸 꽤 잘했습니다. 즉, 전체 구조를 먼저 보고 싶어 하는 사람이었습니다. 데이터베이스 수업은 코드보다 먼저 구조를 말해줍니다. 그리고 그 구조는 현실 세계랑 직접 연결돼 있었습니다.
'가게가 있다면 재고가 있다. 재고는 상품이다. 상품에는 가격이 있다. 가격은 바뀔 수 있다. 그럼 그 히스토리는 어디에 저장할 것인가?" 이러한 물음은 저에게 너무 이해가 쉽게 다가왔습니다. 혼란을 표로 정리하고, 그 표들 사이에 관계를 정의하고, 그 관계를 통해서 나중에 원하는 정보를 꺼낼 수 있게 하는 작업 방식이 너무나 마음에 들었습니다.
저는 이 수업을 엄청 열심히 들었습니다. ER 다이어그램을 그리고 정규화하고, 릴레이션을 나누고, 키를 정의하고, 제약 조건을 걸고. 이런 것들은 하나도 두렵지 않았습니다. 오히려 재밌었습니다.
결과는 아주 명확했습니다. 그 과목은 A+라는 당연한 성적이었습니다. '당연하다'라고 표현할 만큼 확신이 있었습니다. 그것은 제가 할 수 있는 일이었습니다. 그 순간 저는 한 가지 희망을 붙잡았습니다. '혹시.. 코딩을 못해도 이 분야로 가면 먹고살 수 있지 않을까?', '프로그래머 말고 데이터베이스 분야로 가면 되지 않을까?', '나는 개발자 타입은 아니고, 구조를 관리하는 역할이 어울리는 것 같은데?'
저는 실제로 방향을 그쪽을 설정했습니다. 그 유명한 오라클 데이터베이스 자격증 공부를 했고, 당시에는 Oracle DBA 자격시험 중에 8i 자격증까지 취득했거든요. 그때 제 머릿속 생각은 이랬습니다.
'됐어. 이 정도면 취업은 되겠지.'
'나는 C++ 이런 거 몰라도 되겠네.'
'난 DBA로 직장 생활하면 되겠다.'
그런데 세상은 그렇게 만만하지 않았다
문제는 현실이었습니다. 취업 시장은 저에게 이렇게 말하고 있었습니다.
"DBA 하고 싶다고요? 좋아요. 근데 신입인데, 운영 경험은 있나요? 대규모 트래픽 튜닝은 해봤나요? 서비스 중단 없이 마이그레이션 한 경험은요? 실제 현업 장애 상황을 처리해 본 적은 있나요?"
당연하게도 해본 일이 없었습니다. 왜냐하면 저는 학생이었으니까요. 제가 할 수 있는 건 ER 다이어그램을 그리는 것이었습니다. 제가 할 수 있는 건 이상적으로 설계된 데이터 구조를 설명하는 것이었습니다. 그러나 현실은 저에게 이렇게 말했습니다.
"이상적인 설계만 할 줄 아는 사람은 이미 너무 많다. 우리는 실제로 돌아가는 걸 유지할 사람을 찾는다."
그 말은 이런 뜻입니다. '너의 이론은 인정한다. 그런데 현장은 전쟁터다. 전쟁터 경험이 있는 사람을 뽑는다.' 그때 저는 아주 단순하고도 잔인한 사실을 마주했습니다. '아. 나는 아직 전장에서 총을 한 번도 못 쏴봤구나.'
그 순간 알았습니다. '전산학 전공인데 코딩을 못한다'라는 불안은 단순히 감정적인 문제가 아니었습니다. 그건 진짜 생존 문제였습니다. 저는 전산학과에 있었지만, 아직 제대로 된 '무기'가 없었습니다. C도 자신 없고, C++은 더욱 자신 없고, 시스템도 자신 없고, 심지어 데이터베이스라는 분야조차 '현장 경험 없어도 들어갈 수 있는 안전지대'는 아니었습니다. 말하자면 저는 전공은 전산학인데 직업은 아직 아무것도 아닌 사람이었습니다.
돌이켜 보면 저는 이 시기에 자신에게 두 가지를 동시에 보고 있었습니다. 첫 번째는 분명히 강점은 있었다는 점입니다. 저는 구조화에 강했습니다. 복잡한 걸 정리하고 관계를 정의하는 능력은 분명히 있었습니다. 그건 그냥 공부해서 억지로 만든 게 아니라 제 안에 있던 성향이었습니다. 데이터베이스 수업은 그걸 확인시켜 줬습니다. '너는 쓸모없는 애가 아니야. 너는 다만 방식이 다를 뿐이야.' 이 메시지는 저에게 굉장히 큰 위안이었습니다.
두 번째로 현실은 냉정하다는 것입니다. 나에게 맞는 무기를 찾았다고 해서, 그 무기를 들고 바로 현장으로 뛰어들 수 없었습니다. 그 무기를 '실제로 써본 경험'이 시장에서는 더욱 중요했습니다. 쉽게 말하면 저는 지도를 잘 그리는 사람이었습니다. 그런데 회사는 "지도 그리는 건 좋은데, 일단 전쟁터에서 실제로 대응해 봤어?"라고 물어봤습니다. 저는 "아직은요..."라고 밖에 말할 수 없었습니다.
#컴퓨터 #코딩 #데이터베이스 #냉정한현실