체대 출신 개발자의 2019년 회고

체육을 전공하고 29살에 개발 공부를 시작한 개발자의 2019년 연말 회고. 줌인터넷 포털개발팀 백엔드 개발자로 이직하고, 파일럿 프로젝트와 TDD강의, 스터디를 통해 성장하고, 인명구조요원 자격증을 취득하는 등 비전공자 개발자가 겪은 2019년 성장 이야기.

체대 출신 개발자의 2019년 회고
2019 SEF 발표

이 글은 개인적인 회고록이다. 그래서 독백체
2019년의 경험과 생각을 정리하고자 한다.

1. 요란한 빈 수레

1년 전 오늘, 체대 출신 개발자의 2018년 회고를 블로그에 올렸다. 그런데 이틀간 페이지뷰 2만을 넘기며, 과분한 관심과 감사한 응원을 받았다. 특히 평소에 우러러보던 개발자분들이 자극받았다는 피드백을 주셔서, 대단한 일을 한 것 같은 착각마저 들었다.

어떤 개발자 뉴스레터
개발자스럽다 트윗
권용근 님과 김영재 님 댓글
Outsider 님 트윗

이런 달콤한 칭찬들을 들으니 열정이 불타올랐지만, 동시에 내 자신을 더 객관적으로 바라보게 되었다. 그 결과, 빈 수레가 요란하다는 표현이 떠올랐다. 개발 실력은 밑바닥이면서, 연말 회고는 요란했던 것이다.

나는 요란한 빈 수레가 된 것이 마음에 들지 않았고, 회고를 올린 이후에는 조용히 지냈다. 연초부터 많은 일들이 일어났지만, 블로그에 일절 공개하지 않았다.그런데 요란한 빈 수레를 다시 생각해보니, 아차 싶었다.

1년 차 개발자인 내 수레가 비어있는 것은 당연하니, 그 수레를 채우는 일에만 전념했어야 했다. 하지만 겸손하고 싶어서, 때아닌 겉치레를 해 온 것이다. 겸손은 내가 가진 무기 중 하나였지만, 이번에는 나를 옭아매고 속박했다. 부족함을 드러낼 때, 빈 수레를 채울 수 있다는 사실을 간과한 것이다.

이쪽 세계는 진검승부인 것 같다. 다만, 베이고 베여도 죽지 않고 더 강해지는 세계다. 내 속살을 드러내고 이리저리 베이면서 강해지고 싶다. 그래야 가득 찬 수레가 될 수 있고, 진정한 겸손을 부릴 수 있을 것이다.

2019년 회고를 기점으로 다시, 요란하게 빈 수레를 채우고자 한다.

2. 이직

작은 스타트업에서 개발자로 일한 지 6개월 만에 임금체불이 연달아 발생했다. 기획재정부 장관님(와이프)을 모시고 사는 나에게 임금체불은, 고민할 가치도 없는 이직 사유였다.

임금체불 외에도 문제가 많은 회사였지만, 개발 경험이 없던 나를 개발자로 채용해 준 것에 대한 의리(?)로, 회사에 부담을 주지 않고 이직을 진행했다.

이직을 결심한 시점은 2018년 회고를 쓰던 때였다.

2-1. 때마침 찾아온 기회

2018년 회고 마지막 부분에 아래와 같은 내용이 있다.

이때 김남준 님(현실에선 남준이ㅎ)이 아래와 같이 사내 추천 기회를 주셨다.

2018년 회고에는 알고리즘 테스트를 걱정하며 지원하지 않았다고 했지만, 이직을 결심한 상태였고, 당연히 알고리즘 테스트에서 떨어질 것이라 생각했기 때문에 밑져야 본전이라는 생각으로 줌인터넷 포털개발팀에 이력서를 제출했다.

2-2. 이직 시작 알리기

이직을 결심한 이후, 이직할 때가 되면 연락 달라 하셨던 헤드헌팅 업체 이사님께 이직 의사를 알렸다. 그런데 2018년 회고를 좋게 봐주신 분들이 계셔서, 바로 3개의 회사와 면접을 진행할 수 있었다.

직접 알아보고 선택한 회사들은 아니었지만, 내 실력에 과분한 회사들이었기 때문에 감사한 마음으로 진행했다.

2-3. 붙으면 대박, 떨어져도 좋은 연습

이직을 결심했지만 개발자로서는 첫 이직이라 면접 준비가 막막했는데, 다행히 한재엽 님이 운영하시는 Tech Interview For Beginner와, 권희정 님이 운영하시는 Tech Interview의 내용으로 기술 면접 준비를 시작할 수 있었다.

두 저장소의 내용들은 기초가 부실한 나에게 너무나 유익했지만, 실제로 기술 면접을 연습해보고 싶었다. 그래서 붙으면 대박, 떨어져도 좋은 연습이라는 생각으로 주니어 개발자를 위한 취업 정보에 올라온 회사들에 지원해 보았다.

이동욱님이 운영하시는 이 저장소는 잡플래닛 평점 3.3 이상인 회사들만 리스트업 된다. 때문에 나쁜 회사들이 어느 정도 필터링되어 면접 퀄리티도 좋으리라 판단했다.

Java와 Spring을 사용하는 5개의 회사에 지원했다. 그런데 서류가 통과된 곳은 ZEPL 단 한 곳뿐이었다.

역시 나는 아직 초ㅂ밥이구나.. 라고 씁쓸해하는 한편,
그래도 면접 연습을 한 번은 해볼 수 있겠다!라며 애써 마음을 다잡았다.

2-4. 면접 시작

위의 과정을 거쳐, 총 5장의 패를 들고 면접 릴레이에 돌입했다. 가장 먼저 면접을 본 곳은 ZEPL이었다. 면접은 구글 행아웃을 사용했고, 영어로 진행되었다.

면접관은 시니어 개발자님(외국분)과 주니어 개발자님(한국분)이 함께 참여하셨다. 자기소개를 간단하게 하고, 어떤 개발자가 좋은 개발자인지 등의 질문이 있었다. 그리고 곧바로 코딩테스트에 돌입했는데, 얼마 지나지 않아 멘탈이 터져버렸다.

