22살 신입 프론트엔드 개발자 첫 회고록

이인·2023년 10월 22일
0

대학교 입학부터 시작해 개발에 진정으로 관심이 생기고, 현재 회사에 입사하기까지 여정을 풀어내기 이전에 내 회고록이 누군가에게 도움이 되지 않을까 싶은 마음에 간단한 신상을 밝힌다.

2023년 9월 기준 한국항공대학교 3학년 재학중이며, 22세(만21세)의 나이로 현재 B2B 도메인 스타트업에 재직을 병행하고 있다.

내 소개를 하면 어떻게 학교와 직장을 병행할 수 있는지 물어보는 분들이 많다. 사실 별거없다.. 학교 시간표를 최대한 한 일자로 모아, 공강인 날에는 출근하고 일부 재택도 병행한다.

누군가에겐 이른 나이에 대단하다고 느낄 수 있는 경력이지만, 스스로 돌아봤을때는 아직 부족한 점이 한참 많다고 느낀다.

필자는 원래 기록을 남기는 걸 귀찮다는 이유로 무지하게 싫어하지만, 문뜩 앞으로 뭘 더 가지고 싶을 지 고민하기 전에, 지금 내가 가진 많은 것들이 흩어지지 않게 한 데 모아 놓아야 한다는 생각이 들어서 두서없는 글을 작성한다. 다만 회고록을 남기는 다른 개발자들은 어떤 마음을 추스리기 위해 자신의 여정을 풀어내는 지 궁금하다.

어릴 때는 나름 ‘글’을 작성하는 데 자신이 있었고, 관련 대회를 나갔다 하면 수상 했었으나 지금의 나로선 그런 감각이 한참 뒤쳐진지 오래인 것 같다.

‘의도치 않은 소프트웨어과 진학’
긴 회고록의 두서를 장식하는 것은 대학교 입학이다. 본래 필자는 부모님의 강요아닌 강요로 이른바 ‘교대', 초등학교 선생님을 준비했었다. 그래서인지 초,중학교 때는 그저 다른 친구들보다 앞서나간다는 미련한 우월감 하나만으로 공부를 열심히 했었지만, 고등학교에 올라오면서 점점 무의식 중에 내가 왜 공부하는 것인지 의문이 들기 시작했던 것 같다.

사실 어린 나이에 ‘해야만 하는 것'과 ‘하고 싶은 것'을 정확히 구분하고 자신의 미래에 도움이 되는 것이 무엇인지 선택하며, 인내와 노력할 줄 안다는 것은 어찌보면 재능의 영역이라고 생각이 들기도 한다.

때문에 지방에서 태어나 평범하기 그지없던 나는 미래에 대한 걱정은 있었으나 깊은 고민은 없었던 상태로 목표없는 3년을 보냈다. 다만 후회하진 않는다. 사교관계에 대한 나름대로의 깊은 고찰과 고민의 시간, 평생 고도비만으로 살아 왔다가 단 2개월만에 30키로 감량한 다이어트, 원없이 했던 게임, 사회적 불 합리함에 소리 낼 수 있던 용기, 학창시절 풋풋한 연애 등.

짧은 글에 다 담을 수 없는 다양한 경험들이 있지만, 사회가 매기는 성적과는 관계없이 나름대로 그 의미를 곱씹으며 나아갈 수 있는 발판이 되는 소중한 경험들이 많았기에, 후회는 없다.

그렇게 짧은 3년에 대한 결과로, 수시 원서 6장 중 5장을 교대에 넣고 나머지 한 곳을 한국항공대 소프트웨어과에 제출했다. 부모님의 속마음과는 반대로 단 한곳만 합격하여 현재의 학교에 입학하게 됐다.

입시 결과에 대해 아쉬움이 없다면 거짓말이지만, 평생 나와 맞지 않는 교사라는 직업을 반 강제로 택하게 되는 것 보다는 다방면으로 가능성 있는 컴퓨터 관련 전공이 더 낫겠다는 판단으로 재수는 고민도 하지 않았다.

‘대학교 1학년’
지방에서 상경한 나한테 서울은 모든 것이 새로웠으며, 마침 코로나 시기와 겹쳐 대부분의 수업은 비대면으로 진행되어 정말 놀기 좋은 환경이었다. 때문에 서울 이곳 저곳을 돌아다니며 기숙사에서 만난 친구들과 문란하게도 놀아보고 건전하게도 놀아보며 다양한 세상을 경험했다.

고삐 풀린 망아지를 딱 이 시기에 나를 보고 하는 말 같았다.

