-
1년차 웹 프론트엔드 개발자의 2020년 회고Etc 2020. 12. 31. 18:39
코로나때문에 크리스마스 연휴지만 어디 나가지도 못하고 집에 갇혀 지내는 요즘, 여기저기 돌아다니면서 연말 기분을 내는 대신 집에서 차분히 2020년을 되돌아보며 1년을 회고하자는 마음으로 노트북을 켰다. 올해는 정말 많은 일들이 일어난 해였다. 작년 여름에 개발자가 되겠다고 굳게 결심하고 공부를 시작한 것이 결실을 맺어 올해 1월 6일에 프론트엔드 개발자로 첫 출근을 하였다. 회사에서 정말 좋은 동료들을 만났고, 1년 간 많은 성장을 했다. 내가 1년간 한 것과 아쉬운 것들을 간단하게나마 정리해보려고 한다.
입사하고 최종 부트캠프에 합격하기까지 (1Q)
- 회사에 잘 적응
- 부트캠프 기간에 3가지 과제 해결 (레거시 API 교체 / 사내에서 사용하는 라이브러리 제작 및 개선)
- 부트캠프 합격
- 웹팀 코드 스타일 가이드 작성
나는 바닐라코딩이라는 개발 부트캠프를 수료하고 회사에 입사했다. 6개월 간 부트캠프에서 쉽 없이 달려왔기에 회사를 합격하고 나서는 모든 것을 보상받는 기분이었다. 그런데 이게 웬걸. 회사에 합격한 것이 끝이 아니었다. 회사에 입사하면 3개월 간의 수습 기간을 가지는데, 회사에서는 이 3개월을 부트캠프라는 단어로 불렀다. 부트캠프를 끝내고 신나서 입사를 했는데 다시 부트캠프라니... 😂 심지어 부트캠프에서 불합격하면 입사가 취소된다고 했다. 3개월이라는 시간 동안 나라는 사람을 증명하지 못하면 합격이 취소될 지도 모른다는 불안감이 엄습했다.
입사 후 첫 회의를 들어갔는데 도대체 무슨 이야기가 오가는지 아무 것도 이해가 되지 않았다. 처음 듣는 용어들이 막 빠르게 오갔고 컨텍스트 파악은 하나도 되지 않았다. 그 와중에 부트캠프 과제를 받았는데 그 과제를 수행하려면 반드시 이해해야 하는 기존 레거시 코드는 정말이지 너무 복잡해서 구조 파악이 쉽지 않았다. 그래서 이 때의 나는 어떻게 했을까?
나는 일단 모든 것을 기록에 남기려고 노력했다. 내가 맡은 과제를 끝내기 위해 꼭 해야 하는 것들이 무엇인지 그 단계를 모두 Jira(업무 관리 및 협업을 위한 툴) 티켓으로 만들었다. 각각의 티켓에는 어떤 것들을 해야하는지와 질문 사항들을 빼곡히 정리했다. 덕분에 해야할 일들을 빼먹지 않고 차근히 해결할 수 있었고, 사수에게 내가 어떤 것들을 수행했고, 어떤 것들을 이해 못했는지 바로 커뮤니케이션할 수 있었다. 신입 때 가장 중요한 것은 내가 모르는 것을 빠르게 커뮤니케이션하는 것이다. 그냥 모른다고 혼자 끙끙 앓고 있으면 시간만 가고 해결되는 것은 아무 것도 없다.
첫 번째 부트캠프 과제를 완료하고 두 번째 과제를 받을 때쯤, 중간 피드백을 듣게 되었다. 거기서 다른 사람의 코드 리뷰에 조금 더 적극적으로 참여했으면 좋겠다는 피드백을 들었다. 우리 회사는 어떤 사람이 쓴 코드든 누구나 자유롭게 코드 리뷰를 할 수 있는 문화를 가지고 있다. 그리고 어떤 코드가 merge되려면 반드시 코드 리뷰를 받아야만 한다. 처음에는 정말 쉽지 않았다. 이제 막 입사한 내가 나보다 한참 전에 입사한 사람들의 코드를 리뷰할 자격이 되는가에 대한 두려움이 컸다. 그래서 첫 달에는 거의 하지 못했고 피드백에 언급되었다. 그래서 두 번째 달에는 가능하면 모든 코드 리뷰에 참여하려고 노력했다. 되도록이면 유의미한 리뷰를 남기기 위해 정말 한 줄 한 줄 열심히 파악했고 마지막 피드백 때 좋은 평가를 받았다.
처음 입사했을 때 웹팀에 코드 스타일 가이드가 따로 존재하지 않아 여러 repo마다 조금씩 다르게 적용되어 있어서 혼란스러웠다. eslint rule로 관리되고 있었지만 그 범위가 작았기 때문에 lint로는 처리할 수 없는 자잘한 예외들이 많았다. 그래서 마크다운 파일로 스타일 가이드 초안을 만들었고, 모든 팀원들의 의견을 취합하여 JavaScript 스타일 가이드 초안을 작성했다.
4월 ~ 6월 (2Q)
- 건강팀에 합류하여 서비스 개발
- 건강 서비스 쪽 레거시 코드 청산
- Product Language 개발에 참여
- 비개발자를 위한 테크 지식 발표
부트캠프에 합격하고 나는 Wellness 스쿼드라는 이름의 건강 서비스를 관리하는 팀으로 이동했다. 그 팀에서 처음으로 서비스 개발을 하게 되었는데 가장 어려웠던 점은 다른 직군의 사람들과 커뮤니케이션하는 부분이었다. 우리 회사에서 스쿼드는 개발자뿐만 아니라 PO, PM, 디자이너, BD, BO 등 다양한 직군이 모여서 하나의 서비스를 개발하는 팀을 말한다. 기존에 부트캠프를 진행할 때는 서비스와 조금 동떨어진 영역에서 개발자들과 소통했는데, 다른 여러 직군들과 소통을 처음 시작하면서 많은 어려움을 느꼈다. 내가 해야 하는 업무를 개발을 잘 모르는 다른 직군에게 잘 설명하고 왜 해야하는지 설득하는 일은 정말 중요했다. 그래서 최대한 문서를 작성하려고 노력했고 같은 팀에 계셨던 테크 리드분께 많이 배웠다. 그러다 같은 팀의 PO님이 비개발자들이 개발자들과 협업할 때 알아두면 좋은 용어들이나 기술들을 간단히 발표해보면 어떠냐는 제안을 주셨고, 어쩌다보니 전사 비개발자분들을 대상으로 발표를 하게 되었다. 지금 생각하면 참 부족함이 많은 발표였지만 정말 좋은 경험이 되어 주었다. 그리고 커뮤니케이션에 대한 자신감도 많이 높여 주었다.
스쿼드에 합류하고 나서는 건강 서비스의 코드를 마이그레이션하면서 레거시 구조를 청산하는 업무를 진행했는데 Redux와 Redux saga를 도입하여 진행했다. 과도한 Dependency injection과 콜백 지옥으로 인해 비즈니스 로직 하나 찾으려면 이 컴포넌트 저 컴포넌트 헤매야하는 불상사를 해결하고 유지보수하기 쉬운 간결한 구조가 되었다. 그 외에도 회사 Product Language 개발 초기에 참여하여 서비스 개발을 위한 여러 스타일 컴포넌트를 제작하였다.
7월 ~ 9월 (3Q)
- 보험 서비스 레거시 코드 청산
- 서비스 개발하면서 다양한 실험 진행
- 테크올핸즈에서 실험 성과 발표
3분기가 되면서 우리 팀이 건강에서 보험 피쳐를 관리하는 팀으로 변경되었다. 그래서 보험 피쳐를 담당하여 역시 Redux를 도입하여 코드 구조를 개선했고 다양한 서비스 개발을 진행했다.
올 해 3분기는 우리 회사가 데이터 드리븐(Data driven) 회사로 성장하기 위한 초입이었다고 생각한다. 데이터팀에서 어떤 기능을 개발할 때 무조건 A/B 테스팅을 실시하고 그 결과에 따라 의사 결정을 하도록 실험이 장려되었다.
이렇게만 적으면 대체 실험이란 것이 무엇인지 궁금할 수도 있어 좀 더 설명을 적어보자면... 우리는 서비스 개발을 할 때 공급자의 마인드로 기획을 하고, 그 기획서대로 개발을 하여 사용자들에게 제공한다. 그런데 우리가 기획한 서비스가 진짜로 고객이 좋아하는 서비스인지 아무도 알 수 없다. 완전히 공급자의 관점에서 설계된 기획이기 때문이다. 그래서 이 때 실험을 진행할 수 있는데, 유저를 50 : 50으로 나눠서 한 쪽에는 기존 기능을 그대로 제공하고, 나머지 한 쪽에는 새로운 기능을 제공하는 것이다. 이렇게 실험을 시작하고 어느 정도 데이터가 쌓이기 시작하면 대조군과 실험군 중에 고객이 정말 만족한 피쳐가 어떤 것인지 지표로 명확히 확인할 수 있다.
실험은 더 나은 의사 결정을 객관적인 지표로 정할 수 있게 해주는 정말 좋은 솔루션이었다. 그런데 문제는 아직 실험을 하는 문화가 정착되지 않았었고, 실험을 어떤 식으로 개발에 적용할 수 있는지 예시가 거의 없었다. 이러한 상황 속에서 우리 팀은 최대한 빠르게 실험 문화를 팀 내에 정착하려고 노력하였다. 그리고 나도 그 변화에 발맞춰 적극적으로 실험 설계를 진행했고, 웹팀에서는 거의 최초로 큰 규모의 실험을 주도적으로 진행했다. 그리고 첫 실험의 결과는 정말 성공적이었다. 실험군의 지표가 어마어마하게 높았던 것이다. 🎉
실험은 잘 마무리되었고, 성과를 잘 정리해서 매 월 회사에서 진행하는 테크올핸즈에서 성과 발표를 진행했다. 3분기의 가장 큰 성과가 아닌가 싶다!
10월 ~ 12월 (4Q)
- 다양한 서비스를 개발하면서 integration 테스트 도입 (React testing library, MSW 등 도입)
- 새로운 기능에 대한 통합 테스트 커버리지를 상당히 끌어올림
- integration 테스트 가이드 문서를 작성하여 팀 내 공유
4분기에 내가 이룬 가장 큰 성과는 테스트 코드라고 할 수 있을 것 같다. 사실 내가 개발한 서비스에 unit 테스트 코드는 많이 작성했었는데, 그럼에도 불구하고 서비스를 배포할 때마다 자신감이 항상 낮았다. 사전에 로직에 오류를 발견하지 못하고 QA 때 발견되는 일도 종종 생겼다. 이 문제를 어떻게 개선할 수 있을 지 많은 고민이 있었는데 결론은 integration 테스트 코드의 도입이었다.
그 동안 진행했던 여러 util 함수들에 대한 unit 테스트, 그리고 saga 코드에 대한 형식적 테스트 코드로는 전체 서비스에 대한 안정성을 보장할 수 없다는 것이 나의 결론이었다. 세부 부품들이 잘 작동한다는 것을 검증했더라도, 그 부품들을 연결하는 방식 자체에 오류가 있다면 작성했던 테스트 코드들은 무용지물이 되기 마련이다. 결국 전체 서비스의 안정성을 위해서는 각 부품들이 잘 연결되었는지를 통합적으로 검증해야한다.
사실 integration 테스트가 좋다는 것은 알지만 도입하지 못했던 이유는 1. 어떻게 해야할 지 모르겠고, 2. 시간이 많이 걸릴 것 같다는 두려움 때문이었다.
1. 어떻게 해야할 지 모르겠다.
이 부분은 일단 testing library라는 툴 문서를 읽어보면서 아주 아주 간단한 테스트를 하나라도 작성해보려고 했다. 아주 간단하게 루트 컴포넌트를 렌더링시키고 내가 원하는 컴포넌트가 존재하는지부터 테스트했다. 초기 환경 세팅을 하는 부분은 정말 고통스러웠는데, 하나씩 오류를 해결해나가면서 부딪힌 난관들은 기록을 해두었다.
2. 시간이 많이 걸릴 것 같다.
개발 일정을 산정할 때 무조건 테스트 코드를 작성할 수 있는 시간을 넉넉히 잡았고, 이 부분이 서비스 안정성을 위해 꼭 필요한 일이라고 팀원들을 설득했다.
여러 노력 끝에 4분기에 새로 만든 모든 서비스 코드에 integration 테스트 코드를 작성할 수 있었다. 테스트 코드를 작성하면서 가장 좋았던 것은 테스트 코드로 오히려 전체 개발 시간이 단축되었다는 점이다. 테스트 코드를 계속 적성하다보니 어느 정도 반복되는 패턴들을 익혀 작성 시간이 점점 줄어들었다. 그리고 무엇보다 QA 때 에러가 발생하는 일이 0건으로 줄었다! 그래서 배포 직전에 급하에 코드를 수정하는 일이 없어졌다.
1년 동안 성장한 것들
- 커뮤니케이션 스킬을 많이 배웠다.
- 나는 항상 말보다는 글쓰는 것을 선호하고 조리있게 내 의견을 말하는 것에 자신감이 낮았는데 1년 동안 많은 개선이 있었다고 생각한다.
- 문서 커뮤니케이션을 더 잘하려고 노력했고, 4분기에 많이 개선되었다고 생각한다. 개발하기 전에 무조건 테크 스펙 문서를 작성했고, 개발 일정을 아주 작은 task 단위로 잘게 쪼개서 최대한 정확히 산정하려고 노력했다.
- 의사 결정을 보다 분명히 할 수 있게 되었다.
- 입사 초반에는 의사 결정을 잘 하지 못해서 정말 힘들었던 기억이 난다. 그래도 1년이 지난 지금의 나는 입사 초기에 비해서는 훨씬 더 명확히 의사 결정을 할 수 있는 사람이 된 것 같다.
- 기술적인 성장
- 사실 내 코딩 실력이 얼마나 더 나아졌는지에 대해서는 객관적으로 판단 못하겠다. 그래도 1년 동안 꾸준히 바닐라코딩 같은 기수 멤버들과 스터디를 진행했다. JavaScript 공부를 꾸준히 했고, 서로 공부한 내용을 공유하는 시간들을 가졌다. 여기 저기서 얻는 새로운 개발 트렌드를 놓치지 않으려고 블로그 글도 읽고 유튜브 강의들도 보았다.
- 테스트 코드에 대한 많은 공부를 했고 개선을 이루었으며 다음 분기에도 꾸준히 더 나은 테스트 코드를 작성하기 위해 노력할 것이다.
- 바닐라코딩 프렙 과정의 과제 코드 리뷰어로 활동했다. 내가 수료했던 부트캠프의 과제들을 다시 보니 반갑기도 하고, 과제하시는 분들 코드를 보며 많은 인사이트를 얻었다.
아쉬운 점들
- 도메인에 대한 관심을 많이 가지지 못한 점
- 우리 회사는 개발자이기 때문에 개발만 해도 되는 회사는 아니다. 개발자이지만 기획에도 자유롭게 참여할 수 있고, 피드백을 주어야하는데 도메인 자체에 대한 관심을 많이 쏟지는 못했던 것이 아쉽다. 물론 개발할 때는 일정에 치여서 개발하느라 정신 없기도 했지만 그럼에도 불구하고 도메인 자체에 공부를 좀 해야겠다고 느꼈다.
- 프론트 개발 외의 다양한 공부를 못한 점
- 네트워크 통신이나 서버, 도커 등등 이런 분야의 공부를 거의 하지 못한 점이 너무 아쉽다. 내년에는 이 쪽 분야로도 공부를 꼭 해야겠다는 다짐을 해본다...
- 블로그 글을 자주 쓰지 못해서 아쉽다. 사실 바쁘다는 것은 핑계인 것 같고, 얼마든지 쓸 수 있는 시간이 많았는데 잘 안쓰게 되었던 것... 반성해본다ㅠㅠ
- 주제가 어떤 것이든 사이드 프로젝트를 진행해보지 못한 점. 내년에는 서버쪽 공부도 좀 더 해서 작은 미니 프로젝트를 하나라도 해봐야겠다.
올 해 코로나도 터지고 정말 다사다난했던 2020년이었다.
개발자로서의 첫 단추를 잘 끼운 것 같아 뿌듯하고 내년에 더 많이 성장할 수 있길 바란다.
끝!
반응형'Etc' 카테고리의 다른 글
2년차 웹 프론트엔드 개발자의 2021년 회고 (253) 2022.01.31 TypeScript declarations 파일에 Webpack Alias 적용하기 (127) 2020.03.21 Webpack, React, Typescript, Jest 환경에서 Alias 적용하기 (절대 경로 import) (253) 2020.03.01 COMMENT