-
30살 비개발자가 3개월만에 풀스택 개발을 하기까지..개발이야기 2021. 1. 4. 18:31
또 다시 새해가 밝았다. 많은 사람들이 20대에서 30대로 들어섰을 것이다. 29살과 30살, 사실 겨우 1년 차이지만, 앞자리가 '3'이 되는 순간 심리적으로 인생을 대하는 태도가 사뭇 달라지게 되는 것 같다. 가장 두드러지는 변화는 결정에 매우 신중해지게 된다는 것이다. 연애를 함에 있어서도, 이직이나 퇴사를 하고 싶을때도, 또 자기계발을 할 때 조차 효율적이고 실질적으로 내 삶에 도움이 되는지 한번씩 더 따져보게 된다.
30살이 되어서 개발공부를 고민하는 분들 역시 위와 같은 맥락에서 쉽사리 결정하기 어려울 것이다. 쉬는 시간 줄여가면서 개발을 공부하면 내 커리어에 확실하게 도움이 될 것인지, 이 공부가 내 노후를 보장해줄 수 있을 것인지, 적어도 지금보다 삶이 확실히 나아질 수 있을지.. 만약 나아질 수 있다면, 어떤 개발공부를 먼저 해야할지 또 고민해야한다. AI를 할지, 앱을 할지, 웹을 할지, 어떤 개발을 먼저 공부할지 결정하고 나면 이번엔 또 어떤 언어를 선택할지 고민해야한다... 오랜 고민 끝에 개발을 공부하기로 결정했지만, 실제로 개발공부를 시작하기 위해서는 또 고민하고 결정해야할게 많다.
나 역시 회사에서 4년간 기술영업 및 컨설팅, 운영 업무 담당했던 비개발자로서, 개발을 시작하려고 했을 때 비슷한 고민을 했었다. 다행히 나는 개발을 공부하려는 방향이 어느정도 잡혀있는 편이었어서, 완전히 처음 고민하는 분들보다는 시작하기가 수월했지만, 내가 참고한 학습자료나 공부방법, 공부 순서 등 개발공부를 고민하고 계신 분들께 도움이 될 수 있을거라 생각되어서 글로 남겨보기로 했다.
나는 원래 개발이라고는 html css 조금 알아보는 것과 아주 간단한 sql문을 작성할 줄 알았고, 개발블로그들 보면서 파이썬으로 웹스크랩퍼를 따라 만든 경험 정도 가지고 있었다. 개발 공부의 시작은 2019년 11월, 30살이 다 지나기 한 달 전부터 개발공부를 시작하게 되었다. 기간으로 따지면 3개월만에 풀스택을 할 수 있었지만, 투자한 시간은 결코 적지는 않았다.
개발동기
개발공부를 시작한 동기에 대해서 얘기하자면 꽤 오랜 시간을 거슬러 올라가야한다. 먼저 말해두지만 조금은 지루한 얘기이다. 때는 바야흐로 2018년 2월... 벌써 1년도 2년도 아닌 3년 전이 되어버린 어느 겨울날이었다. 언젠간 내 사업을 하고 싶어서, 회사를 다니면서도 아이디어가 떠오를 때마다 개인 프로젝트를 진행해오던 시기였다. 그 무렵도 어김없이 좋은 아이디어가 떠올랐고, 마침 해외에 벤치마킹 할 서비스도 있던 참이었다. 그 전에 진행했던 프로젝트들은 내가 하고 있던 업무와도 무관하고 내 경험과도 거의 무관한 아이디어들이었다면, 이번엔 내가 직접 겪은 경험으로 부터 발견한 시장의 니즈였기에 조금은 ‘내 사업’이라는 목표에 가까워지는 느낌이 들었었다. 아이디어를 간단하게 소개하자면 업무에 활용하는 다양한 IT솔루션을 한곳에 모아 놓는 플랫폼이다.
지금도 함께하고 있는 개발자 동생에게 이런걸 한번 만들어보자 제안했고, 우리는 곧 프로젝트를 시작하게 되었다. 하지만 사이드프로젝트로 습작(?)만 만들어본 우리였기에.. 실제 프로덕레벨의 퀄리티는 생각만큼 잘 나오지가 않았다. 미숙한 기획도 문제였고, 너무나도 어설펐던 디자인, 노예생활하고 있는 대학원생이 개발.. 게다가 우리 모두 파트타임으로 진행하고 있어서 부족한 부분을 시간으로 메울 수도 없었다. 그렇게 미완의 상태로 2년의 시간이 흘러 버렸다...
그러다 2019년 10월 즘에 회사를 쉴 수 있는 기회가 생겨 결혼도 하고 나만의 시간을 갖게 되었다.
나는 쉬는 기간동안, 나중에 다시 일을 구하게 됐을 때 도움이 될 만한 것을 배워두면 좋겠다 싶어서 이런저런 생각을 하고 있었다. 데이터사이언스와 웹개발을 놓고 고민하던 중에, 이왕이면 엄청 느리지만 진행은 하고 있던(
개발자 동생이 바빠져서 사실상 멈춰있던..) 프로젝트에 도움이 될 수 있는게 좋겠다 해서 웹개발 공부를 선택하게 되었다.어떤 개발 언어를 먼저 공부해볼까
처음 개발을 시작할때는 풀스택을 할 생각은 없었고, UI만이라도 내가 만들 수 있다면 동생이 다시 시간이 생겼을때 프론트-백 분담해서 개발 할 수 있겠다 생각했다.
그때까지 거의 2년을 진행하면서 여러 사람들이 지나가면서 도움을 줬었는데, 그 중에 한 개발자 형의 추천으로 2018년 후반부터 Vue.js와 GraphQL로 개발스택을 변경해서 프로젝트를 진행하고 있었다. 그래서 나도 개발공부를 하기로 결심했을 때 ‘어떤 언어를 먼저 공부할까’에 대한 질문에는 쉽게 결정할 수 있었다.
‘먼저 Vue.js를 해보자.’
수업자료를 찾던 중 마침 패스트캠퍼스에서 장기효 강사님의 Vue 강의가 곧 시작하려고 해서 처음에는 그냥 큰 기대없이 신청했다. 수강 전 준비사항에 자바스크립트 기본 문법은 알아야 한다고 되어 있어서, 수강을 2주 정도 앞두고, 빠르게 HTML, CSS, 자바스크립트 기본 문법과 웹기술에 대한 기본적인 원리에 대해서 공부했다. 종이 교재도 구매하긴 했지만, 실제로 공부를 할 때는 책보다는 잘 정리된 블로그나 유튜브를 더 많이 참고 했던거 같다. 특히 생활코딩 이고잉님의 강의가 큰 도움이 됐었다. 기본지식이 전혀 없는 사람도 집중하면 다 이해할 수 있게 단어 하나하나 신경써서 강의하시는데, 전반적인 내용이 머리에 잘 그려져서 좋았다.
https://opentutorials.org/course/3083
자바스크립트는 기본적인 문법을 대충 알아볼 정도로만 익히고 Vue 수업을 듣기 시작했다. 패스트캠퍼스 오프라인 강의도 괜찮긴 했지만, 실질적으로 나에게 큰 도움이 된 것은 장기효 강사님이 따로 만들어서 인프런에 올려둔 동영상 강의들이었다. 오프라인에서는 시간적으로나 인력적으로나 물리적인 제약사항이 많았던 것에 비해, 동영상 강의는 이해가 가지 않는 부분은 몇번씩 돌려 볼 수도 있었고, 예제 코드를 이해하는데에도 원하는 만큼 시간을 할애할 수 있어서 나의 기초를 쌓는데 정말 큰 역할을 했던거 같다. 그리고 장기효 강사님 발음도 귀에 쏙쏙 들어오고, 입문자들이 생각의 흐름을 잘 따라올 수 있게 한문장 한문장씩 딱딱 논리적으로 설명해주셨다. 만약 개발입문을 Vue로 시작하려는 분이 있으시다면, 장기효 강사님의 강의를 정말정말 추천한다.(광고 글이 절대 아니다. 마음에서 우러나온 추천이다.)
https://www.inflearn.com/course/Age-of-Vuejs
내 힘으로 직접 만들어 보는게 중요하다.
개발을 공부할때 자신의 생각방식에 맞는 학습자료를 찾는 것은 매우 중요하다고 생각한다. 블로그든 종이책이든 동영상이든, 자신에게 맞는 학습자료를 찾았다면, 이제 소화시켜 온전한 나의 것으로 만들어야만 한다. 예제 코드를 똑같이 따라 작성하는 것도 내것으로 만드는데 도움이 되긴 하지만, 이렇게 단순히 따라 작성하기는 휘발성이 강하다.
개인적으로 추천하는 방법은 자신이 생각한 무언가를 처음부터 직접 만들어보는 것이다. 예제 코드를 안보고 작성해보는 것은 어떨까 생각하는 분이 있을지 모르겠다. 개인적으로는 따라서 치는 것과 큰 차이가 없다고 생각한다. 왜냐면 만약 코드를 잘 이해했다면, 바로 작성할때 암기해서 작성하게 될 확률이 높다. 본인이 의도적으로 기억을 안 꺼내려고 해도 우리의 뇌는 자꾸만 기억을 건내준다.
온전한 내 것으로 만들고 싶다면, 정말 간단하게라도 단 몇 줄이라도 예제코드가 아닌 새로운 무언가를 직접 만들어보는 것이 중요하다고 생각한다. 이렇게 하면 학습자료를 다 보는데는 시간이 좀 더 걸릴 수는 있지만, 좀 더 빨리 개발자처럼 생각하는 힘을 길러주는데 큰 도움이 된다.
나 같은 경우, 만들고 있던 서비스에서 IT솔루션 판매자들을 위한 어드민이 따로 필요했었는데, Vue를 공부하면서 어드민을 한번 개발해보기로 했었다.
막상 처음 시작할때는 내가 무엇을 모르는지 조차 모르기 때문에, 우선 학습자료와 공식문서를 최대한 빠르게 정독을 한번 했다. 나는 눈 떠 있는 시간에는 거의 문서와 자료만 봤기 때문에, 한번 다 정독하는데 이틀정도 걸렸던거 같다. 그리고는 일단 개발을 시작했다.
https://kr.vuejs.org/v2/guide/index.html
개발 초반에는 모르는게 대부분 공식문서만 봐도 원하는 답을 찾을 수 있었는데, 진행할 수록 공식문서에는 없는 지식이 필요하게 되었었다. 원하는 답을 찾기 위해 구글링하고 또하고 또하고.. 이 문제를 해결하려면 어떤 키워드로 검색해야하는지도 잘 몰랐기 때문에, 초반에는 한 문제를 만날 때마다 굉장히 시간이 오래걸렸었다. 어쩔때는 한 문제를 해결하기 위해서 거의 일주일동안 매일 몇시간이 투자해서 계속 검색했던 적도 있었다. 그렇게 한달정도 Vue와 자바스크립트, html css 등 기초적인 부분에 하루에 12~16시간씩 투자하니까 어느정도까지는 문서를 보지 않아도 개발을 할 수 있게 됐었다.
백엔드도 해볼까?
한달정도 프론트를 구현하고 나니까 조금 욕심이 생겨 DB에서 데이터도 불러오고 싶어졌다. 장기효 강사님 수업에서는 axios를 써서 rest API로 데이터를 받아왔었는데, 내가 진행하던 프로젝트는 API로 GraphQL을 쓰고 있었고, orm은 Sequelize를 쓰고 있었다. 백엔드 공부를 시작하기 전에는 이 두 기술이 날 그렇게 힘들게 할거라고는 예상하지 못했었다.
Vue나 자바스크립트는 뭔가 이해해야하는 것 보다는 ‘익히는 것’이 더 많다고 느꼈었다(처음에만...). 완벽하지 않아도 어느정도 맞으면 돌아가긴 했으니까. 하지만 백엔드는 좀 달랐다. 제대로 되어 있지 않으면 애초에 돌아가지조차 않고, 디버깅도 훨씬 어렵게 느껴졌다. express를 써서 뭔가를 서빙하는 환경은 어렵지 않게 만들 수 있었지만(
물론 서버가 구동되는 코드를 완벽히 이해하기는 어려었다..) 그 서버에 GraphQL과 Sequelize를 붙이는게 입문자에게는 굉장히 굉장히 어렵게 느껴졌다. Vue같은 경우 한국어 문서도 잘 되어 있었고, 한국어로 없더라도 내게 익숙한 중국어로 된 자료도 많았던 것에 반해 , GraphQL과 Sequelize는 거의 영어로된 문서 밖에 없었던 것도 어렵게 느끼는데 일조한 것 같다.나는 영어로된 개발 문서를 제대로 이해하기 위해 한줄한줄 번역기를 돌려가면서 필사적으로 공부했다. 그렇게 한달을.. 하루에 열 몇시간씩 매달려가면서 겨우겨우 어드민 API서버를 만들었다.
sequlize는 사실 알고보면 그렇게 어렵지 않은건데, 우리 프로젝트에서 기존에 만들어둔 서버에 graphql-sequelize 라는 패키지를 사용하고 있어서, 굉장히 혼동을 많이 하는 바람에 꽤나 고생을 했었다. 나는 그 당시에는 이 패키지를 사용할 줄도 몰라서 어드민 서버에서는 GraphQL의 모든 스키마 및 리졸버를 직접 다 작성했었다. 직접 다 작성하면 모델이 변경될때마다 관련된 코드를 직접 손수 바꿔줘야한다는 단점이 있지만, 초보자 입장에서 직관적으로 이해할 수 있는 장점도 있었던거 같다. 이 부분은 다음에 GraphQL 포스팅을 할때 좀 더 상세하게 작성해볼 계획이다.
첫 3개월을 정리하자면
어쨌든 , 10월 말부터 개발공부를 시작하고, 12월 말이 되었을때, 지금으로부터는 1년 전, 나는 프론트,백엔드를 모두 구현할 수는 있게 되었다. 물론, 좋은 구조와 좋은 코드는 당연히 아니었다. 그냥 내가 생각하는 기능을 어떻게든 구현은 할 수 있게 되었다.
그리고 위에서 말한 3개월 중 마지막 한달은 내가 작성한 코드를 배포하는 방법을 공부했다. 서버는 AWS Beanstalk에 올렸고, 프론트는 Firebase 호스팅을 썼다. Firebase 호스팅은 문서를 따라하니까 어렵지 않게 배포할 수 있었고, 도메인을 설정하는 것도 금방 할 수 있다. Beanstalk는 어렵지는 않은데, 처음에 로드밸런서를 설정하는게 좀 까다로웠어서, 서버배포를 성공하는데 1주일은 고생한것 같다.
개발을 거의 아무것도 모르던 때부터 서비스 배포까지 각 과정의 소요시간을 정리하자면,
웹기초, HTML, CSS, Javascript, Vue, git - 4주 소요
Express, GraphQL, Sequelize, Mysql, Apollo - 6주 소요
배포 - 2주 소요
그 후로 인증처리, 웹소켓 등 3개월 정도 더 개발해서 5월에 베타버전을 대외적으로 오픈하고, 허술했던 자바스크립트 기본기를 틈나는대로 꾸준히 공부하면서 이전에 작성했던 안 좋은 코드들을 단위별로 리펙토링을 해나가가고 있다. 그 결과물은 https://b2ber.co/ 여기에서 볼 수 있다.
여기까지 내가 개발을 시작한 계기부터, 개발스택을 익혀나간 순서를 간단하게 한번 작성해봤다. 위에서 말한 3개월만에 개발을 마스터 한 것 처럼 보여질 수 있겠지만, 정확하게는 3개월하면 내가 만들고자 하는 것을 구현할 수 있는 정도라고 말하고 싶다. 또 알아야 할 것은 내가 보낸 3개월은 상당히 압축적인 시간이었다는 것이다. 만약 나처럼 특수하게 하루에 기본 10시간씩 집중할 수 있는 시간을 만들 수 있는 사람에게는 3개월이면 될 수도 있고, 집중할 수 있는 시간에 따라 더 거릴 수도, 덜 걸릴 수도 있을거 같다.
개발을 직접 해본면서 느낀 점
비개발자로서 개발을 공부해보면서 느낀 점 중에 하나는 개발을 공부할 때 하루에 1-2시간씩 쪼개서 하면 효율이 정말 낮을 수 있다는 것이다. 처음 개발을 시작하면, 한 지식에 연결되는 부가적인 지식이 상당히 많다. 하나를 공부하기 시작하면 그것과 연관된 10개를 모두 봐야 하나를 이해할 수 있기 때문에, 연속된 충분한 시간을 확보하는 것이 중요한 것 같다. 개발을 하던 사람이 다른 언어나 프레임워크를 빠르게 익힐 수 있는 이유는 연관된 지식을 어느정도 알고 있기 때문이라고 생각한다. 만약 개인사정으로 한번에 많은 시간을 낼 수 없다면, 적어도 공부 주기를 최대한 짧게 가져가야한다고 생각한다.
그리고 개발자와 기획자 디자이너 간에 생각보다 훨어어어얼씬 많은 커뮤니케이션이 필요하겠구나라는 것을 알게되었다. 기획자나 디자이너가 제대로 디테일하게 전달해주지 않으면 개발은 언제든 쉽게 목표한 결과물에서 멀어질 수 있겠다 싶었다.
하나의 프로젝트를 잘 끝마치는게 어려운 일이라는 건 그냥 알고는 있었지만, 직접 개발, 디자인, 기획을 다 해보니까 시중에 잘 나온 결과물에 얼마나 많은 노력과 긴밀한 협업이 있었을지 참 감히 예상하기가 ... 제품을 만들어가는 구성원들이 모두 하나 같이 생각하고 움직여야 했을텐데 , 그저 다들 대단하다는 생각 밖에 안 든다. 오히려 혼자하는게 시간은 좀 더 필요할지 몰라도 프로젝트 관리 난이도로만 보자면 팀으로 진행하는것보다 훨씬 쉬울(?) 것 같다.
아직 내공이 부족해 얕은 내용 밖에 전달하지 못하지만, 혹시 개발을 한번 시작해보고 싶은데 무엇부터 할지 모르겠거나, 개발 공부를 시작하긴했는데, 어떤걸 더 공부해야할지 모르겠는 사람들에게 이 글이 조금이나마 도움이 되었으면 좋겠다.