(그리고 부모님한테도 얘기한 적 없지만, 처음으로 시험 당일 늦잠잔다고 결석해보았던 경험도 있다. 정말 흥미로운 경험이었다. )

당 해 겨울방학, 여자 친구도 생기고 점차 심리적 안정을 찾아가니 마음에 여유가 생겼나 보다. 평생 고민하지 않았던 인생의 진로에 대해 진지하게 살펴보았다.

보통 내 나이때 친구들은 다 입영 준비를 하느라 마음에 여유가 없었다. 때문에 군대를 당장 가야하나 싶은 조급한 생각이 들었으나, 내 마음은 그렇지 않았다. 그 누구보다도 군대를 가기 싫었다. 22살 현재 시점의 이유와는 달리, 이 때는 그냥 가기 싫었다. 더 놀고 싶고 경험하고 싶었다.

그래서 나름 다른 친구들과 비교해 뒤쳐지지 않기 위해 지금 군대가지 않을 거라면 남들보다 미래를 더 빨리 고민해야 한다는 죄책감을 기반 하는 생각이 들었다. 때문에 가장 나 자신과 맞닿아있는 전공에 대해 나름 객관적으로 평가했다.

내가 남들보다 코딩을 잘하는 편인가? YES
관련 지식과 학문에 흥미가 있는가? YES
어느정도 유망한 직종인가? YES
내가 노력한다면 남들보다 앞서나갈 수 있을까? YES
자만심에 가득한 내 어리석은 평가를 바탕으로 하자면, 나는 매우 운이 좋게도, 전공 자체에 흥미와 재능이 어느정도 있는 학생이었다.

문맥을 통해 어느정도 유추한 독자들도 있겠지만, 현재까지 내 삶의 동기는 경쟁심이다. 항상 내 주변 사람보다 잘 나가야 한다. 특히 나와 나이가 같은 친구 관계에선 더욱 더.

물론 이런 태생적인 성격에 반해 사회는 그리 호락호락하지 않다. 수저 색이 그리 화려하지 않은 나는 결국 남들보다 더 노력해야 한다. 다만 이를 좌절로 받아들이는 순간 나는 도태 되었다고 생각한다. 그저 내 성격과 욕망을 있는 그대로 들여다 볼 줄 알고, 이를 자기 발전의 밑거름으로 활용해야 한다고 생각한다.

글의 맥락에서 벗어나 짧게 말해보자면, 생각보다 사람은 자기 자신을 모른다. 나도 마찬가지고. 어떻게 보면 삶이란 건, 내가 누구인지를 알아가는 관객없는 영화와 같다. 뭔가 자기 분야에서 앞서나가거나, 유독 특별한 분위기를 내뿜는 사람들을 보면, 자기 객관화가 잘 되어있는 경우가 많은 것 같다고 느낀다. 그리고 그걸 드러내는 방식은 개인의 성격에 따라 달라진다.

어쨌든 나는 이런 경쟁심과 더불어, 흥미로운 분야는 매우 적극적으로 학습하려고 하는 경향이 있다. 이런 나에게 있어 개발은 공부하기 매우 적합한 분야였다. 때문에 20살 겨울방학에는 어떤 개발을 공부해야 할지 찾아보는 데 대부분의 시간을 보냈던 것 같다.

다양한(유튜브)매체를 통해 여러 분야를 찾아본 결과, 프론트엔드 개발이 가장 재미있어 보였다. 나 뿐만 아니라 요즘 개발에 입문 하려는 대부분의 사람들이 프론트엔드를 가장 흥미롭게 혹은 쉽게 생각하고 접근한다. 처음 분야를 선택할 때 다양한 이유가 있었으나, 결정적으로 Interactive Developer라는 직업을 알게 되었다.

Interactive Developer
코드로 만드는 애니메이션, 영감, 실리콘밸리의 생활과 해외취업에 대해 이야기 합니다. https://blog.cmiscm.com/
www.youtube.com

위 유튜버 분이 보여주신 화려하고 창의적인 웹은, 뭔가 잃어버린 목적지를 비춰주는 은하수 별 빛 같았다. 영상을 처음보는 순간 ‘이거다' 싶은 생각이 들었다. 이런 저런 객관적인 평가 지표나 특성들을 제쳐두고, 내 마음이 동요했다.

이후로 프론트엔드 개발자가 되려면 어떻게 되야 하는지 찾아봤다. 이 때 느낀 것은 개발 세상은 마치 지평선 같았다. 매번 새로운 기술이 나오고, 트렌드가 바뀌며 영원한 것은 존재하지 않는 것 같았다. 마치 현실과 비슷해서 매력적이었다.