알고리즘 테스트 준비가 전혀 안 된 상태였기 때문이다. (평생 풀어본 알고리즘 문제가 10문제 안팎인 상태) 게다가 풀이 과정을 설명하며 문제를 풀어달라는 요청을 받았다. 지금 생각해 보면 어려운 문제는 아니었는데, 당시에는 손도 댈 수 없었다.

코드가 작성되어야 할 자리에, 애꿎은 커서만 나 홀로 깜빡거렸다.
제발 코드 한 줄이라도 써주길.. 바랐을 면접관님들을 적막 속에 가둔 채, 식은땀을 뻘뻘 흘리던 나는 결국 못 풀겠습니다.. 라고 말했다.

이때 느낀 부끄러움과 나 자신에 대한 분노가 아직도 생생하다.

이제는 이 면접이 어디로 흘러가는지 모두가 알고 있는 상황에서, 면접관님은 다른 문제를 내주셨다. 그냥 박살난 채로 면접이 빨리 끝나길 바랐는데, 내주신 문제가 풀어본 적 있는 펠린드롬 문제였다. 이 문제는 풀어본 문제라고 솔직하게 말씀드린 후 코드를 작성했고, 그렇게 면접이 끝났다.

기술 면접을 연습하고자 도전했다가 알고리즘 방망이로 뒤통수를 세게 얻어맞았다. 진정성 없이 도전한 자의 필연적인 최후였지만, 이 면접을 계기로 귀중한 깨달음을 하나 얻었다.

"개발자 세계에서 실력이 부족하면, 누구보다도 나 자신에게 떳떳하지 못하겠구나"

2-5. 알고리즘 테스트

ZEPL 면접에서 얻어맞은 뒤통수가 아직 얼얼한 상태에서, 줌인터넷으로부터 서류합격 소식을 받았다. 알고리즘 테스트 제출 마감일은 일주일 뒤로 잡혔는데, 아무리 생각해도 일주일 준비한다고 통과할 것 같지 않았다.

그래서 인사팀에 준비할 시간을 더 받을 수 있는지 문의했고, 다행히 3일을 더 받았다. 주어진 10일 안에 Codility에서 시험에 응시해야 했는데, 아직 이전 회사에 다니던 때라서 연습할 시간이 턱없이 부족했다.

연습할 시간을 어떻게 확보할지 고민하던 끝에, 고등학생 때 등하굣길에 영어단어 수첩을 들고 다니며 외웠던 것이 생각났다. 그래서 노란색 옥스퍼드(?) 메모지에 문제를 미리 적어두고, 출퇴근길 지하철에서 문제를 풀었다.

지하철은 크게 흔들리지 않아서 좋았고, 내리기 전까지 한 문제 푸는 것을 목표로 하니 집중도 잘되었다. 혹시 모를 화이트보드 코딩 테스트도 대비할 수 있는 방법이었는데, 면접에서 화이트보드 코딩의 기회는 없었다. 이 방법으로 출퇴근길 지하철에서 1~2개의 문제를 더 풀 수 있었다.

하지만 하루에 많이 풀어야 다섯 문제였기 때문에, 애초에 목표로 했던 Codility 연습문제들을 다 풀 수는 없었다. 대신 문제가 안 풀려도 바로 풀이를 보지 않고, 최소 1시간은 이리저리 고민해보고 풀이를 확인했다. Codility 연습문제들이 비비 꼬인 문제들은 아니어서 1시간 정도는 고민할 가치가 있었다.

그리고 드디어 제출 마감일이 다가왔다. 2시간 40분 동안 세 문제를 풀어야 했다. 난이도는 Codility 연습문제들보다 조금 더 어려운 수준이었다.

1번 문제는 잘 푼 것 같았고,
2번 문제는 잘 푼 것 같았지만, 시간 부족으로 테스트 케이스를 꼼꼼하게 체크하지 못했다.
3번 문제는 30분도 남지 않은 상황에서 풀기 시작했고 막판에 해결책을 찾았지만, 코드를 작성하다가 시간이 끝나버렸다.

면접에 대비하기 위해 바로 문제를 복기해서 기록해두고, 2번 문제와 3번 문제는 그 자리에서 바로 다시 풀었다. 잘 푼 것은 아니었지만, 그래도 10일 동안 연습한 것 치고는 꽤 푼 것 같아서 마음이 홀가분했다.

일주일 뒤에 나온 결과는 간발의 차이로 통과!

아직 최종 합격한 것은 아니었지만,
알고리즘 테스트에 통과했다는 사실에 얼얼했던 뒤통수가 말끔해졌다🙃

2-6. 면접 & 합격

가장 원하던 곳은 줌인터넷 포털개발팀이었는데, 다행히 진행 속도가 가장 빨랐다. 그래서 다른 회사들은 기술 면접까지만 진행하고, 결과가 나오기 전에 모두 포기를 알렸다.

줌인터넷 기술 면접은 다른 회사들의 기술 면접보다 더 어려웠다.
받은 질문의 절반밖에 답변하지 못했는데, 모르는 것은 솔직하게 모른다고 답변했다.

그런데 질문 2개 중 1개를 모른다고 답변하면서도, 자신감을 잃지 않았다. 내가 그 기술을 모르는 이유는 접할 기회와 시간이 부족했기 때문이라고 스스로 확신했기 때문인데, 이 근자감은 체육을 전공하고 마케팅과 무역 분야에서 일해보며 얻은 것이다.

새로운 분야에 뛰어들 때마다, 처음에는 내 능력으로는 안 될 것 같고 두려웠다. 그런데 막상 해보면 선천적인 능력 차이가 아니라, 투입한 시간과 노력의 차이일 뿐이었다.

물론 선천적인 능력이 중요한 일들도 있다. 농구선수는 키뿐만 아니라 Wingspan이라고 부르는 팔 길이가 정말 중요한데, 신인 선수는 Wingspan 이 잠재력 평가에 큰 영향을 미치기도 한다.

