Programmers 데브 코스를 마치며

김민기·2022년 8월 18일
post-thumbnail

데브코스를 시작하기 전

갑자기 안드로이드 앱 개발자?

 데브코스에 참여하기 전 나는 전자공학과를 졸업하고 중소 기업에 취업을 했었다. 전공과 맞는 직무를 원했지만 어쩌다 보니 안드로이드 어플리케이션 개발자라는 직무를 맡게되었다. 코딩을 한다는 건 같았지만 안드로이드를 배워본적도 없었고, 어플리케이션을 만들어본 경험도 없었다. 회사를 그만 둬야하나 생각도 했었지만 여기서 그만두면 도망친다는 생각이 들었고 한번 도전 해보자라는 생각을 갖고 부딪혔다. 처음으로 회사에서 사용하는 안드로이드 소스 코드를 받았을 때, 어디서부터 코드가 시작하는지 자바는 C++과 어떻게 다른지 아무것도 모르는 상태에서 여러 책들을 구매하고, 인터넷 강의도 듣고 코드 한줄을 이해하기 위해서 많은 시간을 소비했다.
 대학을 다닐 때 나는 코딩 수업을 정말 싫어했다. 교수님들은 언제나 정해진 시간내에 무언가를 만들어오라고 했고 시간에 쫓기며 이것저것 붙여넣기만 하는 코드를 만들어야 했기 때문에 내가 무엇을 만들고 있는지, 지금 하고 있는게 어떤 동작을 하는지 이해하지 못한채 빠르게 넘어가기 바빴기 때문이다. 하지만 혼자서 안드로이드 책을 천천히 읽어가며 코드를 작성하고 실행 결과를 눈으로 바로바로 확인할 수 있었기 때문에 코딩이라는게 정말 재미있다고 생각이 들었고, 어플리케이션 개발자가 되고 싶다는 생각이 들었다.

이제는 임베디드 앱 개발자?

 운명의 장난인 것인지 안드로이드에 익숙해지고 선배 개발자의 업무를 조금씩 도와줄 수 있을때 쯤 또 다시 나의 직무가 변경되었다. 오랜 기간동안 다음 버전이 없었던 모델이 갑자기 부품의 단종으로 인해 새로운 버전이 필요 했었고 최소 5년 이상은 지난 소스 코드를 분석해서 새로운 OS 버전에서 동작할 수 있게끔 MFC 프로그래밍을 만들었다. 단순한 마이그레이션 작업으로 생각했었지만 이전 회사에서는 소스 관리가 하나도 안되어 있었기 때문에 최신 소스 코드를 찾을 수가 없었고, 같은 OS이지만 버전이 달라짐에 따라 에러가 발생하기도 하고 실제 제품에서 보여지는 화면에서도 차이가 발생했다. MFC는 그래도 학부생 시절에 해본 경험이 있기 때문에 쉬울것 같았지만 새롭게 개발되는 OS이기보다 워낙 레거시가 된 OS였기 때문에 최신 자료는 찾을 수 없었고 BSP에 의존성이 강하게 엮여 있어 무엇하나 추가하기 어려운 상황이였다.
 다행히 새로 만든 모델을 문제 없이 양산하기 시작하면서 다음 프로젝트가 주어졌다. 같은 모델이었지만 이번에는 리눅스에서 동작하는 앱을 만들기 위해 Qt를 사용한 앱을 만들어야 했다. 갑자기 Qt라는걸 배워야 한다니... 앞으로 어떻게 개발을 해야할지 눈앞이 깜깜했다. Qt를 미리 공부하기 위해 책을 찾아보거나 인터넷 강의를 찾아봤지만 마땅한 책이나 강의가 없었다. 자료 또한 옛날 자료가 대부분이였고, 그나마 국내에 한권정도 있는 도서는 Qt 공식문서를 번역한 수준이었다. 자료가 부족하다 보니 실무에서 정말 많은 시행착오가 있었고, 왜 동작하지 않는지 정확한 이유를 찾기도 어려웠다. 그래도 내가 만든 앱이 동작한다는 것은 이전에 있던 힘든일을 모두 잊게 만들어 주었다.

매너리즘?

 앞서 만들었던 앱들은 모두 임베디드 시스템에서 동작하는 애플리케이션들이었고, 동작할 수 있는 제품이 없는 상황에서는 실행조차 하지 못하는 것들이었다. 또한 내가 만든 앱은 실제 사용자가 제품에서 사용하는 앱이 아닌, 같은 회사 내 생산팀에서 생산단계에서 제품 테스트를 위해 사용하는 앱들이었다. 같은 제품에 대해서 두 번 만들다 보니, 어려운 부분들을 미리 파악하고 먼저 준비하고, 프로그램의 흐름이나 로직등을 이미 알고 있기 때문에 두 번째 개발에는 큰 어려움 없이 프로젝트가 완료되었다. 이 때부터 무언가 새로운것을 배워보고 싶었고 BSP라는 제약 없이 소프트웨어를 만들어보고 싶다는 생각을 갖게 되었다.