감탄과 상반되게 HTML, CSS, JavaScript, React, Vue, Angular, TypeScript 등 배워야 할 게 너무 많아 보였다. 이 시기에 종점이 없는 공부를 시작했다. 끝맺음의 장소와 시간은 모르지만, 당장 내가 하고 싶고 스스로 처음 목표를 잡았던 공부 였다.

이 때 부터 어느 장소에 가던 항상 가방과 노트북을 들고 다녔다. 여유 시간이 생기면 그냥 자연스럽게 개발 관련 지식을 찾아보았다(물론 유튜브도 자주 본다)

이듬해 2월(2022.02) 에브리타임이라는 커뮤니티에서 졸업하신 익명의 선배님이 프론트엔드와 관련된 질문을 받는다는 글이 올라왔다. 처음으로, 부모가 아닌 ‘남'에게 뼈저리는 감사함을 느끼는 순간이 될 줄 이 때는 알 지 못했다.

간단한 진로관련 고민 이메일을 보냈고, 선배님은 잘 하고 있다는 칭찬과 격려를 아끼지 않으셨다. 그리고 얼마 뒤, 프론트엔드 스터디원을 모집한다는 연락을 주셔서 바로 참여한다고 했다.

‘대학교 2학년'
2022.03월 2학년 1학기가 시작되었고, 스터디도 시작되었다. 코로나 시기여서 학과 친구들도 많이 없었고, 그나마 친해졌던 몇 친구들은 대부분 군대를 갔다. 그래서 3월에는 거의 ‘아싸'로 지내며 스터디에 몰입 했던 것 같다.

지금 생각해보면 말이 스터디지 그냥 코딩 과외다. 주 1회 1시간 진행되었고, 선배님이 과제를 내주면 1주일 간 과제를 수행해오고 검사 및 피드백을 받는 방식이었다.

1년 반이 지났지만 아직도 기억나는 내용들이 많다.

자바스크립트로 해쉬 테이블, 원형 연결 리스트 등 어느정도 난이도가 있는 자료구조 구현
바닐라 자바스크립트로 HTML 파서 만들기
바닐라 자바스크립트로 체스 게임 구현하기
Context, call by, event loop 등 어느정도 심화 개념 학습하기
HTML 만 다룰 줄 아는 나에게는 한 주 한 주가 고역이었다. 거의 매일 날밤을 샜고 실패하는 과제도 많았다. 당시 선배님 포함 6명으로 구성된 스터디였으나 삼진아웃 제도로 운영되었기에, 최종적으로는 나와 선배님 둘이서 개인 과외를 진행했다.. (물론 나중에 가서 나도 아웃 당했다.. ㅋㅋㅋ)

당시에는 진도와 과제를 따라가기에 급급했으나, 지금 돌이켜 생각해보면 개발을 개발답게 배우는 게 이런게 아닌가 싶다. 요즘 주변 학우들도 그렇고 각종 부트캠프 학원들을 보면 이런 기초적인 부분을 매우 얕고 빠르게 다루고 당장 유행하는 기술 스택 배우기에 집중하는 모습이 많이 보인다. 기술 스택 하나 더 할 줄 아는게 중요한게 아닌데 말이다.

선배님에게 가장 고마웠던 부분은 의도한 건지 아닌 건진 모르겠지만 개발과 관련된 지식을 배우거나 경험할 때 어떤 태도와 자세로 접근해야 하는지 몸소 느끼게 해주셨던 거다.

모든 기술은 생겨난 이유와 근거가 있다. 매우 추상적인 말이지만, 공감하는 독자들도 있을 것이다. 현재 유행하는 많은 기술들도 왜 그런 형태로 발전되었는지를 이해하는 것이 중요하다. 그리고 이걸 완벽하게 이해하기 위해서는 서사를 알아야 한다. 서사를 알기 위해서는 가장 기초적인 개념들에 대한 완벽한 이해와 실제로 어떻게 사용 되어 왔는지를 몸소 경험해보며 느껴야 한다.

이를 차근차근 배워가는 과정에서 개발자에게 요구되는 사고력이나 문제 해결능력이 갖춰지는 것이라고 본다. 가령 JS에 대한 이해없이 바로 React 부터 학습한 친구들은 조금만 응용이 생기는 요구사항이 있다면 구글에 없는 것은 해결하지 못한다. 실제 현업에서는 매일매일이 응용의 연속인 데 말이다.

물론 나도 개발에 기초가 되는 모든 개념을 다 외우고 있지는 않다. 똑똑하지 않기 때문이다. 다만 문제상황에서 해결 방안을 모색하기 위한 기술의 당위성과 효용성 등은 반드시 이해하고 넘어가려는 편이다.