본인 키보다 더 긴 카와이 레너드의 Wingspan

그런데 개발 지식의 경우, 농구선수의 Wingspan처럼 선천적인 능력이 아니다. 때문에 시간과 노력을 들여서 해당 지식과 경험을 습득하면 된다고 생각했다. 비전공자라고 무조건 주눅 들지 않고, 이 마인드를 갖는 것이 나에게는 큰 도움이 되었다.

가까스로 줌인터넷 1차 면접을 통과하고, 기술면접 같은 최종면접이 진행되었다.

결과는 합격! 합격 전화를 받은 후, 와이프와 얼싸안고 방방 뛰며 좋아했다😁

이렇게 약 2개월의 이직 과정을 거쳐서, 2019년 2월 11일 줌인터넷 포털개발팀으로 이직했다. 개발 공부를 시작한 지 약 1년 만에, 드디어 제대로 된 회사에서 개발자로 일하게 된 것이다.

3. 세 번의 점프

2019년 개발 실력 향상에 가장 큰 도움이 되었던 세 가지 경험을 정리해본다. 파일럿 프로젝트, TDD 강의, 회사 업무

3-1. 파일럿 프로젝트

2019년 2월 18일부터 5월 3일까지 파일럿 프로젝트를 진행했다.
자세한 파일럿 프로젝트 후기는 줌인터넷 기술블로그에 있다.

줌인터넷 포털개발팀에서 일하고 싶었던 이유 중 하나가 바로 신입사원 파일럿 프로젝트였다. 파일럿 프로젝트는 팀에서 사용하는 기술들을 기반으로 웹서비스의 설계부터 개발, 배포까지 스스로 진행하면서 코드 리뷰를 받고, 마지막에는 사장님과 다른 팀들 앞에서 발표하는 프로젝트다.

파일럿 프로젝트에 대해서는 이 회사에 다니셨던 이동욱 님의 블로그 글을 통해 처음 알게 되었는데, 당시 회사에서 별다른 성장을 못 하고 있던 나에게는 너무나 부러운 경험이었다.

그런데 산 넘고 물 건너 포털개발팀에 합류하게 되었고, 간절히 원했던 경험인 만큼, 파일럿 프로젝트를 통해 2019년을 통틀어서 가장 많은 성장을 했다고 생각한다.

입사 첫날, 내가 속하게 될 파트의 선임 개발자분께서 아래와 같이 프로젝트 주제와 필수/선택 기술과 기능을 정해주셨는데, 주제는 포털개발팀 팀원 간 기술 공유를 활성화하기 위한 개발 컨텐츠 공유 서비스였다.

내 Notion 페이지에 정리한 구현 스펙

​깜짝 놀랐다. 개인적으로 운영 중인 { 고퀄리티⚡️개발 컨텐츠 모음 }의 데이터를 활용해서 토이 프로젝트로 만들고자 했던 서비스가 우연히 파일럿 프로젝트의 주제로 정해진 것이다.

하지만 기쁨도 잠시, 처음 접해보는 Vue.jsJPA, QueryDSL, Spring Security까지 필수로 사용해야 했다. 특히 Vue.js는 프론트엔드 기술 자체를 처음 사용해 보는 것이어서 어떻게 시작할지 감도 잡히지 않았는데, 시간이 부족했기 때문에 인프런의 Vue.js 강의들을 빠르게 수강하고, 한글 공식 문서를 계속 보면서 만들어 나갔다.

파일럿 프로젝트는 정해진 기간 안에 ERD 설계부터 Vue.js를 활용한 화면단까지 모든 것을 직접 개발해야 했고, 최대한 질문하지 않고 스스로 해결하는 것이 암묵적인 룰이었기 때문에, 스케줄 관리가 중요했다.

그래서 Notion 페이지로 프로젝트 현황판을 만들어서 프로젝트 스케줄을 관리했고, 현황판의 링크를 선임 개발자분들께 공유해서, 프로젝트 진행 상황을 언제든 확인할 수 있도록 했다.

학습과 구현을 병행했기 때문에 일정은 생각보다 더 촉박했다. 매일 밤 11시 45분(회사 건물 닫는 시간)까지 회사에서 개발해도 시간이 부족해서, 주말에도 밤 11시까지 회사에서 개발을 진행했다.

물론 내 개발 실력이 부족해서 더 오래 걸렸지만, 팀에서 사용하는 기술로 프로젝트의 기능을 하나씩 구현하고 문제를 하나씩 처리하는 것이 너무 재미있어서 시간 가는 줄 몰랐다. 매일 밤 회사 앞으로 픽업 와주신 와이프님 감사합니다 🥰

가끔 정말로 해결책을 찾기 어려울 때는 옆자리 선임님께 도움을 구했는데, 그럴 때마다 디버깅하는 법을 상세하게 설명해 주셨다. 문제의 답을 알려주기보다, 해결책 찾는 방법을 알려주셔서 실무에 투입되고 나서도 많은 도움이 되었다.

간신히 마감일에 맞추어 개발을 완료하였고, 1차 발표 때 코드 리뷰에서 엄청 털린 후에, 2차 발표에서는 나름 칭찬받으며 끝났다.

파일럿 프로젝트 기간에 팀원분들이 너무 바쁘셨고, 코드 리뷰가 팀에서 시스템으로 자리 잡지 않은 점은 조금 아쉬웠지만, 팀에서 사용하는 기술들을 미리 익히고, 웹서비스의 A부터 Z까지 직접 개발해 본 것만으로도 너무 많은 것을 배우고 느꼈다.

카테고리와 URL만 입력하면 컨텐츠가 공유되는 단순한 서비스

여전히 개선해야 할 점이 태산인 프로젝트라 2019년 내내 개선해야지 다짐했었는데, 거의 손대지 못하고 2019년이 끝나버렸다. 2020년에는 현재 진행 중인 라즈베리파이4로 토이프로젝트용 서버 만들기 프로젝트에 이 서비스를 올려서 계속 개선할 예정이다.

