2016년 3월 9일
꼭 컴퓨터 사이언스를 해야 하냐, 코딩 학원도 괜찮지 않냐, 뭐 코딩이 그렇게 어려운 것도 아닌데.. 등등의 얘기 듣는다. 맞는 말이다. 하지만 그것은 자신이 소프트웨어 엔지니어링이 필요 없는 환경만 알기 때문이기도 하다.
건축을 예를 들어보자. 누구든지 조금만 배우면 뒷마당에 헛간 만드는 정도는 할 수 있다. 웬만하면 설명서가 있을 거고, 유투브 비디오에 별 희한한 튜토리얼이 다 있으니 찾아보면 되겠다. 눈썰미가 있으면 그렇게 간단히 시작했다가 재미 붙여서 이래저래 잡다한 거 해 보다가 인테리어 고치는 작은 사업을 동네에서 할 수도 있겠다.
그렇지만 당신이라면 이 사람에게 고층 아파트 시공을 맡기겠는가? 아니라고? 왜? 이 사람이 멍청해서? 이 사람을 못 믿어서? 서울대를 안 나와서? 인맥이 없어서?
아뇨. 그걸 떠나서 이건 엔지니어링 문제거든요. 그리고 망하면 문제가 크잖아요. 헛간을 좀 잘못 만들어서 문이 제대로 안 닫히는 것과, 50층짜리 빌딩의 파운데이션이 제대로 안 된 거랑 이건 문제의 스케일이 다르다.
우리 팀에서 지금 처리하는 데이터가 일 초에 2백만 리퀘다.
이 규모를 설명하자면.
창구를 만들어서 클레임 데이터를 컴퓨터에 입력한다고 하자. A4 한 장을 타이프쳐서 입력하려면 꽤 오래 걸리겠지. 그렇지만 자동화 시스템을 만들어서, 종이를 넣기만 하면 자동으로 스캔 되어서 에러 없이 데이터베이스에 들어간다고 하자. (보통 한 리퀘스트는 A4 몇 장에서 몇십, 몇백 장일 수 있지만, 그냥 단순화해서 한 장이라고 치고.)
A4 종이를 계속 계속 입력하고, 그게 컴퓨터 데이터베이스에 들어가는 단순한 시스템인데, 1초에 천 장 정도 처리한다고 하자. 그걸 종이로 쌓으면 약 10센티 정도 높이다. 그럼 2백만 리퀘는? 에베레스트 반 정도 높이다. 한 시간이면? 지구를 한 바퀴 도는 정도의 높이다. 하루면 지구를 스물네 번 돌 만큼의 A4 종이를 처리한다는 얘기다.
그걸 컴퓨터 하나로 안 되지. 몇천 개의 컴퓨터가 동시에 처리한다. 그러면 한 군데에 두면 위험하고, 전 세계 데이터센터 x군데에서 돌아간다. 이럴 때 컴퓨터가 죽을 확률이 0.1%라고 해도, 천 대에 한 대는 죽는다는 말이다. 몇천 대가 돌아가면 당연히 하루에도 몇 대씩 죽는다. 그러면 그 컴퓨터가 맡았던 일을 다른 컴퓨터에 옮겨야 되고, 데이터를 잃으면 안 된다. 이게 다 자동화되어야 하고, 전체적인 상황이 어떤지 모니터도 할 수 있어야 한다. 혹시라도 시스템을 업데이트하면, 내 컴이나 회사 서버 한 대에서 돌아가는 프로그램 업데이트하는 거랑, 전 세계에 퍼져 있는 몇천 대/몇만대의 시스템을, 다운타임 전혀 없이 업데이트하는 것은 차원이 다를 수밖에 없다.
50층 빌딩을 지을 거면, 건축물의 설계는 알아야 한다. 기초를 어떻게 만들 건지 생각을 하고 지어야 한다. 전기 시스템, 물 시스템, 혹시라도 지진이 많은 지형이면 어떻게 대처할 건지, 공기 정화 시스템은 어떻게 할 건지, 엘리베이터는 어떻게 등등 생각할 것이 엄청 많다. 소프트웨어도 마찬가지다. 데이터베이스에 기록한다고 하면 말이 간단하지, 공책으로 비교하면 똑같은 공책에 수백 명이 동시에 적으려고 하면 어떻게 처리할 건지, 두 사람이 각각 다른 기록을 넣으면 어떻게 할 건지, 그렇게 적어가면서도 누군가가 그 공책을 보고 싶다고 하면 어떻게 보여줄 건지도 계획해야 한다. 이건 누가 똑똑해서, 혹은 열심히 하겠다고 해서 해결되는 문제가 아니다. 상당히 까다로운 엔지니어링 문제를 이해하고, 해결할 수 있어야 한다. 그래서 소프트웨어 엔지니어링이다(내가 든 예는 scale의 문제지만 다른 분야도 엄청 많다.).
이 바닥에서 못 버티겠다고 우는 소리 가끔 하는걸. 십 년 넘게 동네 건축업자 정도의 수준이었다가 갑자기 무섭게 지어나가는 고층 아파트 시공사에 들어오니까 내가 몰랐던 게 너무 많아서다. 똑똑해서 커버되는 것도 아니고 그냥 열심히 한다고 해서 해결되지도 않는다. 이건 그냥 정석으로 제대로 공부하거나 차근차근 경험 쌓아야 한다. 딱히 이게 작은 규모 건축보다 어렵다는 말도 아니다. 단지 풀어야 하는 문제가 다를 뿐이다. 오히려 작은 건축업체의 경우는 여러 분야의 경험을 다양하게 쌓을 기회가 많고 큰 시공사일수록 전문성은 늘어나지만, 전체적인 경험은 줄어든다. 그래서 젊을 때는 스타트업에서 일하는 것이 오히려 더 도움이 될 수도 있다. 큰 시공사에서 유리창 설치만 주구창창 하는 것보다 집 하나 전체를 짓는 기회가 주어질 수 있으니까.
기술직에서 학벌 크게 안 본다는 거 사실이다. 그렇지만 일은 할 줄 알아야 한다. 그래서 최고 좋은 지원자는 '이전에 고층 아파트 시공사에서 이런 일을 했고 지금 곧바로 투입 가능합니다' 이다. 누구 이름을 아는 게 중요한 게 아니라, 실제로 아파트 시공사에서 일하는 사람이 '얘 나랑 같이 일하던 앤데 xyz 할 줄 알아' 말해 줄 수 있는 게 도움 된다. 좋은 학벌이거나 아주 머리 좋다는 점을 어필하면, 아래부터 차근차근 일 배워올 거면 조금 더 유리할 수 있겠다.
거듭 말하지만, 고층 아파트 시공이 뭐 세상에서 제일 대단한 건 당연히 아니고, 엄청 천재들만 건축업계에 있는 것도 아니듯이 소프트웨어 쪽도 그렇다. 하지만 어느 업계나 그렇겠지만, 경험 쌓고 알아야 하는 부분이 많다. 그러나 아무래도 눈으로 보이지 않는 부분이라 그런지, 영어 일 년 배우고 영어 동시통역, 피아노 일 년 배우고 피아노 학원 하겠다는 사람은 별로 없어도 프로그래밍 배워서 취업...하겠다는 계획은 꽤 자주 듣는다. 불가능한 건 아닌데, 실제 (원하는 수준의) 취업은 그리 쉽지 않다.