요즘은 Chat GPT가 나오며 새로이 개발을 배우는 사람들이 자칫 더 잘못된 학습 방향으로 빠지기 쉬운 환경이 되었고 실제로도 그런 것 같다. 당장 개발 과제에 거의 모두가 ChatGPT를 사용하는 추세이니 말이다.

결국 선배님 과의 스터디는 리액트와 같은 최신 기술은 단 하나도 다루지 않았다. 그보다 더 값지고 소중한 경험들을 전달해주셨다. 알게 모르게 코드리뷰 과정에서 현업자만 이해할 법한 경험적 지식까지 이해하기 쉽게 전달해주셨다. 이런 사소한 부분들이 순수 코딩 실력 향상에 매우 큰 도움이 되었던 것 같다.

‘편입생 형들과의 만남’
2학년 중반 즈음, 모종의 이유를 통해 같은 학과 편입생 형들과 친해졌다. 다들 나름의 이유로 개발에 발 담구려는 동기가 있는 사람들이었다. 비슷한 처지의 나또한 형들과 자주 어울려 다니고, 평일에는 거의 매일 아침부터 밤 10시 까지 학교에서 개발 관련 공부만 하며 지냈던 것 같다.

우리 학교는 소프트웨어 학과생들 전용 공간으로 조그마한 방이 하나 있다. 대부분의 학생들은 접근조차 하지 않지만, 형들이나 나와 같이 개발에 흥미가 있는 사람들은 자주 들락거리곤 했다. 때문에 매일 같은 공간에서 만나는 사람들을 많이 알게 되어 굉장히 재밌게 공부할 수 있었던 것 같다. 같이 담배도 피고, 교수님 강의 평가도 하고..

가장 중요한 건 혼자 이정도 양의 공부를 했다면 절대 감당하지 못했을 것 같다. 힘들고 자시고 다 떠나서, 고독하고 외롭다는 감정이 올라올 때면 주변의 형들과 으쌰으쌰 하며 부정적인 감정을 담배에 태워 흘려 보냈다.

당시 형들은 3학년이고 난 2학년 이었는데, 2학년 수업은 굉장히 나랑 안맞는 과목이 많았다. 거의 절반은 AI관련인데, 안타깝게도 나는 이쪽에 흥미가 없었다.

그래서 데이터 베이스, 웹 프로그래밍과 같은 3,4학년 과목을 들었다. 지금 생각해보면 매우 잘한 선택이다. 특히 데이터베이스는 백 프론트 가릴 것 없이 최대한 빨리 공부하는 것이 좋은 것 같다. 개발자로서 식견을 넓히는데 매우 큰 영향을 준다.

네이버 부스트 캠프도 지원했었다. 최종까지 갔지만 한 문제 차이로 붙지 못했다. 3일 준비해서 시험본 것 치곤 훌륭한 성과라고 나름대로 생각한다. 언어는 물론 JS로 했었다. 나중에 졸업하고 취직 안되면 가려고 남겨둔 샘 치자.

2학년 2학기 국내 강의들은 비싼감이 있어 Udemy에서 19000원 짜리 리액트 강의를 사서 한 학기 내내 들었다. 가끔 정말 이해 안되는 부분이 있으면 스터디를 해주셨던 선배님께 들고갔다. 그리고 절대 개념이나 문법 자체에 대한 질문은 하지 않으려 했다. ‘왜 이런 기술이 생긴건지'와 같이 원론적인 부분에 대해서만 최대한 질문하려 했다.

이런 질문들은 개발자의 가치관 마다 다른 답변이 나올 수 있기 때문이다. 때문에 나와 상대방이 가진 개발에 대한 식견 차이를 살펴볼 수 있는 몇 안되는 기회이기도 한 것 같다. 물론 기술적으로 아예 틀린 답변은 제외하고 말이다.

아직도 기억나는 것 useReducer() 훅을 처음 배웠을 때 이해가 안됐다. 도대체 왜 존재하는 것인지.

지금이야 Flux 패턴을 외부 종속성없이 가장 Pure하고 React스럽게 구현할 수 있는 방법 중 하나란 걸 알지만, 당시에는 처음 배우고 한 달 간 왜 사용하는지 이해하지 못했다.

ContextAPI를 배우고 Redux와 전역 상태관리를 알게 되며 또 하나의 난관에 봉착했다. ‘전역상태가 왜 필요한가’라는 의문이었다. 물론 이 의문은 실제 프로젝트를 개발해보며 바로 해소되었다.