3-2. TDD 강의

2019년 6월 중순 ~ 7월 말
약 5주간 박재성 님의 TDD, Refactoring, Clean Code 5기를 수강했다.

포털개발팀에는 이미 TDD 강의를 수강하신 분들이 많이 계셨는데, 모두가 추천해주셨다. 4기에 수강한 남준이도 역시나 강력하게 추천했기에, 88만 원이라는 수강료를 사비로 지불하고 5기에 수강했다.

5주간 총 4단계의 과제를 진행하고, 현업 개발자로부터 코드 리뷰를 받는 방식

결론부터 말하자면, 대대대만족이었다. 감히 내 코드는 TDD 강의 수강 전과 후로 나뉜다고 말할 수 있다. 5주에 88만 원은 정말 큰돈이지만, 뒤에 0 하나가 더 붙더라도 나처럼 근본 없는 개발자에게는 값어치를 하는 강의라고 생각한다.

이 강의를 듣기 전에 <객체지향의 사실과 오해> (일명 토끼책)을 조금 읽었는데, 읽다가 여러 번 졸았고, 내가 싫어하는 스타일의(같은 말을 늘어트리고 반복하는) 책이라고 생각했었다. 그런데 이 강의를 듣고 토끼책을 다시 집어 드니, 객체지향이 무엇인지 숟가락으로 떠먹여 주는 책이었다. 약 2개월간 억지로 하루에 한두 장씩 겨우 넘기던 책을, 강의를 들은 이후에 집어 들고는 하루 만에 다 읽었다.

강의는 일주일에 한 번 진행되지만, 코드 리뷰는 매일 진행되었다. 리뷰어 분들이 해주시는 코드 리뷰는 지금 팀에서도 받아본 적 없는 수준이었고, 내 코드의 빵꾸들을 꼼꼼하게 찾아주셨다.

특히 박재성(Jason) 님의 코드 리뷰는, 이제는 그만 놔줬으면 좋겠다 싶을 때까지 문제점을 파악해주셨고, 내가 의도한 설계의 문제점을 최대한 스스로 깨달을 수 있도록 도와주셔서 좋았다.

제출한 모든 과제와 코드 리뷰는 이 저장소에 모아두었다.

하지만 회사에 다니면서 TDD 강의를 수강하니, 헬 게이트가 열렸다. 매주 4단계의 과제를 해결해야 하는데, 과제를 제출하고 코드 리뷰를 통과해야 다음 단계의 과제를 진행할 수 있다. 그런데 근본 없는 개발자인 나는 코드 리뷰를 계속 통과하지 못했고, 2주 차가 끝나갈 무렵에도 1주 차 과제를 하고 있었다.

퇴근 후에 모든 시간을 쏟아부어도 과제 할 시간이 부족했기 때문에, 강의를 수강하는 5주 동안 일평균 수면시간이 4시간에 불과했다. 때문에 와이프와 제주도로 여름휴가를 떠났던 강의 3주 차에는, 제주도에서도 과제를 했다. 최악의 남편

제주의 어느 카페에서 4시간 동안 과제만 했던 최악의 남편

회사 일과 병행하는 분들이 많으셨는지, 과제를 끝까지 진행하지 못한 분들도 꽤 계셨다. 마지막 볼링 과제까지 제출한 수강생은 25명 중에 10명도 안 될 정도로, 널널한 강의가 아니었다.

나 또한 마지막 볼링 과제를 2주나 초과해 제출했다. 그래도 리뷰해 주셔서 감사했다 😅

마지막 과제의 마지막 PR merge

마지막 과제의 마지막 Pull Request가 Merge 되었을 때는, 뿌듯함 + 해방감 + 자신감 이 교차했다. 이날 메모장에는 아래와 같은 글을 적어두었다.

2019년 7월 28일
< TDD 강의는 때밀이와 같았다 >

때를 처음 밀어 보는 외국인 마냥,
테스트 코드를 먼저 작성하는 것이 어색했고,
불변 객체와 일급 컬렉션이 어색했고,
else를 쓸 수 없는 것이 어색했고,
한 객체가 2개 이상의 필드를 갖지 않는 것이 어색했고,
객체에서 값을 꺼내는 게 아니라 메시지를 전달하는 것이 어색했고,
Java 컨벤션대로 코드를 작성하는 것이 어색했고,
Enum과 함수형 인터페이스 사용이 어색했고,
Primitive 타입을 객체로 감싸는 것이 어색했고,
람다와 스트림이 어색했고,
코드 한줄 한줄 리뷰 받는 것이 어색했으며,
내가 작성한 코드로 칭찬을 받아보는 것이 어색했다.
그런데 때를 다 밀고나니,
이제는 때를 밀지 않으면 온몸이 간지러워질 것 같다.

3-3. 회사 업무

위의 두 가지 경험도 결국 회사 업무를 잘하기 위한 수단이다. 처음으로 제대로 된 개발팀에서 일하면서 느낀 회사 업무는 아래와 같았다.

개인적인 개발 공부가 톱니바퀴의 생김새와 사용 방법을 익히는 것이었다면, 회사 업무는 톱니바퀴들을 조합해서 동작시키고, 그 과정에서 발생하는 문제를 해결하는 것이었다.

개발 공부를 아무리 열심히 해도, 실무 경험으로 이어지지 않으면 현실에서는 쓸모없다는 사실을 깨달았다. 구슬이 서 말이라도 꿰어야 보배! 그런 점에서 포털개발팀의 환경은 주니어 개발자에게 다양한 범위와 깊이의 실무 기회가 주어져서 좋았다.

물론 서비스는 조금 오래되었지만 비교적 모던한 기술 스펙으로 이루어졌고, 최근에는 클라우드 환경으로 서비스들을 이전하고 있어서, 백엔드 개발자로서 귀중한 경험들을 하고 있다. 게다가 프론트엔드도 직접 해야 하므로 주니어 개발자로서 백엔드, 프론트엔드, 인프라를 모두 다루어야 하는 점이 마음에 든다.

