기록하고 계획 세우는 것을 좋아한다고 생각했는데, 생각해보니 1년 회고를 제대로 적어본 적이 없던 것 같다. 작년에는 정글 수료 후 바로 취업 전선에 뛰어 들면서 회고할 여유가 없었던 것 같다. 30년 동안 체대생&문돌이였던 내가 개발자라는 커리어를 시작한 22년은 나에게 있어 꽤 큰 터닝 포인트이기 때문에 이번에는 회고를 기록해보려고 한다.
SW정글 수료 및 개발자 취업 준비
21년 8월부터 소프트웨어 사관학교 정글을 통해 본격적으로 소프트웨어 개발 공부를 시작했고, 12월 수료 후 개발자로 취업하기 위한 준비 기간을 가졌다. 정글을 수료하면 협력사에 지원할 수 있는 기회가 있다. 하지만 나는 지원한 모든 협력사에 탈락했다. 그 당시 내가 취업에 실패한 이유로는 다음과 같이 정리했었다.
나만의무기Rewind | Intro | 개발자 홀로서기 취업 도전은 광탈, 차근차근 다시 리와인드 하자구
나만의무기Rewind | Intro | 개발자 홀로서기 취업 도전은 광탈, 차근차근 다시 리와인드 하자구
정글 수료 이후 협력사 취업 결과: 광.탈. 사실 큰 기대는 안 했기 때문에 떨어지더라도 의연하게 받아들일 준비를 했다. 하지만 예상했다고 하더라도 막상 그 결과를 직접 마주치니 생각보다 아
dapsu-startup.tistory.com
한 줄로 요약하자면, 취업 준비를 제대로 하지 않았다는 것이다. 개발자로 취업하기 위해서는 기본 지식인 알고리즘과 자료구조에 대해서 잘 알아야 하고, 이를 판단할 수 있는 코딩 테스트를 준비해야 한다(물론 이는 회사 채용마다 다르다). 또한 '나는 이런 프로젝트를 했고, 이런 기술 스택들을 사용할 수 있어!', 혹은 '나는 빨리 성장하고 팀에 기여할 수 있어!'라고 어필할 수 있는 포트폴리오를 보여줘야 하는데 당시 내가 준비한 포트폴리오는 취업할만큼 수준과 기여도가 높지 않았다.
(당시 내가 제출했던 프로젝트같은 경우 서비스 설계(web server 및 proxy, ssl 설정 등)에 치중해 있었기 때문에 백엔드 개발자로서 알아야 하는 지식과 역량을 제대로 어필하기 취약했다.)
이 부분은 협력사 지원 이후 혼자서 개발자 채용에 지원할 때에도 연장되는 문제였다. 내가 준비한 프로젝트는 면접 때 면접관들이 궁금해할만한 포인트들이 꽤 많았지만, 정작 그 부분에서 직접적으로 관여한 부분이 미비했기 때문에 준비해서 대답한 답으로는 면접관들을 만족시키기 부족했다.
예를 들면 프로젝트 진행 당시 사용자 인증을 위해 jwt를 이용했었고 어느 회사에서 이에 대해서 물어봤었다. 그때 나는 jwt와 session의 차이, jwt를 선택한 이유, 토큰 활용 방법 등에 대해서 설명했다. 하지만 직접 구현하지 않았기 때문에 그 깊이가 얕았고 노련한 면접관 분들은 이런 부분을 놓치지 않았다.
이대로 이력서만 제출하는 것이 무의미하다 생각하여 내가 직접 많은 코드를 작성해봐야겠다는 욕심이 생겼고, 백엔드 개발자가 되기 위해 api 및 crud를 다루는 프로젝트들을 만들기로 했다.
원티드 프리온보딩 백엔드 코스
혼자서 하나의 토이 프로젝트를 만드려고 하던 찰나, 원티드에서 진행하는 프리온보딩이라는 프로그램을 알게 되었다. 해당 프로그램에 참여하여 같은 팀원들과 함께 여러 백엔드 로직 프로젝트들을 직접 구현해보는 경험을 했다.
이때 여러 api를 직접 작성하면서 데이터들을 최적으로 다루기 위해 고민해보고, 에러 핸들링하는 방법, 웹에 대한 지식 등 실무에 대한 기초적인 부분들을 많이 배울 수 있었다. 또한 개발 지식 등의 기술 역량뿐만 아니라 커밋 컨벤션 선정, 협업 방법 등 실무에서 필요한 소프트한 스킬들도 맛볼 수 있어서 개인적으로 좋은 경험이었다.
웹개발자로 커리어 시작
운이 좋게도 원티드 프리온보딩 교육 수료 이후 한 달도 지나지 않아서 바로 취업에 성공할 수 있었다. 취업할 때 가장 중요하게 생각했던 고려 사항은 "내가 개발자로 성장할 수 있는 환경이 잘 구축되어 있나?" 였다. 이를 판단하는 근거로는 다음과 같은 조건들을 선정했었다.
- 주먹구구식이 아닌 체계적인 업무 프로세스를 갖추고 있는가?
- 코드 퀄리티에 얼마나 신경쓰는가? 코드 리뷰를 제대로 하는가?
- 내가 서비스에 얼마나 빠르게 관여하고 기여할 수 있는가?
물론 솔직하게 어디든 나 좀 사용해주면 감사하겠다...!라는 마인드도 컸지만 최소한 지원할 때 채용 페이지를 통해 위와 같은 조건들을 해당하는 기업에만 지원하려고 노력했다.
그리고 위의 조건들을 충족하는, 개인적으로는 매우 만족하는 회사의 웹 풀스택 개발자로 취직하여 개발자 커리어를 시작하게 되었다. 원래 나는 백엔드 개발자를 희망했었고, 그래서 취업 준비할 때 node.js와 mysql을 이용한 프로젝트들을 주로 진행했었다. 사실 기존에는 풀스택 개발자에 대해 부정적인 선입견도 가지고 있었다. 신입 개발자 입장에서 FE/BE 중 하나의 영역도 제대로 다루지 못 하는 상황에서 모든 부분을 신경 써라? 두 마리 토끼를 잡으려다 둘 다 놓치는 꼴이라고 생각했다. 커리어 측면에서 생각했을 때에도 과연 장기적으로 도움이 될까? 라는 회의감도 가졌었다.
그러나 원티드 프리온보딩 백엔드 코스에서 백엔드 비즈니스로직을 작성하면서 느낀 점은 오히려 신입/주니어 개발자일 때부터 웹 서비스에 대해 전반적으로 알고 이해해야 하며, 프론트 엔드 개발자와 협업하고 커뮤니케이션을 더 원활하게 하기 위해서 프론트, 백 두 영역 모두 충분한 이해가 필요하다는 것이다. 즉 풀스택의 장점은 웹서비스 전반에 대한 이해와 프론트엔드, 백엔드 양쪽을 이해하고 개발하기 때문에 제품의 결합력이 높다는 것이다. 내가 일하는 회사도 그저 개발자에게 이것저것 요구하면서 풀스택 개발자를 채용하는 것이 아니라, 업무 프로세스를 도메인으로 구분하고 맡은 역할에 대해 최대한 효율적이고 본인의 도메인에만 신경쓸 수 있도록 하기 위함이다. 즉 선택과 집중에 따른 효율성을 위한 개발자를 채용하는 것이다.
여하튼 내가 담당하는 도메인은 인증/결제/알림이고, 이와 관련된 업무들을 차근차근 시작하고 있다.
vue / nuxt
도메인 특성상 프론트 부분보다는 서버 측면에서 다루는 로직들이 많지만, 프론트 영역을 다루는 일도 꽤 많았다. 특히 알림 관련 기능을 구현할 때 프론트 작업이 많다. 우리 서비스의 프론트는 vue를 이용하고 ssr을 위해 nuxt를 사용한다. 프론트에 대한 지식이 전무한 상태에서 취업했기 때문에 입사 전, 그리고 온보딩 때 vue와 nuxt에 대한 강의를 들으면서(캡틴판교님 감사합니다!!!!) 기초적인 지식들을 최대한 빨리 습득하려고 노력했다. 그러나 정작 실무에 돌입했을 때 무지함으로 인해 많이 좌절했었다.
일례로 알림 데이터들을 보여주는 리스트 중 페이지네이션 기능을 구현해야 했던 적이 있었다. 취업 전에 페이지네이션 기능을 구현했던 경험이 있어서 이때의 기억을 토대로 페이지네이션을 구현했다. 구현 방식은 api요청 시 쿼리스트링으로 page와 category(TOTAL, UNREAD) 키워드를 보내서 이에 해당하는 리스폰스를 받도록 했다.
이후 코드리뷰를 받았는데, 페이지네이션할 때마다 api를 요청하지 말고 처음에 알림 페이지가 렌더링될 때에만 데이터를 한 번 받아온 후 클라이언트 컴포넌트 내에서 데이터들을 재활용하여 페이지네이션하는 방식으로 수정 요청이 들어왔었다(페이지네이션할 때마다 서버로 api를 요청하는 것이 비효율적이라고 판단).
하지만 vue에 대한 숙련도가 낮았기 때문에 이를 프론트에서 구현하는데 꽤 고생을 했고, 결국 사수님의 도움을 받아 vue의 computed 속성을 이용하여 route의 쿼리가 바뀔 때마다 자동으로 리스트의 데이터들이 바뀌도록 설정했다. 혼자 공부하면서 computed와 watch, method 등 vue component의 속성들을 공부했지만, 이를 현업에 제대로 적용하지 못했던 것이다. 이외에도 filters 속성에 대해서 알게 되거나 vuex, 라우터 네비게이션 가드 등 다양한 지식들을 습득할 수 있었다.
물론 지금도 vue에 대한 지식이 많이 부족하지만, 확실히 입사할 때에 비하면 꽤 능숙해진 것 같다. 올해부터 vue3로 업그레이드하려고 하는데 이때 한층 더 딥다이브할 수 있는 기회로 여겨야 겠다.
mongoDB
취업 전에 프로젝트들을 진행할 때 대부분 mysql을 이용했었다. 즉 RDBMS를 통해 데이터를 다뤘었는데, 우리 회사의 경우 nosql, 그중에서도 문서형 데이터베이스인 mongoDB를 사용한다. 몽고디비 채택 이유로는 다음과 같다고 한다.
- 비정규화로 스키마를 디자인하여 join을 제거해 성능 향상과 탐색, 검색, 프로필 구현 복잡도를 낮춤
- 쓰기가 없기 때문에 비정규화된 스키마로 인해 복잡한 트랜잭션을 구현하거나 실수가 발생할 가능성이 없음
우리 웹 서비스의 경우 투자 관련 데이터베이스를 다루기 때문에 복잡한 상황이 많고, 그에 따라 관계형 데이터베이스를 사용하게 되는 경우 잦은 join으로 성능 측면에서 매우 비효율적이다(데이터팀은 postgreSQL 사용).
여하튼 몽고디비에 대한 숙련도가 낮은 상태에서(다행히 0은 아니었음!) 일을 하다보니 쿼리 연산을 이용하는 데 있어서 어려움이 많았다. 이때 깨닫게 된 진리 중 하나는 공식 docs가 결국 최고의 답안지라는 것...! 빙빙 돌다가 docs에서 하나씩 찾아보면서 다양한 operator들을 사용하게 되었다.
또한 몽고디비의 경우 스키마리스하기 때문에 DB 스키마를 기획하는데 꽤 낯설었다. mysql처럼 테이블들을 정의하는 개념이 아니기 때문에 내가 직접 컬렉션들을 어떤 식으로 정의하고 사용해야 하는지가 중요했다. 하지만 도큐먼트 데이터베이스인 만큼 하나의 알림 객체가 하나의 데이터이기 때문에 알림 컬렉션에 유저 도큐먼트 내에 알림 객체들을 배열 필드로 두어서 자유롭게 컬렉션을 생성했다.
재택 근무
우리 회사의 개발팀은 100% 재택 근무를 실시한다. 개인적으로는 사무실에 출근하는 것을 선호했지만, 강려크한 재택 파워를 느끼게 되면서부터 나도 재택에 스며들었다... 물론 지금도 팀 사람들과 직접 대면하여 일하는 방식이 더 좋다고 생각하지만 출퇴근에 드는 시간과 에너지를 생각해봤을 때 기회비용 측면에서 재택이 더 효율적인 것 같다...!
하지만 재택의 단점도 있다. 코딩하면서 막히는 부분이 발생했을 때, 이를 해결하는 데 있어서 꽤 오랜 시간이 걸릴 수도 있다는 것이다. 물론 문제 해결 능력을 기르기 위해서 스스로 해결해야 하는 시간도 가져야 하지만, 이 시간이 마냥 길어지는 것은 역으로 비효율적으로 시간을 허비하는 것일 수도 있다고 생각한다. 원격 근무 프로세스를 정말 잘 갖춘 환경이라고 하더라도 한 공간에서 일하는 것에 비해서 질문하고 답하는 시간과 텀이 길 수밖에 없다고 생각한다. 다행히 내 코드를 봐주시는 선배님께서 꼼꼼하게 리뷰를 해주시고, 코어 타임 때 슬랙 DM을 통해 의사 소통에서 발생할 수 있는 문제는 많이 완화할 수 있었다.
새해 계획
그래서 새해에는 어떤 다짐을 해야 할까! 라고 생각해봤는데, 일단 올해 나에게 주어진 큰 이슈는 크게 두 가지다.
- 개발자 커리어 1년 차. 앞으로의 행보
- 11월 전세 만기 대비 새집 마련
개발자 커리어 1년차. 앞으로의 행보
올해부터 정식 개발자로 연차를 딱 1년을 채우게 된다. 즉 늘어나는 경력과 비례하게 업무에 대한 관여도와 책임도 늘어날 것이고, 그만큼 내 역량도 성장해야 한다. 어렵게 개발자가 된 만큼 물경력을 쌓고 싶지 않다. 제대로 된 커리어를 갖춰서 앞으로도 더 많은 일을 할 수 있는 능력 있는 개발자가 되고 싶다.
이를 위해 올해에는 토이 프로젝트를 진행해보려고 한다. 기획부터 시작해서 인프라 구조 설계, 서버 구축, 프론트까지 모든 영역을 아우르는 꽤 범위가 큰 프로젝트를 만들 것이고, 특히 백엔드 역량에 중점을 맞춰서 많은 것을 해보려고 한다(결국 언젠가는 백엔드 개발자가 될 것이기 때문). 기술스택은 지금 팀과 같은 node와 mongodb, vue를 사용할 예정이다. 현재 사용하는 기술들을 더 깊게 이해하는 것이 다른 기술을 익히는 것보다 더 중요하다고 생각하기 때문이다.
새집 마련...!
19년 11월부터 지금까지 전세로 현재 집에 살고 있다. 그리고 올해 11월에 만기되기 때문에 그전에 살 집을 다시 마련해야 한다. 매매로 집을 구하고 싶지만, 대출이 더 어려워진 상황에서 내집을 구할 수 있을지...ㅠㅠ 우선 주택 청약에도 관심을 가지고, 부동산을 잘 아는 친구에게 한 번 상담 받고 제대로 준비해보려고 한다.
스타트업 창업을 시작으로 영어학원 강사, 건강관리협회, 이커머스 사업 등 정말 다사다난했다가 드디어 개발자라는 직업에 정착하게 되었다. 어렵게 시작한 직업인만큼 애착도 크고 성장하고 싶다는 열의도 강하다. 그동안의 경험들을 토대로 영리하게 살아갈 수 있도록 노력해야겠다... 계묘년 힘내즈아ㅏ....!!!!
'답수실Log' 카테고리의 다른 글
답수실Log | 230129 | 어쩌다 next13 (0) | 2023.01.29 |
---|---|
답수실Log | 230126 | 토이 프로젝트 계획 중. 어떤 기술 스택을 사용해야 할지 고민 중(사실 답정너...?) (0) | 2023.01.27 |
답수실Log | 220927 | 자주의식을 가지고 코드를 작성하기 (0) | 2022.09.28 |
답수실Log | 220925 | 한 번 발 들이면 딥해질 놈 내 예민함은 심해 (0) | 2022.09.25 |
답수실Log | 220916 | ERROR: Cannot set headers after they are sent to the client (0) | 2022.09.16 |
댓글