이후 useReducer 훅만을 사용해 Redux가 상태관리 하는 방식을 나름대로 따라 구현해봤다. 이 시기에 추상화라는 개념을 무의식적으로 인지하게 되었던 같다. 나중에 타입스크립트를 제대로 배우면서 추상화 개념이 어느정도 잡혔던 것 같다.

‘책 집필 계약 성사’
이 시기가 아마 2022.11쯤 이었던 것 같다. 항상 프론트엔드 공부를 하며 느꼈던 것은, 서버, 클라이언트 둘 중 한 분야만 잘한다는 명제는 존재하지 않는다는 것이었다. 한 분야로 전문화되었다는 것은 관련 경험이 많다는 것이지 순수 개발 자체는 분야를 따르지 않는다는 것이었다. 즉 프론트엔드 개발을 잘하기 위해서는 서버에 대해서도 깊이있는 공부가 필요하다고 나름대로 생각했다.

그러나 Java와 Spring을 배울 시간은 없었기에 Node.js를 기반으로 다양한 서버 개념들을 학습해갔다. REST API, Scheme, Query, ORM, 3-tier-architecture, layer 등 기초적인 부분들을 학습했다.

그러던 와중 같이 공부하던 형 중 한 명이 나에게 백엔드 관련 책을 써보는 것이 어떻겠냐는 제의를 했다. 처음에는 망설였다. 나같은 전문지식 없는 학부생이 책을 쓰는게 말이 되나 현실적으로.. 그것도 전문 서적인데.

그러나 책의 주제를 듣고 생각이 달라졌다. ‘백엔드 로드맵'이 책의 주제였다. 형이 이전에 다녔었던 회사와 함께 공동저자로 집필하는 점도 부담을 더는 데 한 몫 했었다.

일전에 말했던 것 처럼 단순히 특정 기술(리액트 등)에 매몰되는 경우를 많이 봐왔고, 이렇게 잘못된 길로 나아가는 사람들이 더 없었으면 했던 마음도 있었다. 가장 큰 동기는 ‘살면서 언제 내가 책을 써보겠냐’ 였다.(어디가서 작가라고 하면 어깨가 으쓱해지는 상상도 했다.)

어쨌든 공동 저자로 집필하기로 약속했고, 형과 나는 초고를 작성해 출판사와 얘기를 나눴다. 출판사는 매우 긍정적으로 검토해주셨고 결과적으로 집필 계약을 확정했다.

지금으로서 계약이 지닌 무게를 어느정도 알 고 있지만, 스타트업 취직 이전의 나는 그냥 어린 애여서 계약 확정에만 관심을 두었다. 공동 저자로 자그마한 회사가 껴 있다고 해도 대학생 둘이 전문 서적을 집필하는데 리스크가 엄청 클 것이다. 무책임하게 계약 이행을 안할 수도 있을 뿐더러 다른 전문가들도 많은데 굳이 학부생과 계약을 해야 하나 싶기도 했을 터인데, 지금 생각해보면 어느정도 배려해주신 측면도 없잖아 있지 않을 가 싶어 담당자님께 매우 감사하다.

이렇게 적고 보니 스무 살 넘어 의인들을 참 많이 만난 것 같다.

어쨌든 계약을 책임감있게 수행하기 위해 2학년 겨울방학은 거의 책 집필에 대부분의 시간을 투자했다. 입문자를 위한 도서의 성격을 가진 만큼 다방면에 대해 누구던 알기 쉽게 설명해야 했다.

이 때 느낀 건, 내가 무엇을 배우고 아는 것과, 그 것을 남에게 설명하는 것은 아예 다른 영역이라는 것을 배웠다. 같은 내용 같은 개념이라도 글의 작성자에 따라 독자가 느끼는 바는 천차만별이 될 수 있다는 것을 알게 되었고, 최대한 내가 아는 개념의 형상을 그대로 전달하기 위해 노력했다.

결과적으로 올해(2023) 11월 초판 예정이다. 책 나오면 인스타에 자랑하고 싶다.

‘3학년 1학기’
겨울 방학동안 책 집필 + 타입스크립트 공부에 힘썼다. 솔직히 프론트엔드 개발은 타입스크립트 전 후로 나뉘는 것 같다. 추상화, DI 와 같은 전문적이고 실용적인 개념들은 물론 Javascript만으로도 배울 수 있지만, 그 이해의 폭은 타입스크립트를 알 고 배웠을 때 엄청난 시너지를 내는 것 같다.

또 Typescript의 제네릭 개념을 씹고뜯어보며 추상화와 아키텍쳐 설계에 대해 큰 관심을 가지게 되었다. Interactive Developer를 보며 시작한 개발이었으나, 막상 공부해보니 이쪽이 매우 흥미로웠다. 탑을 잘 쌓기 위해 땅을 다지는 일이라는 것이 내 마음을 사로잡았다.