새로운 기회?

 이런저런 생각에 방황하고 있었을때 쯤 새로운 프로젝트를 맡게 되었는데, 이번에는 생산단계에서 사용하는 앱이 아닌 실제 고객들이 사용하는 앱을 만들 수 있는 기회였다. 하지만 크나큰 문제를 만나게 되었는데, 아직 사원인 내가 혼자서 앱의 모든 것을 결정했어야 했다. 사실 Qt를 정식으로 배워보지 않았기 때문에 이때만 해도 Qt Widget 을 사용해야 하는지 Qt Quick을 사용해야 하는지 검색을 해도 명확한 답을 얻기 어려웠다. 혼자 개발을 해야하고 혼자 책임을 져야하는 상황이었는데 처음 시작부터 잘못되면 프로젝트를 모두 뒤엎어야 했고 그렇게 되면 혼자서는 도저히 감당할 수 없었다. 무책임한 말일수도 있지만 이전 회사에서는 나를 끌어줄 시니어가 없었다. 나와 정말 많이 친했고, 소프트웨어 개발 관심사도 비슷하면서 개발자가 무엇인지 알려주신 팀장님도 이전 프로젝트를 끝으로 회사를 떠났기 때문에 어디에 하소연할 곳도 없었다...
 사실 이것보다 가장 큰 문제는 개발 과정이었다. 하드웨어가 준비되고 BSP가 완성된 다음 디자인이 어느정도 완성이 된 상태에서 앱 개발을 할 수 있었기 때문에 나에게 주어지는 프로젝트 기간은 짧았다. PC에서 미리 만들어보면서 이것저것 연습해보았지만, 제품에서 사용하는 Qt 버전에 맞춰야하기 때문에 새롭게 추가된 Qt6 또는 Qt5의 기능들을 사용할 수 없었고 어떤 앱을 만들어야 할지도 모르는 상황이어서 방황하는 시간이 늘어났다.

퇴사한 이유

소스코드 관리

 이전 회사에서는 소스 관리 툴로 SVN, GitLab을 사용했다. 하지만 SVN, GitLab을 따로 관리하다 보니 소스코드 관리가 전혀 되질 않았다. 또한 처음에는 몰랐지만 소스코드를 그냥 파일채로 압축해서 이름만 변경한 다음 SVN에 파일을 업로드 하는 방식으로 소스를 관리했다. Git을 사용했지만, PR, issue 같은 것들은 전혀 사용하지 않았고 누가 언제 무엇을 수정했는지 회사에 오래 있던 사람만 알 수 있을뿐 새로 들어오는 사람이나 중간에 프로젝트를 맡은 사람은 아무 것도 알 수 없었다. 일례로 처음 맡았던 오래되었던 모델의 신모델을 만들 때도 당연히 Git, SVN에 저장되어 있는 최신 일자에 맞춰서 UI를 만들고 기능을 추가했는데, 생산팀에서 왜 3년전 프로그램과 동일하냐는 말을 들었다... 알고 보니 이전 책임자가 최신으로 되어 있는 소스코드에서 상당 부분을 추가 했음에도 소스 관리를 하지 않았기 때문에 이전 책임자의 PC에만 코드가 저장되어 있었고 그 PC마저 없어졌기 때문에 나는 결국 최신 소스코드가 무엇인지 알 수 없었고 눈으로 비교해가며 맞춰나갔다...

협업의 부재

 소프트웨어 개발자 뿐만 아니라 개발자라면 협업이 매우 중요하다는 말은 들었지만 나는 제대로된 협업이라는 것을 해본적이 없었다. 혼자서 시작부터 끝까지 개발을 진행했고, 프로젝트 기획 부터 마무리까지 혼자서 모든것을 맡았다. 어찌보면 편한점이기도 했었다. 잘못된 방향으로 프로젝트를 만들고 있어도 아무도 터치하지 않았기 때문에 나는 잘못인지도 모르고 계속해서 이상한 것들을 만들고 있었다. 또 앱 개발을 전문적으로 하는 회사가 아니였기 때문에 회사에서도 그냥 돌아가면 끝. 아무도 소스코드나 프로젝트에 관심을 갖지 않았다. 협업을 배우고 싶었고 다른 개발자들과 소통하면서 성장하고 싶었다.