하지만 코드를 작성하고 배포하는 과정에서 안전장치가 부족한 문제도 있다. 코드 리뷰가 시스템으로 정착되지 않아서 선임 개발자님께 따로 요청을 드려야 하고, 테스트 코드 작성도 강제되지 않는다. 그 때문에 팀 차원의 비효율적인 일들(휴먼 에러, 커뮤니케이션 미스)이 발생할 가능성이 높다. 그만큼 개발자 개개인이 더 주의를 기울여야 하므로, 주니어 개발자 입장에서는 안전한 코드를 작성하고 배포하기 위한 과정을 습관화할 수 있어서 좋았다.

그리고 "장애를 두려워하지 말라"상남자 팀장님(BeyondJ2EE)의 조언에 따라, 이런저런 장애를 내고 수습하는 과정에서 톱니바퀴가 아닌 하나의 서비스를 개발하고 운영하는 방법을 배워나가고 있다.

4. 인명구조요원

TDD 강의가 끝나갈 무렵, 문득 이런 생각이 들었다.

이렇게 내 모든 시간을 개발에만 쏟아부어도 되는 걸까?
내 삶에 더 중요한 과제들도 있는데, 모르고 지나치는 것은 아닐까?

꽤 진지하게 고민한 결과, 2018년 여름 바다에 빠진 고등학생을 구하다가 같이 죽을뻔한 일이 생각났다. 물에 빠진 사람은 아무나 구할 수 없다는 것을 깨달은 사건이었다.

바다와 서핑을 좋아하는 내가 꿈꾸는 삶은, 매일 새벽 서핑으로 하루를 시작하고, 미래의 자녀들과 주말마다 함께 서핑하는 것이다. 그런데 내 자녀를 내가 구하지 못하면 얼마나 슬픈 일이 될까. 평생 잊지 못할 상처로 남을 테고, 그야말로 무능력한 남편/아빠가 될 것이다.

가족을 지킬 능력을 키우는 것이 개발 공부를 조금 더 하는 것보다 훨씬 급한 일이라는 생각이 들어서, 익수자를 구조할 수 있고, 깊은 물에 오래 떠 있을 수 있는 능력을 갖춘 남편/아빠가 되고자 인명구조요원(라이프가드) 강습을 알아보았다.

그런데 신청하려던 주말반 강습이 신청 시작 30초 만에 마감되어 신청에 실패했다. 😱 망했다

신청 시작 30초 만에 60명 마감

이번 강습을 듣지 못하면, 12월 한겨울에 수강하거나 충남 아산에서 열리는 강습을 수강해야 했다. 하지만 12월에는 회사 일정을 알 수 없었고 충남 아산까지 내려가는 것은 와이프가 반대했다.

TDD 강의 덕분에 수면 부족에 시달렸던 나는 휴식을 위해서 8월에 꼭 수강하고 싶었다. 이때까지는 휴식일 거라고 생각.. 지푸라기라도 잡는 심정으로 적십자사에 전화해서 혹시 대기자로 등록할 수 있는지 여쭈었다.

대기자는 받지 않지만, 취소 인원이 생기면 수강신청 페이지가 갱신된다는 소식을 접했다.

수강신청 페이지를 개발자도구로 열어보니, 수강 신청 인원 변화를 감지해서 알려주는 봇을 돌리면 될 것 같았다. 곧바로 Spring Boot 프로젝트를 띄우고, 10초마다 수강 신청 인원 변화를 감지하는 코드를 작성했다. 그리고 언제 어디서든 알람을 받을 수 있도록 Slack 봇을 만들고 연동했다.

개발자가 아니었으면 시도 때도 없이 직접 페이지를 확인했을 텐데, 봇이 대신해 주니 일상에만 집중할 수 있어서 좋았다. 😌

그런데 2주가 지나고 수강 신청 마감일이 되도록 알람이 울리지 않았다. 봇은 정상 동작 중 🤖

마감일 오후 6시가 넘어가자, 아무도 수강 취소를 하지 않았다는 확신이 들었고, 아쉬웠지만 마음을 비웠다. 우울한 기분으로 퇴근 준비를 하는데, 갑자기 Slack 봇이 아래처럼 알람을 울리기 시작했다. 두둥!!

HARU는 우리 집 강아지 이름 :)

오옷!! 한 번에 12자리가 오픈되었다. 관리자가 취소 인원을 모았다가 한 번에 갱신한 것이다. Slack 봇이 10초마다 변화를 감지하고 있었는데, 10초 만에 자리 2개가 채워지더니 5분 만에 12자리가 모두 채워졌다. ㄷㄷ 결국 Slack 봇 덕분에 원하던 강습을 수강하게 되었고, 개발자라서 행복한 순간이었다. 😁

양손 들고 입영 연습. 처음에는 30초도 못 버티고 가라앉았었다.

인명구조요원 강습은 4주간 주말 아침 9시부터 오후 5시까지 진행되는 생지옥(2주간 체중 8kg 감소)이었다. 하지만 짧은 시간에 많은 구조 기술들을 배우고 익힐 수 있어서 좋았다. 특히 깊은 물 공포증이 사라졌고, 입영을 20분 이상 할 수 있게 되었다.

평일에는 동네 수영장에서 연습하고, 주말에는 하루 종일 강습을 받았기 때문에 회사 업무 외에는 개발과 조금 멀어졌었다. 돌이켜보니, TDD 강의가 끝나갈 무렵 찾아온 번 아웃을 인명구조요원 강습 덕분에 자연스럽게 극복했다고 생각한다. 어차피 평생 개발하고 살 거라면, 가끔 이렇게 개발과 멀어지는 시간도 필요한 것 같다.

5. 칼럼과 발표

『커리어 스킬』이라는 번역서에 칼럼을 쓰고, SEF 2019페이스북 이노베이션 랩에서 발표할 기회를 얻었다.