관련해서 자체 블로그 제작을 위해 Next.js 및 Nest.js도 배웠다. 나는 옵시디언이나 노션과 같은 마크다운 기반 써드파티 텍스트 에디터를 즐겨 사용했었는데, 어느 환경에서나 마크다운 파일을 작성하고 깃허브에 업로드만 하면 자동으로 블로그에 포스팅이 되도록 CI/CD 환경을 구축하고 싶었다.

기술적으로 여러가지를 다루어 보고 싶은 마음도 있었기에, 탬플릿을 사용하지 않고 처음부터 끝까지 손수 개발했다.

Frontend : Next.js, React, Emotion, Typescript

Backend : Typescript, Nest.js

CI/CD : Github Action, AWS Lambda

배포 : vercel(client), Elastic Beanstalk(server)

물론 겨우 블로그 하나 만드는데 이런 기술 들을 가져다 쓰는 건 오버엔지니어링이지만, 학습의 측면에서 봤을 때 매우 도움이 되었다. 어떻게 보면 서비스 개발부터 배포까지 전 과정을 다루어 봤으니까 말이다.

결과적으로 블로그를 운영하다가 ElasticBeanstalk 비용 때문에 문을 닫아놓았다. Nest.js 빌드 및 러닝을 하기 위한 최소 메모리가 EC2 Micro 로는 모자랐기 때문에 small을 사용했었는데 생각보다 비용이 많이 나왔다. 재정적 여유가 되거나, 추후 광고 수입이 확인될 수준으로 블로그를 적극적으로 운영다면 다시 개발할 생각이 있다.

이 때 쯤 함수형 프로그래밍에 관심이 많아져 인프런의 무료 강의를 수강했었다. 내가 알게 모르게 더 나은 방식이라고 생각하며 코드를 작성하던 방식들이 대부분 함수형 프로그래밍의 관점에 입각한 것들이어서 뿌듯하고 흥미로웠다.

하나의 함수는 하나의 책임만 지녀야 한다던가, 데이터 변조 등의 사이드 이펙트가 없어야 한다는 순수함수의 관점 등을 기존에는 무의식적으로 활용하다가 학문적 개념을 학습하다 보니, 기존과는 다른 관점으로 코드를 바라볼 수 있게 되었다. 조금 더 설득력 있고, 작업자의 생산성을 올릴 수 있으며, 잘 분리된 책임을 가진 함수를 작성할 수 있도록 되었다.

3학년 1학기에는 ‘산학프로젝트’라는 과목이 있는데 쉽게 말해 학부생들 끼리 팀을 꾸려서 한 학기 동안 프로젝트를 진행하는 거다. 매번 응답없는 팀원들 버스만 태우는 입장이었다가 처음으로 좋은 팀원들과 또 한 명의 의인을 만나게 되었다.

우리 팀은 ChatGPT 및 Speach To Text API를 활용해서 사용자가 특정 주제에 대해 강의를 진행하고 피드백을 받는 교육 어플리케이션을 개발하였다.

특히 특별한 계기를 통해 현업에서 5년차 백엔드 엔지니어로 근무하던 선배 형이 합류하게 되어서 많은 도움을 받게 되었다.

물론 형은 프론트엔드 개발에 대한 모든 부분을 나에게 위임하고 일절 관여하지 않고 도움도 주지 않았다. 다만 프로젝트 매니저 및 백엔드 쪽 도움을 주며 팀원 들의 능률이 떨어지거나 작업 일정이 넘어가지 않는 등 태스크 매니징을 확실하게 해주었고 덕분에 나는 아무 부담없이 해보고 싶은거 전부 다 해볼 수 있었다.

다만 하나 아쉬웠던 부분은 프론트엔드 인력이 나를 포함해서 두 명이었는데 남은 한 분이 거의 개발을 처음 접하는 수준이셔서 태스크 분할에 어려움을 겪었다. 그래서 실질적으로 비즈니스 로직과 설계 모두 내가 담당했지만, 이전에 프론트엔드 스터디를 해주셨던 선배님이 생각 나 열심히 마이크로 매니징을 했다. 배우려는 의지와 노력도 강하셔서 하나를 알려드리면 열은 아니고 둘 셋은 해오셔서 스스로 반성을 했다.

