나는 왜 개발자가 되고 싶었지?
초등학교 진로 수업 시간, 장래 희망을 적는 활동이 있었다. 나는 과학이 흥미롭다고 생각하여 막연히 과학자가 되고 싶다는 꿈을 꾸었다. 초등학교 6년 동안 나의 꿈은 과학자였다. 하지만 초등학교를 졸업할 때 즈음, 내가 상상했던 과학자의 모습과 현실이 다를지도 모른다는 생각이 들었다. 그 순간부터 나는 ‘내가 진짜 하고 싶은 것은 무엇일까?’라는 고민을 하기 시작했다.
그 무렵, 나는 메이플스토리라는 게임을 즐겨했다. 게임을 좋아했던 나는 하루에도 몇 시간씩 캐릭터를 키우며 아이템을 모았다. 그런데 어느 날, 내 계정이 해킹당했다. 내가 모아둔 아이템과 메소가 모두 사라졌다. 어린 나이에 받았던 충격은 컸다. ‘어떻게 이런 일이 벌어질 수 있지?’ 억울함과 분노가 동시에 밀려왔다. 그날 이후, 나는 ‘해킹’이라는 것에 대해 알아보기 시작했다.
해커는 나쁜 직업이라는 생각이 들었다. 하지만 인터넷을 찾아보니, ‘화이트 해커’라는 존재가 있었다. 나는 ‘착한 해커’가 되고 싶다는 꿈을 꾸게 되었다. 그때 친하게 지내던 친구가 내게 말했다.
“일단 Visual Basic부터 배워봐.”
Visual Basic? 처음 들어보는 이름이었다. 나는 네이버에 검색했고, 예제를 찾아 하나씩 따라 해보기 시작했다.
처음 만든 프로그램은 정말 단순했다. 윈도우 메시지 창을 띄우고, 버튼을 눌러서 글씨 색을 바꾸는 정도였다. 하지만 그게 너무 신기했다. 평소에는 에러 메시지로만 보던 창을, 이제는 내가 직접 만들 수 있었다. 내가 원하는 메시지를 입력하고, 직접 실행하는 경험은 내가 직접 컴퓨터를 조작하는 듯한 기분이었다.
더 깊이 배우고 싶었다. 그래서 검색했다.
“화이트 해커가 되려면 무엇을 공부해야 하나요?”
대부분의 답변이 같았다. “일단 C언어부터 배워라.”
나는 C언어 책을 찾아보기 시작했고, 그렇게 ‘열혈 C 프로그래밍’이라는 책을 처음으로 읽기 시작했다. 그 순간, 나는 단순한 유저에서 ‘만드는 사람’이 되고 싶어졌다. 그것이 내가 개발을 시작한 순간이었다.
열혈 C 프로그래밍 책을 끝내고 다음 공부할 과목을 고민하고 있었다. 같은 저자의 TCP/IP 소켓 프로그래밍이 눈에 띄었다. 채팅 프로그램 같은 네트워크 기반 프로그램을 만들 수 있다는 생각에 흥미가 생겼다. 다음 공부는 소켓 프로그래밍으로 결정했다. 책 배송을 기다리고 포장을 열어봤다. 내가 주문을 잘못한 건지, 배송 측에서 잘못 보낸 건지는 모르겠지만 열혈 자료구조라는 책이 배송되었다.
반품하고 다시 주문할까 고민했지만, 일단 자료구조라는 게 뭔지 궁금해서 책을 펼쳐봤다. 머리말을 읽으면서, 자료구조가 프로그래밍의 기초를 탄탄하게 다지는 과정이라는 생각이 들었다. 단순한 호기심이었지만, 이왕 이렇게 된 김에 한번 깊이 파보기로 했다.
자료구조를 배우니 자연스럽게 탐색, 정렬 알고리즘을 접하였다. 백준 온라인 저지, 알고스팟에 접속해 문제도 풀어봤다.
컴퓨터를 공부하다 보니 일반 고등학교에 진학해서 국어, 영어, 수학을 공부하고 싶지 않았다. 그냥 계속 컴퓨터만 공부하고 싶었다. IT 특성화고를 찾다가 한국디지털미디어고등학교(디미고)를 발견했고, 너무 가고 싶었다.
그렇게 디미고를 목표로 삼았고, 그 학교에서 주최하는 전국 중학생 IT 올림피아드를 알게 되었다. 대회라는 걸 처음 접했고, 더 알아보니 정보올림피아드 같은 대회도 있었다. 그때 처음으로 ‘대회에 나가보고 싶다’는 생각이 들었다.
중학교 2학년 때, 전국 중학생 IT 올림피아드에 참가했다. 하지만 예선에서 탈락했다. 너무 허무했다. 광주에서 안산까지 멀리 갔는데, 겨우 2시간 필기 시험을 보고 다시 집으로 돌아가야 한다는 사실이 받아들이기 어려웠다. ‘이렇게 끝이라고?’ 실력 부족이라는 걸 인정할 수밖에 없었지만, 내년에 반드시 다시 도전하겠다고 결심했다.
중학교 3학년이 된 나는 전보다 자료구조와 알고리즘에 대한 지식이 늘어 있었다. 그리고 다시 도전했다. 정보올림피아드와 전국 중학생 IT 올림피아드에서 동상을 받았고, 희망하던 디미고에도 합격했다. 목표를 다 이루고 중학교를 졸업하게 되었다.
한국디지털미디어고등학교 해킹방어과에 입학해 TRUST라는 보안 동아리에 들어갔다. 시스템 해킹, 리버스 엔지니어링, 웹 해킹, 포렌식 중 한 가지 분야를 선택해야 했다. 시스템 해킹이 뭔가 멋있어 보여서 선택했다. 직접 바이너리를 분석하고 어셈블리어를 C언어로 변환하며 취약점을 탐색했다. 동아리 친구들과 Lord Of BufferOverFlow 문제 풀이를 시작했다.
하지만 바이너리 분석은 생각보다 많은 인내심과 집중력이 필요했다. C언어를 공부하던 때와는 차원이 다른 어려움을 느꼈다. 옆에 있던 친구는 나와 같은 시기에 시작했지만, 성장 속도가 눈에 띄게 달랐다. 20문제 중 7~8번 문제를 풀고 있을 때, 그 친구는 거의 마무리 단계에 있었다.
사이버 가디언즈 챌린지라는 대회에 참가했다. 예선을 겨우 통과해 본선에 진출했다. 하지만 본선은 개인전이 아닌 팀전이었다. 문제는, 나는 팀에 기여한 것이 거의 없었다. 팀원들이 문제를 척척 풀어내는 동안 나는 따라가는 것조차 벅찼다. 결국 팀 덕분에 2등을 했지만, 기쁘지 않았다. 오히려 씁쓸했다.
대회를 마치고 돌아가는 버스에서 창밖을 보며 생각했다.
“나는 정말 해킹을 계속할 수 있을까?”
그렇게 나는 해킹 공부를 그만두었다.
2학년이 되어 게임 동아리 Cracker에 가입했다. Cocos 2d-X를 이용해서 게임을 만드는 동아리였다. 동아리 친구와 함께 인디게임 위크엔드라는 게임잼에 참가했다. 무박 3일 동안 게임을 제작해야 했는데, 2학년 생활 중 가장 즐거웠던 순간이었다.
대회 개막식에서 팀 빌딩을 하는 순간, 심장이 뛰는 게 느껴졌다.
‘내 분야는 게임 개발이다!’
대회를 마치고 나서도 계속 게임 개발을 공부했다. 하지만 아무리 공부해도 뭔가 그럴싸한 작품이 나오지 않았다. 게임을 만든다는 것은 단순히 프로그래밍만 잘한다고 되는 게 아니었다. 아트, 기획, 음악 등 예술적인 요소가 결합된 작업이라는 걸 깨달았다. 코딩은 자신 있었지만, 게임 기획과 디자인에서는 한계를 느꼈다. 결국, 게임 개발도 내 길이 아니라는 생각이 들었다.
그렇게 나는 게임 개발을 그만두었다.
어느 날, 친구가 해커톤에 나가자고 권유했다. 농아인을 위한 수어 인식이 주제였다. 수어를 인식하려면 영상 처리 기술이 필요했고, OpenCV 라이브러리를 다루어야 했다.
“OpenCV? 영상 처리? 한 번도 해본 적이 없는데?”
주저하는 나에게 친구가 말했다.
“그까짓 거 그냥 해봐. 할 수 있잖아.”
이상하게도 그 말이 용기가 됐다. 처음엔 하나도 몰랐지만, 하나씩 코드를 따라 하면서 조금씩 결과가 나왔다. 처음으로 영상 처리의 세계를 접했고, 몰라도 일단 시도해보는 게 중요하다는 사실을 깨달았다. 이후 몇 개의 영상 처리 프로젝트를 더 진행했다.
그렇게 다양한 경험을 거치며 나는 점점 내가 원하는 방향을 찾기 시작했다. 그리고, 국민대학교 소프트웨어학부에 입학했다.
대학교에 입학한 후, 과 단체 채팅방에서 자율주행 동아리 FOSCAR 홍보글을 보았다. ROS를 공부하고, 자율주행 대회에 참가했다. 뉴스에서만 보던 자율주행을 직접 구현하니 신기하고 재미있었다. 임베디드 소프트웨어 경진대회에도 참가해 영상 처리를 담당했다. 결과는 1등이었다.
입학 후 2년이 지나고 군대에 입대했다. 고전적인 영상 처리 알고리즘의 한계를 느끼고 딥러닝 공부를 시작했다. 밑바닥부터 시작하는 딥러닝 책을 선택했다. 말로만 듣던 인공지능을 직접 구현하니 신기했다. 항상 “공부해야지” 하고 미뤘던 인공지능의 첫 발걸음을 내딛었다.
전역 후 다시 FOSCAR로 돌아왔다. 가입하자마자 시뮬레이션 기반 자율주행 대회에 참가했다. 하드웨어를 다루지 않기에 개발이 더 편리했다. 다음 해에는 대학생창작모빌리티경진대회에도 참여했다. 학부생이 참가하는 자율주행 대회 중 스케일이 가장 큰 대회였다. 약 8개월간 14명의 팀원이 준비했다.
하지만, 이 대회를 준비하면서 그렇게 즐겁지 않았다. 지치고 힘든 시간이 더 많았던 것 같다. 하드웨어를 직접 제어해야 한다는 점에서 컴퓨터 공학보다는 기계 공학, 자동차 공학이 더 적합한 분야처럼 보였다. 또한, 테스트 환경이 복잡하고 변수도 많아, 개발 자체보다 차량을 관리하고 실험하는 데 더 많은 시간을 쓰게 되었다. 점점 흥미를 잃었고, 결국 이 대회를 마지막으로 FOSCAR를 탈퇴했다.
나는 자율주행을 그만두었다.
이제 4학년이 되어 졸업 프로젝트를 준비해야 한다. 자율주행을 계속했더라면 관련 주제로 진행했겠지만, 그만두었으니 새로운 주제를 찾아야 했다.
“나는 뭘 좋아할까?”
항상 고민했지만, 여전히 답을 찾지 못했다.
취미로 기타를 연주하기에, “음악과 관련된 프로젝트를 해보면 재미있지 않을까?” 하는 막연한 생각이 들었다. 처음에는 이펙터 체인 추측 AI를 만들면 기타리스트들에게 도움이 될 거라고 생각했다. 톤 잡기가 어려운 기타리스트들이 많으니까. 하지만, 이펙터만으로 톤을 결정할 수 있는 게 아니었다. 연주 주법, 피킹의 강도, 바디 쉐입, 픽업, EQ 등 너무 많은 변수가 영향을 미쳤다.
아무리 생각해도, 이건 학부생 수준에서 해결할 수 있는 문제가 아니었다. 결국, 이 아이디어는 접어두기로 했다.
대신, 기타 연습을 도와주는 환경을 만들기로 했다. 연주의 어느 마디에서 음정이 얼마나 틀렸고, 박자가 얼마나 빠르거나 느려졌는지를 분석해주는 프로그램을 만들기로 했다. 이 프로젝트를 계기로 음성 처리 공부를 시작했다.
사실, 음성 처리도 여태 지나온 것처럼 조금 하다가 흥미를 잃고 다른 분야로 갈아탈 수도 있다.
그래서 나는 아직도 “넌 어떤 분야야?”라는 질문에 명확히 답하지 못한다.
이렇게 돌아보니, 새로운 기술을 배우고 그것을 활용해 무언가를 만들어 내는 과정이 즐거웠던 것 같다. 나는 그래서 개발자가 되고 싶었다. 어떤 분야든 상관없이,