나의 성장

 회사에서 어떤 작업을 하다 해결을 못하고 집에 와서 구글 검색을 해가면서 다른 방법을 찾아내었다. 신나서 카톡에 링크를 보내놓았고 회사에 도착하자마자 바로 적용을 시켜보려 했지만 계속해서 에러가 발생했다. 원인은 내가 작성한 코드중에서 무엇인지 모르는게 있다는 것이었다. 찾아보니 내가 찾은 방법은 Qt5.15 버전부터 지원하는 방법이었는데, 사용하는 버전이 그것 보다 낮아서 실행할 수 없었던 것이었다. 이것 때문에 BSP 개발자분에게 Qt 버전을 올려달라고 할 수도 없었다. 고객사에서 원하는 버전이었기 때문에 어쩔 수 없이 따를수 밖에 없었다. 이처럼 개발을 하면서 계속해서 무언가 묶여있는 기분이었다. 유튜브만 보더라도 새롭고 흥미로운 개발 지식들이 넘쳐나는데 나는 성장하지 못한채 멈춰있는 기분이 들었다.
 그러다 보니 자연스럽게 이 회사에서 내가 개발자로 성장할 수 있을까? 라는 생각을 갖게 되었다.

프론트엔드를 선택한 이유?

 솔직히 큰 이유는 없었다. 이것이 아니면 다른길은 없다. 꼭 프론트엔드 개발자가 되어야겠다 라는 생각은 해본적이 없다. 임베디드 앱 개발 경험을 살려서 다른 회사로 이직할 수도 있었지만 앞에 소개했던 앱 개발 실력으로는 도저히 다른 회사에 들어갈 수 있을거라는 자신이 없었고 더 이상 임베디드 개발은 하고 싶지 않았다
 Qt 프로그래밍을 하면서 자바스크립트를 써야하는 상황이 있었고 그러다 보니 자연스럽게 자바스크립트에 대해서 공부를 했기 때문에 프론트엔드에 관심을 갖게 되었고 웹 이라는 분야가 엄청난 속도로 성장해왔고 앞으로도 계속해서 성장중인 것을 보았다. 따라서 노마드 코더에서 유튜브 클론 코딩을 구매해서 직접 웹에서 무언가를 만들어 보고 따른 클론 코딩을 해보면서 이전에 해왔던 임베디드 앱 개발처럼 화면에 무언가 즉각적으로 반영이 되고, 디자인을 해볼 수 있다는 점에서 프론트엔드 개발자에 끌리게 되었다.

데브코스 참여

 회사를 그만두기전 회사를 다니면서 이직을 준비할지 아니면 회사를 그만두고 이직 준비에 전념할지 고민하던 때가 있었다. 당시에는 프론트엔드 개발을 잘 몰랐었기 때문에 회사다니면서 이직준비가 가능할거라 생각했지만 지금 생각해보면 그만두고 준비하지 않았다면 나의 이직시기는 더 늦혀졌을거라 확신한다... 따라서 회사를 그만두고 단기간에 집중해서 이직준비를 할 수 있는 방법을 찾아보던 중 개발자 부트캠프라는 것을 알게 되었고 돈을 내고 참여하는 곳도 있었고 국비지원을 받으면서 참여할 수 있는 곳도 있었는데 가급적 국비지원이 가능한 곳을 찾게 되었고 프로그래머스 데브코스에 신청하고 코딩테스트를 보고 면접을 본 다음에 합격해서 참여할 수 있는 기회를 얻게 되었다.

과거의 나를 반성하며

  데브코스에 참여하기 전 프론트엔드 개발 경험이라고는 노마드 코더에서 따라 했던 클론 코딩 몇 개가 전부였고 전부 바닐라 자바스크립트로만 진행했었다. HTML, CSS는 대충 알고 넘어가도 문제가 없을 것이라 생각했고, 자바스크립트만 잘하면 프론트엔드 개발자가 되는데 문제가 없을 것이라 생각했었다. SPA가 무엇인지도 몰랐고 리액트, 뷰 와 같은 라이브러리 프레임워크를 사용해본적이 없었다. 완전 무지한 상태였지만 데브코스에서 가르쳐주겠지 라는 안일한 마음으로 참여했다. 막상 데브코스를 시작하니 자료구조, 알고리즘, CS 지식등 내가 모르고 있는 것들이 매우 많았고 특히 코딩 테스트를 별도로 준비해본적이 없는 나에게 익숙하지 않은 자바스크립트 언어로 자료구조와 알고리즘 문제를 푸는 것은 매우 어려운 일로 다가왔다. 대부분 간단하게 넘어가는 낮은 레벨의 쉬운 문제들도 나는 풀지 못했고 엄청나게 많은 시간을 필요로 했다.

