두 군데의 스타트업에서 개발자로 일하면서 느낀 점
오늘은 오랜만에 내 이야기를 좀 해보려 한다.
나는 올 한 해동안 두 군데의 스타트업(상반기에 한 번, 하반기에 한 번)에서 각각 두 세달 정도씩 인턴을 했었다. 분야는 웹 프론트엔드 였으며 둘 다 지인을 통해 알게 되었고 들어가서 일을 하게 되었다. 참고로 스타트업에서 개발자 인턴을 하는 건 생각보다 그렇게 어렵지 않을 수 있다. 왜냐하면 99%의 스타트업은 개발자가 항상 부족한 상황이기 때문이다. ㅎㅎ
작년 여름 영국에서 돌아와서 국비 지원 과정을 시작하면서 코딩을 배우기 시작했다. 2018년 말, 나의 실력은 딱 국비 지원 3~4개월 받은 사람의 수준 그 이상도 그 이하도 아니었다. 관련 글에도 자세하게 적었지만 나는 국비 지원 과정에 불만이 많았고 회의감도 느꼈다. 그래서 언제 나올 수 있을지 계속 고민하던 도중 아는 스타트업 대표 형으로부터 연락을 받았고, 몇 번의 연락 후에 나는 그 회사에 웹 프론트엔드 개발 인턴으로 들어가게 되었다.
첫 번째 회사 : T사, 옷 사이즈 추천 서비스 스타트업, 당시 직원 수 5명
나는 회사에서 인턴이지만 유일한 웹 프론트엔드 개발자였기에, 모든 웹 프론트엔드 개발에 관련된 일을 혼자 해야 했었다. 당시 회사 직원 수는 나 포함 다섯 명이었다. 안드로이드 개발을 하는 대표, 서버 개발을 하는 공동창업자, iOS 개발자, UI/UX 디자이너, 그리고 나. 회사는 당시 설립된지 1~2년 정도 되었고 직원들은 모두 20대 중후반이었다. 나는 인턴 경험을 돈 보다는 실력을 키우는 데에 목표를 두고 있었고, 또 당시에 졸업하려면 '현장실습'이라는 과목을 필수로 수강해야 했는데 이 현장실습 6학점을 인턴쉽을 통해 할 수 있어서 겸사겸사 일을 시작하게 되었다. 월급은 그냥 최저시급보다 살짝 높은 정도 수준으로 받았던 것으로 기억한다.
나는 인턴이었지만 그냥 팀원으로서 똑같이 프로젝트의 일부분을 개발했다. 회사에서 필요한 웹 어플리케이션을 개발하는 일을 했었고, 이를 위해서 외부 API를 사용하면서 OAuth2.0 방식의 인증 절차를 거쳐야 했었다. 그냥 혼자서 프로젝트를 할 때랑은 많이 달랐고, 주변에 직접 물어볼 수 있는 사람이 없어서 굉장히 힘들었다. 다행히도 해당 API를 제공하는 개발사 팀장님 연락처를 받아, 카톡으로 정말 많이 물어봤었다. 그리고 기본적인 코딩에 관한 질문은 대부분 생활코딩이나 OKKY에 글을 올려서 해결했고 StackOverFlow의 도움도 많이 받았었다.
이 당시 나는 프론트엔드 프레임워크를 쓸 수 있는 수준이 아니었다. 그냥 HTML, CSS, JS(ES5)의 기초적인 개념들만 가지고 만들었다. 그리고 jQuery를 배워서 쓰기 시작했다. 그 당시에는 뭐가 좋고 뭐가 Outdated 되었고 이런 것들에 대한 개념이 거의 없었던 것 같다. 제이쿼리는 빠르게 배우기 쉬웠고 정말 편했다. 그리고 내가 사용하던 API 회사에서도 jQuery를 권장하기도 했었다. 당시에는 자바스크립트의 중요한 특징들을 알고 쓰는 수준까지 가지 못했고, 그냥 기능 구현을 하는 것만 해도 정말 벅찼던 것 같다. 어떤 기능을 구현하는데 대표는 며칠 정도가 걸릴 것 같은지 나에게 물어봤었고, 나는 그런 질문을 받아본 적이 없었어서 되게 난감했었다. 그냥 혼자서 열심히 프로젝트를 하던 것과는 다른 점이 너무나도 많았다.
ajax를 통해서 서버에 요청을 보내고, 응답을 받고 그렇게 받은 데이터를 가지고 어플리케이션을 만들고 그러다가 CORS 에러나면 한 번씩 나면 오랫동안 삽질하고 ㅠㅠㅠ 이 당시에는 어떠한 알고리즘의 시간복잡도가 얼마나 되고, 공간복잡도가 얼마나 되고 이런 고민도 안하고 그냥 '코딩'만 했었다. ㅋㅋㅋㅋ 컴퓨터 사이언스에 대한 지식이 전무하던 시기였다고나 할까. 그게 중요한지도 잘 몰랐었고, 몰라도 크게 문제가 안 되는 수준의 어플리케이션을 만들었다. 특정 정보를 가져오기 위해 토큰을 통해 인증을 받는 절차도 처음 다뤄보았는데 ㅋㅋㅋㅋ 진짜 삽질 많이 했었다. ㅠㅠ
첫 번째 스타트업에서 3달 정도 일을 하면서 느낀 점이 있다면, 기회가 주어진다면 가능한 빨리 일을 해 보면 좋다는 점이다. 이게 쉽다는 의미는 결코 아니다. 개인적으로 프로젝트 할 때와 비교해 보면 신경써야 할 것들이 더 많고 난이도도 더 높다. 아마 처음 일을 하다 보면 스트레스도 많이 받고 자존감도 많이 떨어질 수 있다. 하지만 분명하게 말 할 수 있는 건, 나는 이 시기가 지나고 나서 정말 눈에 띌 만큼 성장을 했던 것으로 기억한다. 엄청나게 불편했던 HTML, CSS, JS가 이 시기를 거치고 나니까 편-안 하게 느껴지기 시작했다 ㅋㅋ
이 당시에는 질문하는 연습도 정말 많이 했었다. '그냥 잘 안 되니까 해결해줘' 라는 식으로 질문을 하면 안 된다는 걸 몇 번의 시행착오를 통해서 깨달았다. 내 수준에서 충분히 고민을 하고, 관련해서 자료도 찾아보고, 그래도 안 되면 최대한 구체적으로 질문을 하려고 노력했다. 물론 이게 개발이 잘 안되면 쉽지는 않다. 나는 이 당시에 나의 엄청 귀찮을 수도 있는 질문들을 열심히 받아준 주변 개발자 친구들, API 개발사 팀장님, 그리고 생활코딩 멤버들에게 정말정말 감사하다 ㅠㅠ 세 달 동안 일을 하면서 나는 돈은 많이 받지는 못 했지만 '개발 실력'이 늘었고, '질문하는 법'을 터득했다. 지금 돌이켜 보면 돈보다 훨씬 값진 것들이 아닐 수 없다.
두 번째 회사 : A사, 형광펜 하이라이트 서비스 스타트업, 당시 직원 수 7명
첫 번째 스타트업에서 나와서 나는 복학을 했고, 프로그래밍 동아리도 하고, 대외활동도 하고, 해커톤도 두 번 나갔다. 그러는 과정에서 실력을 많이 쌓았다. 쓸 수 있는 기술들도 많아졌고 도메인 지식의 영역도 넓어진 느낌을 받았다. 그렇게 몇 달이 지나고 나서 두 번째 스타트업에서 인턴을 하게 될 기회를 얻었다. 여기서는 오래 있지는 못했고 두 달 정도 짧게 파트타임으로 일을 했었다. 내가 알게 된지는 3년 정도 된 곳이고 내가 개인적으로 대표님과 회사가 멋있다고 생각한 곳이어서, 당시 내 상황이 사실 좀 빡빡했음에도 불구하고 좋은 기회인 것 같아 일을 시작하게 되었다. 이 회사 역시 웹 프론트엔드 개발자는 나 혼자였고 대신 자바스크립트를 잘 아는 사람이 회사에 두 명 정도 있어서 질문을 자유롭게 할 수 있었던 점이 정말 좋았다. 여기서 급여는 그래도 지난 인턴에 비해 1.5배 정도 받았던 것 같다 ㅎㅎ
지난 회사보다는 좀 더 도전적인 일을 여기에서 진행했었다. 기존에 짜여져 있는 코드가 있었고, 자체 라이브러리도 있는 회사였다. 이러한 코드를 먼저 익히고 이를 바탕으로 새로운 기능을 추가하는 업무를 맡아서 진행을 했었다. 남들이 짜 놓은 코드를 읽는 일은 생각보다 어려웠다. 주석도 친절하지 않았고 함수명이나 변수명도 이해하기 어려운 적이 너무 많았다. 또한 자체 라이브러리도 구체적인 문서로 설명해 놓은 자료가 없어서 과거 코드를 보면서 유추할 수 밖에 없는 점이 조금 힘들었다. 하지만 뒤집어 생각해 보면 미래에 내 코드를 보는 누군가도 아마 비슷한 생각을 하지 않을까 싶다. ㅋㅋㅋ
나는 Vue.js라는 프레임워크를 올해 초에 배웠고 여러 번 프로젝트를 통해 경험을 했었다. 그래서 이 스타트업에서 개발을 할 때도 적용을 해 보고 싶었다. 하지만 기존에 짜여져 있는 코드를 Vue로 바꾸는 작업은 생각보다 "정말" 고려해야 할 부분이 많았고 어려웠다. 환경설정부터 시작해서 vue-cli로 자동으로 완성시켜 주는 라이브러리를 쓰지 않고 한땀 한땀 직접 다 구현해야 했기 때문에 내 역량으로는 무리였고 결국에는 하지 못했다. 그냥 단순하게 Vue 환경에서 개발만 해 봤었지, 왜 Vue를 써야 하고 어떻게 Vue를 기존 프로젝트에 적용할 수 있는지에 대해서 고민해 본 적은 없었던 것 같다. 새로운 경험이었다.
A사에서는 자체적으로 만든 테스트 서버와 여러개의 DB들 그리고 이러한 파이프라인을 연결해 주는 소프트웨어까지.. 내가 처음 보는 툴이 정말 많았다. 물론 이를 한 번에 다 알 수는 없지만, 그동안 내가 알고 있었던 분야가 정말 얕았고 한정적이었다는 걸 깨닫기에는 충분했다. 단순하게 코드만 잘 짜면 되는 줄 알았는데, 여기서는 코드를 짜는게 개발의 전부가 아님을 몸으로 배웠던 것 같다. 네트워크와 운영체제, 그리고 아키텍처에 대한 이해까지.. 더 뛰어난 개발자가 되기 위해서 알아야 하는 것들이 너무 많았다. 어떠한 기술을 쓰기 위해서는 그 기술의 장점을 가지고 팀원들을 설득해야 하는데 이를 위해서도 여러가지 기술을 골고루 넓게 알아야 할 필요성을 절실하게 느꼈던 것 같다.
자바스크립트도 더 깊게 사용하기 시작했다. 어떻게 하면 이벤트를 더 효율적으로 부여할 수 있는지를 고민하면서 코드를 짰고, ES6의 특성들을 활용해 보려고 노력했다. Event Bubbling, Hoisting, Closure, Prototype 등 자바스크립트 책에서 배웠던 개념들이 좋은 코드를 짜기 위해서 필요한 개념이라는 것을 일을 하면서 느끼게 되었다. 개발자로 일을 하면서 공부를 소홀히 할 수 없는 이유가 여기에 있는 것 같다. 연관해서 알아야 할 개념이 정말정말 많고... 문제는 계속해서 새로 또 나온다는 점이다. ㅋㅋㅋㅠㅠ Callback과 Promise, async/await 에 대해서도 여기서 일을 하면서 처음으로 제대로 사용해 볼 수 있었다.
스택오버플로우나 생활코딩에 질문해서 해결할 수 없는 문제들도 하나 둘 마주하기 시작했다. 단순하게 구글링을 해 보아도 답이 나오지 않고 주변에 물어보는 것에도 한계를 느끼는 순간들이 왔으며, 이럴 때는 내가 그 문제를 뚫고 나아가야 했다. 더 깊이있게 개념을 파고들고, 제대로 이해하려고 노력했다. 그러다 보면 해결이 되는 문제들도 있고, 내 역량이 부족해서 해결이 안 되는 문제들도 있지만... 이렇게 고민했던 순간들이 쌓이고 쌓여서 실력이 늘게 되는 것 같다. ㅋㅋ
두 번째 회사에서는 짧은 시간이었지만 있으면서 배운 점은 컴퓨터 사이언스 지식이 일정 수준 이상의 프로그래머가 되기 위해서는 필수적이라는 점이었다. 그냥 프로그래밍 언어나 프레임워크만 보면 몇 달 학원에서 빡세게 해서 배울 수 있고 그렇게 개발자가 될 수도 있다. 하지만, 여기서 더 높은 수준의 개발자가 되기 위해서는 단순한 프로그래밍 언어나 특정 프레임워크에 익숙한 것 뿐만 아니라 전체적인 아키텍처를 보고 성능적인 면에서도 고민을 할 수 있는 지식이 필요하다는 걸 이 회사에서 일하면서 느꼈다. 자료구조, 알고리즘, 운영체제, 네트워크, 데이터베이스 이 다섯 가지는 최소한 어떤 분야의 소프트웨어 엔지니어가 되더라도 기본적으로 알아야 하는 개념이라고 생각한다.
또 배운 점이 있다면 깊이 있게 고민을 할 수 있는 체력과 실력을 키워야 한다는 점이었다. 앞서 말한 것처럼 이제는 현업에서 구글링으로 해결하지 못하는 문제들을 점점 더 마주하게 될 것이다. 결국은 그러면 그 문제는 본인이 스스로 해결해야 하고 그 능력이 곧 높은 연봉을 의미한다고 생각을 한다. 그만큼 어렵기 때문이다. 이렇게 문제를 해결할 수 있는 충분한 체력과 넓은 지식의 영역이 훌륭한 소프트웨어 엔지니어가 되기 위해서 정말 필요한 조건이라는 생각이 강하게 들었다.
전반적으로 스타트업에 대해 느낀 점
개발자가 성장하기에는 정말 좋은 환경이다. 빨리 서비스를 만들어서 출시해야 하기 때문이다. 이는 곧 스타트업에 장점이자 단점이 되는데 빨리 만들다 보니 실력은 빨리 늘 수 있지만, 개발물의 퀄리티까지 높은 수준을 맞추는 건 현실적으로 어렵고 깊이 있는 고민 보다는 빠른 해결책을 찾아야 하는 경우가 많다. 그러다 보니 기술적 부채(Technical Debt)가 쌓이고 이는 사실 대부분의 스타트업이 가지고 있는 고민이다. 코드를 리팩토링 하거나 체계적인 규칙을 가지고 짜기에는 여건이 충분하지 않은 경우가 많다.
새로운 기술을 도입하기에 좋은 환경이다. 사람도 소수이고 연령대도 어린 경우가 많아서 새로운 기술에 열려있는 회사가 많다. 물론 새로운 기술을 쓰고 싶다면 왜 그 기술을 써야 하는지 충분하게 설득을 시킬 수 있어야 한다. 이러한 점에서 스타트업은 두루두루 다양하게 넓은 지식을 가진 사람이 유리할 수도 있는 환경이다. 반면에 이렇게 빠르게 바뀔 수 있는 문화를 가졌기 때문에 체계적이기는 어려운 경우가 많다. 새로운 시도를 하기를 좋아하고 변화에 거부감이 없다면 스타트업에 합류하는 것도 충분히 매력적인 선택지가 될 수 있다고 생각한다.