5-1. 칼럼

한창 파일럿 프로젝트를 진행하던 2019년 3월, 길벗 출판사에서 < 커리어 스킬 >이라는 번역서에 들어갈 칼럼추천평을 요청받았다. 하루에 5시간도 못 자던 시기였지만, 과분한 제안을 감사한 마음으로 수락했다.

물론 바쁜 일정 속에 데드라인이 정해진 글을 쓰는 것은 고역이었지만, 한 줄의 자기소개를 통해 개발과의 외도를 허락해 준 와이프에게 약간의 행복을 선사할 수 있어서 좋았다.

5-2. 발표 1

Naver가 설립한 비영리 교육재단인 CONNECT에서 진행하는 SEF(Software Edu Fest) 2019 행사에 연사 제안을 받았다. 파일럿 프로젝트에 칼럼까지 진행 중이어서, 발표를 준비할 시간이 물리적으로 부족했지만 기술 발표가 아니었기 때문에 제안을 수락했다.

나는 잘못된 지식을 전파할 바에 함구하는 것이 낫다고 생각한다. 물론 소통이 이루어질 수 있는 블로그나 토론하는 자리에서는 피드백을 받을 수 있어 문제없지만, 발표는 보통 일방적인 전달이기 때문에 더욱 조심해야 한다.

올해 경험한 두 번의 발표 모두, 기술 발표가 아니라 비전공자가 개발자가 된 이야기를 하는 자리였다. 그럼에도 나는 조심스러웠다. 누군가 내가 택한 방법을 정답 혹은 정석으로 여기고, 고민과 성찰 없이 무조건 수용하는 것이 걱정된 것이다.

우리 세대가 받아온 교육은 정답 찾기 그 자체였고, 인생의 방향을 결정할 때도 게임 캐릭터를 육성하듯 가장 효율적이고 안전한 테크 트리를 따르도록 강요된 삶을 살아왔기 때문​에, 발표처럼 누군가의 삶에 영향을 미칠 수 있는 일은 절대 가볍게 여기면 안 된다고 생각한다.

우선, 발표에서 가장 먼저 전하는 내용은 제가 대단한 개발자라서 이 자리에 선 것이 아닙니다. 하나의 케이스로만 봐주세요. 였다. 그리고 내가 선택한 방법을 언급할 때는 이 방법이 정답은 아닙니다. 더 좋은 방법이 있을 수 있습니다.라며 부산스럽게 휘날리는 꼬리표를 달았다.

준비도 제대로 못 했고, 카메라 2대가 나를 노려본 덕분에 더 긴장해서 원하는 수준의 발표는 하지 못했지만, 이렇게 많은 사람 앞에서 발표한 경험이 없었기 때문에 좋은 연습 기회였다고 생각한다.

전 세계에 생중계되는 개발 세미나에서 발표하는 것이 개발자로서 나의 목표 중에 하나인데, 추후에 올라온 발표 영상을 보니, 이런 생각이 들었다.

발표 능력도 타고난 것 같지는 않으니, 개발 실력이랑 발표 실력 모두 갈 길이 멀겠구나. 🙃

5-3. 발표 2

지난 SEF2019에서 처음으로 발표를 한 이후, 뛰어난 개발자가 되기 전까지는 발표를 하지 않겠다고 스스로 다짐했었다.

그런데, 페이스북 이노베이션 랩에서 진행하는 개발자 커리어 세미나에 연사 제안을 받았고, 이번에도 역시나 못 먹어도 Go 라는 마음이 스멀스멀 피어올랐다. 결국 제안을 수락했는데, 두 가지 계기가 있었다.

첫 번째 계기는, 스프링 캠프 2019에서 이경일 님의 당신도 할 수 있는 레거시 프로젝트 개선 이야기 발표였다. 너무 재미있어서 기술 발표가 이렇게 재미있어도 되나 싶을 정도였고, 나도 언젠가 이렇게 재미있는 기술 발표를 해보고 싶었다. 그래서 발표 기회가 주어지면 무조건 하면서 경험을 쌓아야겠다고 다짐했었다.

두 번째 계기는, 내가 개발자로서 롤모델로 여기는 이종립 님께서 남긴 트윗이었다. 이종립님도 발표 연습을 고민하시는데, 쪼랩 개발자인 내가 발표 기회를 걷어찬다는 것은 가당치도 않은 일이었다.

이렇게 나름 뽐뿌(?)를 받고 시작했지만, 개발 외적인 것이라 여겨지는 발표 준비가 너무 하기 싫었다. 발표 준비를 하는 동안 계속해서 나는 왜 같은 실수를 반복하는가, 나는 왜 발표를 한다고 했는가..라며 힘겹게 발표를 준비했다.

역시나 하기 싫은 일을 억지로 하면, 결과가 좋을 수 없는 법!
내용은 모르겠지만, 발표력은 정말 최악이었다. 숨을 내뱉지 못하고 헉헉거림 😭 하지만 발표를 하고 나면, 내가 얻고 가는 것이 더 많았다. 이번 발표를 통해 내가 얻은 것들은 다음과 같다.

  • 이번에 이렇게 못했으니, 다음에는 발로해도 이번 발표보다 잘하겠다는 자신감 한 스푼
  • 개발자가 되려는 비전공자분들이 정말 많고, 열정도 엄청나다.
  • 인스타충의 주말 포스팅을 책임질 발표 사진들 ㅎㅎ
  • 무서운 속도로 성장하시는 분들이 많으니, 더 분발해야 한다는 사실
  • 같이 발표한 진유림 님과의 안면 트기
    • 개발 공부를 처음 시작했을 때, 진유림 님의 블로그를 많이 보며 배웠기 때문에, 연예인을 본 기분이었다.
Q&A 세션은 진유림 님과 함께 진행했다. (초상권 보호)

발표와 Q&A 세션이 끝나고, 피자와 맥주를 먹는 네트워킹 시간이 있었다. 많은 분들이 다가오셔서 질문을 해주셨는데, 대부분 내가 작년에 했던 고민들과 비슷해서 답변드리기가 수월했다.