Flutter + Webview(react) 환경의 어플리케이션이기에 모바일, PC 전부 지원해야 했다. 관련해서 네이티브 환경과 웹뷰가 통신하기 위한 인터페이스 설계나, 브라우저 히스토리 스택과는 별도로 히스토리 스택을 관리해야 했으며, 어플리케이션의 Header, Footer 부분의 형태가 다양해지기에 전역 상태를 활용해 렌더링되는 컴포넌트를 조정할 수 있도록 하는 등 다양한 기술적 첼린지를 마주했다.

학습과 경험을 위해 Next.js, Typescript, Recoil, Emotion 외에 부가적인 라이브러리나 UI Framework의 사용을 일제 하지않았다.

물론 지금와서 코드를 살펴보면 개떡같이 짜놓은 부분들 투성이지만 나름 노력한 흔적이 보이는 코드들이었다. 렌더링 컴포넌트를 조절하는 것도 DI개념을 활용했고, 커스텀 훅을 통해 항상 일관적인 방식으로 변경하도록 통일된 인터페이스를 사용해서 의도치 않은 사이드 이펙트 발생을 방지한다던가..

네이티브와 웹뷰 통신을 위한 브릿지 코드 설계도 나름 브릿지 패턴, 팩토리 패턴 등을 활용하여 필요한 서비스가 있을 때 서비스 인터페이스를 통해 새로운 서비스 클래스만 정의하도록 해 중복된 코드작성을 방지해보려고 시도하고, 옵저버 패턴을 통해, 리액트 렌더링 주기에 포함될 수 있도록 했다.

과정에서 이펙티브 타입스크립트 책을 읽고 바로 코드를 작성에 적용하면서 타입스크립트의 목표가 무엇인지 어느정도 경험할 수 있었다. 조촐하지만 코드리뷰도 진행해보고 테스크 분배나 사이즈 측정 등을 해보며 팀 프로젝트가 어떤 것인지 경험할 수 있었던 소중한 시간이었다.

5년차 형은 이런 나를 좋게 봐줘서 현업에서 일해 볼 생각이 없냐고 제안했다. 나는 군 문제 + 현업에서만 경험할 수 있는 다양한 지식들을 배우기 위해 무조건 하고 싶다고 했다. 수락할 당시에는 낙하산 마냥 바로 회사에 꽂히는 건 줄 알았다.

근데 그게 아니었다. 형은 그냥 지인과 연결해주는 다리 역할만 해줬고 나는 해당 회사에 정식으로 폰스크리닝 -> 1차 면접(기술면접) -> 2차 면접(임원 면접) -> 채용 프로세스를 거쳤다.

뿌듯했던 건 순수하게 내 실력으로 합격했다는 것 이었다. 해당 회사에 다른 지원자 들이 없었던 것도 아니었고, 스타트업 이기에 당장 실무에 투입될 사람이 필요했을 터인데 당당하게 합격했다.

솔직히 안붙을 줄 알았다. 내가 생각해도 대졸자에 취업 하려고 하는 프론트엔드 개발자가 많고 많은데 왜 학업과 병행해야하며 아직까진 고졸인 나를 뽑아야 하는가 의문이 들었다.

잘 모르겠지만, 내 잠재력이나 개발에 대한 가치관 등을 높이 평가 해주신게 아닌가 싶다. 때문에 매우 감사하다. 업계 평균에 비해 임금이 살짝 낮은 것이 아쉽지만, 주변에서 최저임금 받으면서 사람 대우 못받고 일하는 케이스도 많이 봤기에(특히 학교와 연계되는 기업 인턴 등) 감사하게 생각하고 다니고 있다.

‘현업에서 근무하며 느낀 점 (2023.06~)’
기업의 비용관리를 총괄하는 서비스여서 도메인이 매우 어려운 측에 속한다. 때문에 많은 걱정을 했었으나 개발 자체에 대해서는 내 걱정과는 달리 적응 자체는 빨랐다. 입사하고 이틀 간 여러 컨벤션 문서들을 살펴보고, 어플리케이션 마운트 시 발생하는 Redux 액션들의 흐름을 분석했다.

사수의 생각보다 빨리 마무리 된 듯 하여 입사 3일차 부터 간단한 버그 개선 건 부터 실무에 투입되었다. 과정에서 기술적으로 특별한 어려움은 없었다. 오히려 문제가 되는 건 신입개발자로서의 내 열정이었다.

모든 코드에는 이유와 상황이 있지만 입사한 지 얼마 되지 않은 나는 그 부분을 이해하지 못했다. 서비스가 개발된지 어느정도 되었기에 JS, Jquery 등을 통해 작성된 레거시 코드들이 비즈니스 로직의 핵심이 되는 부분들이 많았다.

