회고록을 조금 늦게 쓰게 됐지만, 성격상 원래 안 쓰는데 그래도 이렇게 쓰는 이유는 나중에 보고 싶기도 하고, 또 새로운 경험이었기 때문이다. 그리고 개인적으로 위코드에 대해서 알아볼 때도 기업협업 경험에 대해서 굉장히 궁금했는데, 나 때는 딱 정보가 없어서(혹은 그냥 내가 찾지 못해서) 혹시나 도움이 될 수 있지 않을까 싶어서 작성해 보려고 한다.
부트캠프를 끝내는 마지막 한달은 위워크가 아닌 다른 곳에서 지내게 된다. 물론 남아서 개인공부를 할 수도 있지만, 나는 실무 경험을 쌓기 위해 협업을 나가기로 했다. 선택지는 한 3-4곳 정도 있었던거 같은데, 그 중에서 고민했던건
1) 찐 스타트업이지만 관심이 가는 스택을 하는 곳을 갈 것이냐,
2) 이걸 포기하고 그냥 좀 체계가 잡힌 회사에 가서 프로젝트에서 배운걸 조금 더 할 것이냐
결국 나는 1을 선택했는데, 그 이유는 머신러닝 때문이었다. 이 때까지만 하더라도 머신러닝에 대해 관심이 많았고, 비록 창업하신지 3개월 밖에 안됐지만 자유로워 보이는 분위가 마음에 들었다. 중간에 추석이 있어서 완전한 3주는 아니었지만, 그래도 '돈을 받는 개발'은 어느 정도 수준인지 알 수 있는 좋은 기회였다.
팀구성: 3프론트, 1백엔드
지원했던 스타트업에서는 개발자분이 한 분 계셨고, 개발을 하신지 1년반 정도 되셨다. 오래 되지는 않았지만, 배울점이 많은 분이셨는데 그건 아래에서 좀 얘기하기로 하고. 아직 기업이 1차 MVP를 시작하기 전이라 우리에게 우리끼리 서비스 하나를 개발해보라고 하셨다. 이미 진행하고 계셨던 프로젝트 중에 "인터넷에 있는 데이터를 가져와서 창의적으로 시각화하여 제공" 하는 서비스가 있어서, 우리는 서울시에서 카페 창업을 계획하시는 분들을 위한 데이터 시각화를 하기로 결정했다. 총 3개의 데이터가 있는데,
1) 서울시 구별 생활인구 데이터 - 서울시 제공, 매일 업데이트
2) 서울시 구별 카페(개인/프랜차이즈) 분포 데이터 - 서울시 제공
3) 트위터 해쉬태그 검색
1번은 서울시에서 제공하는 오픈 api로 가져왔고, 2번은 실제 사용하는 api로 요청을 보내 크롤링을 했다. 3번 해쉬태그 검색은, 원래는 사용자가 검색어 하나를 입력하면 트위터에서 그 해쉬태그로 최근 트윗 일정량을 검색해서 연관된 해쉬태그 전부를 가져오는걸 생각했다. 하지만 이걸 실제 서비스로 사용했을 시 트위터 서비스 사용위반이 될 수 있어서, 일단 프로젝트가 프로토타입으로 진행됐기 때문에 카페와 관련된 데이터들을 미리 가져와서(트위터 API) 데이터베이스에 저장을 했다.
사용했던 스택을 나열하자면,
기존에 계셨던 분이 docker-compose로 미리 만들어 만드신 것들이 있었고, nginx로 요청을 받았다. 따라서 위에 3가지의 데이터를 REST 엔드포인트로 제공한 모듈을 나도 도커로 만들어서 compose로 연결해야 했고, 이걸 이해하는데 좀 시간이 걸렸다. 가장 어려웠던건 cron을 개별 도커로 만들어서 묶는거였는데, 생활인구 데이터가 매일 업데이트 됐기 때문에 매일 정해진 시간에 api를 호출해서 가져올 수 있도록 결국에는 성공적으로 만들었다. MSA를 지향하는 아키텍쳐여서 장고보다는 플라스크로 개발을 했고, 제공하는 데이터가 일단은 관계로 무언가 새로운걸 하는 부분은 없어서 NoSQL을 선택했다.
가장 기억에 남는게 있다면 Docker, Flask, MongoDB이다. 적어도 내가 만든 모듈을 도커파일로 컨테이너화하고, 그 컨테이너를 compose로 묶는 단계는 손쉽게는 아니더라도 두려움 없이 진행할 수 있다. 그리고 Flask에 대한 이해도 더 깊어지면서, 장고하는 만큼 수준이 된거 같다. 몽고디비는 NoSQL를 매력을 느끼게 해줬는데, 좀 깊게 사용하지 못하고 간단한 Read/Write만 해보기는 했지만 관계형과는 또 다른 느낌이라 새로웠다.
이렇게 해서 나는 인턴십을 프로젝트를 하기 위해 파이썬 빼고는 다 처음부터 배우게 됐다. 그리고 이번에는 위코드에서 짜여진 커리큘럼을 따라간 것도 아니고, 백엔드도 혼자여서 전부 혼자했다. 사실 첫 주는 굉장히 막막하기는 했는데, 그래도 공부 끝에 계획했던 모든걸 오히려 생각보다 더 빠르게 끝낼 수 있었다.
'빠름'과 연관 지어서 위에 언급했던 개발자님에 대해서 더 말하고 싶은데, 비록 1년반 밖에 되지 않으셨지만 필요한 프/백 작업을 미리 하셨다는 것에 아직까지도 놀랍다. 실력의 수준을 떠나서, 혼자서 그 정도 해냈다는게 대단하다. 옆에 있으면서 느낀건, 배우는 속도가 굉장히 남다르 다는 것이다. 같이 여러 이야기를 나누고 개인적으로 그럴수 있으셨던 이유는 자신에게 가장 효율적인 공부방법 을 아셨기 때문에 가능했던거 같다. 미국 유명대학에서 석사(다른 분야)를 하셨기 때문에 이미 어떻게 공부해야하는지 잘 알고 계셨을 것이다. 결국 소프트웨어 엔지니어는 문제를 푸는 사람이다. 도구가 소프트웨어일 뿐이다. 만약 문제 푸는 법을 알고 있다면, 소프트웨어를 배우는 것도 큰 장애가 되지 않는다는 사실을 알게 됐다.
내가 인턴십을 시작하기 전도 그렇고 하면서도 그렇고 지금까지 고민이 제일 많이 되는 부분은 바로 실력이다. 어쩔 수 없이 성격이 좋아하는 것에 대해서는 잘하고 싶은 욕심이 있어서, 계속 성장하고 빠르게 성장하고 싶은 욕구가 있다. 이 회사를 선택하게 된 이유도 이미 자리잡은 회사의 체계를 경험하고 싶은 생각도 있었지만, 여기를 오면 새로운걸 배울 수 있을거 같아서도 있었다. 나는 전공자가 아니기 때문에, 의도치 않은 곳에서 연결고리가 생기는 경우가 많다.
예를 들어 A라는 개념이 있다. 이걸 50까지 이해하기 위해 하루를 투자했다고 치자. 50까지 할줄은 아는데, 이 50을 완전 이해 못하는 경우가 많다. 이론적인 부분이 좀 약하고, 이제 50부터 5만 추가하는데 하루가 걸린다.
하지만 여기서 B라는 비슷한 개념을 공부를 시작하면, A랑 비슷하기 때문에 50까지 하는데 반나절 정도 밖에 안걸린다. 더 좋은건, B의 50을 공부하면서 A의 50에 대해서도 더 잘 알게 된다는 사실이다. 서로 엮여있기 때문에 익히는데 더 적게 걸릴 뿐만 아니라 상호간의 이해도 높아진다.
인턴십 하면서 이걸 깨닫게 된거 같다. 나는 내가 있는 기업 관련 공부를 하면서, 가끔씩 다른 기업에서는 뭐하는지 알아보고 그랬다(개인적인 욕심 때문에). 그리고 그 당시에는 내가 하는 것보다 더 복잡해서 당장 이해가 안되고, 또 실제 회사에서 쓰일만한 개념을 공부하고 사용하고 있을 때 기업 선택을 잘못했나 싶었다. 하지만 나중에 협업 끝나고 회사 지원하기 위해 그 기업 친구들이 했던 비슷한걸 혼자 공부했는데 생각보다 빠르게 이해가 됐다.
물론 그렇다고 모든 일에 이렇게 빨리 공부할 수 있는건 아닐 것이다. 하지만 중요한건, 지금의 나는 내 인생에 있어서 가장 느리게 배우고 있는 단계에 있다. 3개월동안 나름 많은 걸 하기는 했지만, 이 속도는 앞으로 더 빨라질 것이다.