특히, 회사에서 성장하지 못하는 것 같아 이직을 고민하는 1~2년 차 개발자분들이 많으셨는데, 과감하게 이직하시기를 추천드렸다. 남의 인생에 감 놔라, 배 놔라 하는 것을 정말 싫어하지만, 질문하시는 분들의 상황을 듣고 나면, 이직을 추천할 수밖에 없었다.

시멘트 바닥에서 벼농사를 할 수 없는 것처럼, 성장할 수 없는 환경에서는 과감하게 벗어나는 것이 옳다고 생각한다.

6. 개발 컨텐츠 공유 프로젝트

개발 관련 검색을 하다 마주치는 유익한 블로그 글들을 크롬 북마크에 저장하는 것에 한계를 느껴서 프로젝트를 시작했다. 개발자들이 유익한 개발 컨텐츠를 서로 공유해서 더 많이 소비하면, 더 많이 생산되어 모두에게 유익한 일이라고 생각했다.
이 프로젝트는 { 고퀄리티 ⚡️ 개발 컨텐츠 모음 } 깃헙 저장소와, { 출퇴근길 개발 읽기 } 페이스북 페이지, 카톡 단톡방으로 운영되고 있다.

6-1. { 고퀄리티 ⚡️ 개발 컨텐츠 모음 }

작년에 만든 { 고퀄리티 ⚡️ 개발 컨텐츠 모음 } 저장소를 계속 운영 중이다. 유익한 개발 관련 컨텐츠(블로그 글, 영상, 슬라이드 등)를 모아두는 저장소인데, 2018년 10월 7일에 만들어서 거의 매일 관리하고 있다.

매일 밤 평균 1시간에 걸쳐 관리 작업을 하고 있는데, 관리라 함은, 공유받은 컨텐츠를 읽어보고 고퀄리티의 컨텐츠만 저장소에 남기는 것이다. 귀찮을 때도 많지만, 습관이 되어버린 이 작업을 통해서 세간에 오르내리는 유익한 개발 관련 글들을 빠짐없이 접하고 있다고 생각한다.

또한 보통 개발자들은 본인이 사용하는 기술과 관련된 컨텐츠만 소비하는 경향이 있지만, 이 저장소를 관리하면 다양한 개발 분야의 유익한 컨텐츠들을 매일 읽기 때문에, 얕고 넓은 개발 공부에 큰 도움이 되고 있다.

이 활동을 1년 넘게 지속하다 보니 컨텐츠를 보는 눈도 조금은 생긴 것 같다. 나의 눈공지능은 작성자만 봐도 아, 이 글은 유익하겠구나라고 캐싱 처리를 할 수 있게 되었고, 이 작업이 길어질수록 수면 시간도 줄어들었기 때문에 글을 읽는 속도가 빨라졌다.

2019년 12월까지 약 1,100개의 컨텐츠가 쌓였고, 총 34분께서 PR로 컨텐츠를 공유해 주셨다.

2018년 회고 쓸 무렵
2019년 현재 3배 이상 성장!

하지만 양적으로만 성장하고, 질적으로는 큰 변화가 없었던 것이 아쉽다. 2020년에는 카테고리를 조금 더 자세히 나누고, 컨텐츠 공유 방식을 개선할 예정이다.

6-2. { 출퇴근길 개발 읽기 }

{ 고퀄리티 ⚡️ 개발 컨텐츠 모음 } 이 데이터 저장소라면,
유통 채널로서 { 출퇴근길 개발 읽기 } 페이스북 페이지, 카톡 단톡방 1, 카톡 단톡방 2를 운영하고 있다.

페이스북 페이지는 1년간 약 5000여명의 팔로우가 증가했다.

2018년 12월 15일
2019년 12월 15일

카카오톡 단톡방은 첫 번째 방이 꽉 차서, 최근에 두 번째 방을 만들었다. 총 2,100여명이 참여중이다.

페이스북 페이지와 카톡 단톡방 관리는 13년지기 친구와 함께하고 있다.

7. 회고가 너무 길어져서 담지 못한 내용 요약

회고가 너무 길어져서 담지 못한 8가지 주제가 있다.
아쉬운 마음에 몇 가지 주제는 짧게라도 남기고자 한다.
아쉬운 마음이 계속 커지면, 회고가 더 길어지더라도 써버릴 예정이다.

7-1. 롤모델

2019년부터 이동욱 님과 이종립 님을 개발자 롤모델로 삼고 있다.

두 분과 같이 일해본 적은 없지만, 두 분의 행적들을 볼 때마다 감탄사를 연발한다. 물론 두 분보다 더 뛰어난 개발자들이 존재하겠지만, 나와 비슷한 세대를 살아가고, 내 눈에 행적이 자주 보이는 분들이라 롤모델로 삼았다.

롤모델 선택 기준

  • 나와 비슷한 백그라운드
    • 두 분 모두 비전공자
    • 두 분 모두 국비지원학원 수료
    • 두 분 모두 첫 회사(SI)에서 빠르게 이직
    • 다양한 직업 경험 (이종립님)
    • 줌인터넷 포털개발팀 (이동욱님)
  • 노력파
    • 두 분은 노력까지 하는 천재일지도 모르겠다.
    • 범재인 나는 두 분이 하시는 노력을 본받고 싶다.
  • 많은 개발자들에게 인정받는 개발자
    • 작은 집단에서만 인정받는 개발자보다는, 많은 개발자들에게 인정받는 분들을 롤모델로 삼는 것이 리스크가 작다고 생각한다.

이분들의 행적을 내가 따라 한 부분들을 소개하고 싶지만.. 너무 길어져서 올해는 여기까지ㅠ

7-2. Team Zunior 스터디

같은 팀 주니어 개발자들(김남준, 권희정)과 Team Zunior라는 이름으로 스터디를 시작했다. 나보다 훨씬 잘하는 주니어 동료들과 스터디를 하면서, 인명구조요원 강습 때문에 깨진 학습 흐름과 습관을 강제로 되찾아 올 수 있었다.