중간 프로젝트

 임시 팀원들과 작별하고 새로운 팀원들과 함께 리액트를 사용한 중간 프로젝트를 진행하게 되었다. 비전공자 이지만 독학으로 프론트엔드 개발 준비를 하시는 분도 있었고 대학생으로 참여하여 졸업과제와 중간 프로젝트를 같이 준비하는 분도 있었다. 모두 리액트를 사용해본 경험이 있었고 다양한 경험들이 있었기 때문에 프로젝트에 많은 기여를 했지만 나는 그렇지 못한다는 생각이 들었고 이때 정말 포기하고 싶다는 생각도 들었다. 나는 다른 사람들 만큼 프론트엔드 개발에 열정적이지 않은 사람이었구나 내가 여기 참여하게 됨에 따라 다른 누군가의 기회를 빼았은것은 아닌가 매일 새벽 늦게까지 남아서 코드를 작성했지만 이게 리액트를 사용하는 것인지 그냥 자바스크립트를 사용하는 것인지 자신이 없었다.
 끝까지 포기하지 않고 참여할 수 있었던 가장 큰 이유는 같이 프로젝트를 만들었던 팀원들 덕분이었다. 항상 혼자서만 개발을 해오던 나에게 팀원들은 언제나 항상 큰 도움이 되었고 모르는 것을 물어보면 언제나 적극적으로 같이 고민해주었다. 나는 정말로 팀원들 덕분에 중간 프로젝트 뿐만아니라 최종 프로젝트까지 마무리 할 수 있었다. 도와주신 팀원들에게 진심으로 감사드린다.

최종 프로젝트

 중간 프로젝트를 마무리하고 리액트에 대해 개념부터 잡아가야겠다는 생각에 유데미 강의를 들었고, 노마드 코더 리액트 강의, 리액트 책을 통해서 리액트를 따로 공부했다. 최종 프로젝트에는 팀원들에게 꼭 도움이 되어야겠다는 생각에 프로젝트 기간이 아닐때도 밤 늦게까지 혼자서 계속 공부했다. 최종 프로젝트는 프론트엔드 팀원들 뿐만아니라 백엔드분들까지도 포함해서 프로젝트를 진행했기 때문에 백엔드와의 협업을 배울 수 있는 아주 좋은 기회였다. 이전 중간 프로젝트에서는 우리가 API를 수정하거나 개별적인 수정 요청을 할 수 없는 공통 API를 사용했기 때문에 필요한 데이터를 얻기 위해 API를 별도로 가공해야 하는 문제가 있었지만 백엔드분들과 직접적으로 소통하면서 우리가 필요한 데이터만 받을 수 있다는 큰 장점이 있었고 프론트엔드와 백엔드 통합 회의를 하면서 백엔드와 프론트엔드의 시야가 다르다는 것을 느꼈다.
 거의 마지막 스프린트 기간에는 백엔드 분들과 새벽 4시까지 소통하면서 API를 수정하고 몇 시간밖에 못자는 일정이었지만 매일 재미있다는 느낌을 받으면서 힘들지 않게 프로젝트를 진행했다. 실무가 아님에도 프론트엔드 개발자와 백엔드 개발자가 협업을 할 수 있는 아주 좋은 기회였다고 생각한다.

마무리

 지금도 충분히 긴 글이 되었지만, 사실 세세하게 풀어쓴다면 정말 너무나 긴 글이 될 것이라 생각한다. 내용에는 빠져있지만 데브코스 기간동안 큰 도움을 주셨던 멘토님들과 행정적인 것 뿐만아니라 개인적인 상담을 도와주신 매니저님들에게도 큰 감사를 드린다.
데브코스 마지막 수료식때 백엔드 매니저인 스펜서님이 해주신 말씀이 크게 와닿았다. 데브코스가 여러분들의 마지막 교육이 되길 바랍니다. 사실 나는 혼자서 무언가 해볼 생각보다는 데브코스 또는 인터넷 강의에 의존하면서 나의 실력을 향상 시켜줄것이라는 기대로 교육에 참여 했었고 스스로 무언가 얻어가려 노력한적이 없었다. 또 다른 부트캠프에 참여를 해야하나, 아니면 다른 인터넷 강의를 하나 더 들어볼까 이런 생각도 했었지만, 미약하게 나마 나에게 자생력이라는게 생겼다는 느낌이 들고 앞으로 자생력을 키워나가며 스스로 성장하는 개발자가 될 수 있다는 확신이 들었다.
 추가적으로 데브코스에 참여를 망설이시는 분들이 있다면, 나와 같은 상황이나 스스로 성장할 수있는 자생력을 키우고 싶은 분들이라면 꼭 참여하시라 말씀드리고 싶다. 한 번밖에 참여할 수 없다는게 참 아쉽지만(사실 또 하라고 한다면 못할것 같다^^)힘들었던 만큼 고생했던 만큼 지나고 보니 모두다 잊을 수 없는 추억이 되었다. 여러분들도 꼭 이런 잊지못할 경험과 추억을 가질수 있기를 바랍니다.

0개의 댓글