또 단일 책임 원칙이나 함수 분리 등은 개나 줘버린 상태의 3천줄 짜리 컴포넌트를 보자니 한숨 + 뜯어 고치고 싶다는 무서운 생각이 나를 사로 잡았다.

그런 마음들을 꾹꾹 눌러둔 채 온보딩 테스크로서 간단한 버그 개선 건들 부터 작업했었다. 입사 3일차에 첫 PR을 올렸고 대략 10개의 커멘트가 달렸다.

뭔가 기술적인 리뷰보다는, 경험적인 측면에서 이런 방식으로 작성하게 되면 나중에 어떻게 유지보수 해야하는지 근거를 물어보는 리뷰가 많았다.

확실히 내 코드에는 기술적 근거는 있어도 유지보수와 서비스적 근거는 없었다. 스스로 생각하기에 이 부분이 현업자와 학부생 혹은 취준생의 차이가 아닐까 싶다.

그래서 리뷰가 달릴 수록 개발에 대한 시각이 하루하루가 넓어지는 게 느껴져서 좋았다.

그러나 계속되는 버그 개선 건에서 리팩토링 하고싶은 부분들이 많아, 테스크의 컨텍스트와는 맞지 않게 리팩터링을 진행해서 PR을 올리는 경우가 많아졌고 이 부분에 대해 상당한 피드백을 받게 되었다. 리소스가 적은 상황에서 모든 테스크에 QA를 진행할 수 없는데, 특히 간단한 버그 개선건은 QA를 진행하지 않는 경우가 더 많다. 그런 상황에서 무턱대고 리팩터링을 진행하면 어떤 영역에서 사이드 이펙트가 터져버릴 지 아무도 알 수 없다.

나는 그저 내 감정에 충실한 개발을 진행하고 있었다. 회사는 현실이고 결국 서비스가 우선시 되어야 하는 데 말이다.

그래서 입사한 지 한달이 되었을 때, 이런 오버엔지니어링과 리펙터링 등에 대해 사수분에게 많은 피드백을 받았다. 그래서 2달 째는 이 부분을 조심하고 개선하는 데 중점을 두고 작업을 진행했고 결과적으로 매우 개선되어 좋은 인상과 신뢰를 남긴 것 같다.

물론 나름 칭찬 받은 부분도 있다. 개인적으로 프론트엔드 개발자는 커뮤니케이션이 가장 중요한 위치에 있다고 생각한다. 서버 개발자, PM, 기획자, 디자이너 모두와 소통할 줄 알아야 하고 결과적으로 모두의 의견이 한 데 모이는 곳이 화면이고 그걸 구현하는 개발자이기 때문이다.

때문에 커뮤니케이션에 최대한 지장이 없도록 유비쿼터스 랭귀지?를활용한다던가, 최대한 기록에 남기려는 습관 기르기, 문제 상황에 대한 해결방안을 먼저 제시하기 등 의식적으로, 무의식적으로 스무스한 커뮤니케이션이 이루어질 수 있도록 노력했고, 결과적으로 월 말 평가에 꾸준하게 좋은 말씀들을 남겨주신다.

더욱이 사내에서 개발자들의 문화는 상당히 좋은편이다. 새로 도입하고 싶은 기술이나, 개선하고 싶은 방안이 있고, 그에 대한 충분한 근거만 있다면 어떤 누가 주장하던 무조건 반영이 된다.

나 또한 그런 부분을 적극적으로 활용하여 개선한 부분이 많다. 모듈관리 컨벤션의 다양한 방식을 분석해서 장 단점을 추출하고 보고하여 개선한다던가, moment.js를 다른 라이브러리로 마이그레이션 하기 위해 다양한 날짜 관련 라이브러리를 구체적으로 분석하여 date fns로 변경하기, React Suspense 및 React Query 버전 업을 위한 가이드 작성 등(공수가 커서 아직 반영안됨 ㅠㅠ), 스타일링 컴포넌트의 모듈 주입 방식의 통일, PR 시 자동 라벨링 github action 제작, 신규 디자인 시스템 컴포넌트 개발(진행 중) 등 신입 개발자가 긍정적 영향을 줄 수 있는 다양한 부분에 대해 개선하려고 시도하고 있다.

‘앞으로의 목표’
나는 테스트 코드 작성에 미숙하다. 관련하여 테스트 코드의 다양한 부분을 학습해보고 싶다. 또 리펙터링이나 함수형 프로그래밍, Node.js 등 공부하고 싶은 게 너무 많다. 또 요즘 부쩍 아키텍트에 관심이 많아졌고 흥미가 있어 다양한 지식을 접하면서 최종적으로 꾸준히 아키텍트의 길로 공부해 나가지 않을 까 싶다.

0개의 댓글