먼 훗날 내가 어떤 사업을 하게 된다면, 반드시 이 둘을 개발자로 채용하고 싶다. 정말 열심히 노력하고, 기본기도 탄탄하다. 이 두 친구는 나중에 대한민국 최고의 IT회사에서 CTO를 하고 있을 것 같다.

7-3. 깃헙 일일커밋 종료

일일커밋을 제대로 한 것도 아니었지만, 더 이상 연연하지 않기로 했다.

이동욱님은 일일커밋을 3년이나 지속하셨다고 한다. (일일커밋 3주년 회고) 이제는 왜 해야 하는지 고민하기보다 그냥 한다고 하셨다. (인터뷰 영상)

예전에 훈련 중인 김연아 선수와 마이클 펠프스 선수에게 훈련을 왜 하냐고 물었더니 그냥 한다고 대답했던 영상이 기억난다. 월드 클래스는 역시 다른가 보다. 하지만 나는 현재 동네 클래스고, 일일커밋을 하는 이유를 계속 고민했다.

그리고 연연하지 않기로 했다. 스포츠에 비교하자면, 이제 프로세계에 들어온 만큼 경기에서 이기는 플레이를 해야 하는데, 나는 아마추어처럼 승리 외적인 요소들에 집중력을 많이 빼앗기고 있었다. 그리고 그중 하나가 일일커밋이었다.

나의 경우, 어쩌다 꾸준히 커밋을 하게 되어 커밋이 쌓이게 되면 주객이 전도되기 시작했다. 즉, 개발의 증거가 커밋이어야 하는데, 커밋을 위한 커밋을 하기 시작한 것이다.

내가 좋아하는 테니스를 예로 들자면, 테니스는 결국 상대편 코트로 공을 넘기는 게임인데, 일일커밋에 집중하는 것은 공을 상대편 코트로 넘기는 것보다 내가 입은 운동복에 신경 쓰는 것과 같다는 생각이 들었다.

길거리 농구선수들은 화려한 드리블을 자주 선보인다. 반면 프로농구에서는 그런 드리블을 찾아보기 힘들다. 가장 효율적인 경기를 하고, 이기는 경기를 하기 때문이다. 프로선수는 이기는 경기를 한다. 그래서 나는 애초에 열심히 하지도 않았지만 일일커밋에 더 이상 연연하지 않기로 스스로 다짐했다.

나만의 다짐일 뿐이다. 일일커밋을 하면서도 할 일을 제대로 하시는 분들에게는 전혀 해당 사항 없는 이야기이다.

7-4. 책으로 공부하는 것

지난 회고에서도 책으로 공부하는 것을 좋아한다고 강조했지만, 여전히 그렇다. 학습해야 할 기술들은 많고, 그것이 필요한 상황이 닥쳤을 때 공부하는 것이 가장 효율적이겠지만, 필요한 상황을 겪지 못하면 영원히 그 기술을 익히지 못하는 것이고, 이는 곧 나의 한계를 정해버리는 것이다.

당장 필요한 기술이 아니더라도 공부하려면, 그 공부를 해나갈 수 있는 의지가 필요한데, 필요한 상황을 마주했을 때는 자연스럽게 의지가 생기지만, 당장 필요하지 않은 기술을 익히는 일에는 인위적인 의지가 필요하다.

나에게 있어 인위적인 의지 중의 하나가 책을 사서 읽는 것이다.
나는 책을 구매하는 것 자체도 좋아하고, 책을 읽는 것, 읽은 책의 내용을 정리하는 것, 그리고 내가 살 책과 읽은 책들의 목록을 정리하는 것, 이 모두를 좋아한다. 즉, 내가 좋아하는 일을 함으로써 인위적인 의지를 갖는 것이다.

사고 싶은 책 리스트를 볼 때마다 설렌다. 빨리 사놓은 책들을 읽고, 새 책들을 사고 싶어 미치겠다. 나는 책을 통해 인위적인 학습(자연스러운 필요에 의한 학습이 아닌 학습)을 즐기게 되었다.

8. 맺으며

서핑을 할 때, 파도가 잠잠하다가 갑자기 짧은 주기를 가지고 파도들이 몰려올 때가 있다. 그럴 때 초보자들은 보통 뒤쪽 파도를 보지 않고, 첫 번째 파도를 타려고 시도한다. 하지만 첫 번째 파도는 보통 너무 강하거나, 덤프 성 파도인 경우가 많기 때문에 대부분 파도에 휘말린다.

파도에 휘말리면 보드 위에 다시 올라가는 것도 힘들다. 그 상태에서 뒤이어 3~4개의 연속된 파도를 맞이하면 그야말로 생사를 건 사투를 벌이게 된다. (파도가 좋은 지역 기준)

그 결과 초보자들은 체력이 고갈돼서 해변으로 나가거나, 서핑은 자신과 맞지 않는다고 생각하고(혹은 죽을 고비를 맞이하고) 서핑을 그만둔다.

개발 공부를 처음 시작하고, 개발자로 처음 일하던 2018년의 내가 그랬다. 기본적인 Java 코드도 제대로 작성하지 못하면서 스프링부트를 더 열심히 공부했고, RDB의 기본적인 개념도 모르고 쿼리 한 줄 작성할 줄 모르면서, AWS EC2에 MySQL을 올려놓고 DB를 다룬다고 생각했었다.

내 눈에 크고 좋아 보이는 첫 번째 파도부터 시도했던 것이다.
결국, 그 여파로 2019년에는 뒤따라오는 파도들에 수없이 휘말리고 얻어맞았다.

2020년에는 조금 더 멀리 보고, 내가 타야 할 파도와 넘겨야 할 파도를 잘 고르면서, 조금 더 개발을 즐기고, 조금 더 개발을 잘하기 위해 노력할 것이다.

긴 글 읽어주셔서 감사합니다.