유라임, 설계력 끌어올리기

최근에 유라임 관련되서 이제 자유롭게 개발할 시간이 어느정도 생겨서 좀 집중적으로 개발하려고 했다. 사실 개발이 실제로 끝난 것은 2017년 10월. 전에 다니던 대학원에서 졸업이 가능한 것으로 17년 5월쯤 확정나자 그쯤부터 정말 미친듯이 달렸었다. 사실 대학원, 특히 컴퓨터 엔지니어링에서 배우는 하드웨어는 너무 하기싫었다. 물론 재미는 있다. 하지만 내가 왜 굳이 아두이노를 만지고 있지? 내가 왜 학부에서도 정말 하기싫던 시스템 디자인을 하고있지? 이게 과연 내가 좋아서 하는 길일까 라는 생각이 미친듯이 들었던 16년도. 물론 처음에야 금방 졸업하겠지 싶었는데, SW배우는 것은 정말 1도 없었고 prerequisite이었던 과목 하나가 삼수강까지 이어져서 졸업이 연기되는 등 해프닝이 이어졌다. 게다가 비자문제 술문제에 등등.. 물론 여행 많이다니고 했지만서도 결국 그게 내 현실을 외면하고 다닌 결과가 아니었을까 싶더라.

학교 핑계를 대자면 한도끝도 없지만, 어쨌든 학교를 다니면서 뭔가 개발을 한다는 것은 정말 고도의 시간관리를 요한다. 사실 대학원을 준비하던 지난 시간들에도, 대학원을 다니던 시간들에도, 어쨌든 나는 15-17년 그리고 18년도에는 어딘가에 소속이었으니깐. 15-17년에는 유라임을 개발하기 힘들었다. 왜냐면 나는 특히나 프론트앤드 지식과 빅데이터 지식이 부족했으니깐. 리엑트나 프론트 개발은 이제야 좀 감이 생기는 듯 하고 백엔드는 다행히 막 미친듯 발전하는 것은 아니라서 API서버가 당장에는 막 리펙토링 하고 그럴 필요는 없더라. 개발 방법론도 마찬가지다. 어쨌든 그런데, 난 개발이 계속해서 끊어졌다. 많은 일련의 사건들에 의해서. 사실 17년 말까지만 해도 취직에 대해서는 생각도 없었고 유라임으로 스타트업 성공만 바라고 있었을 뿐. 그런데 그것도 사실 너무 무모하면서도 위험한 도전이었다. 취업으로 눈을 돌렸을 때 맞이한 현실들. 미리 준비하지 못했던 내 상황과 지식들, 그런것들에 정말 말 그대로 ‘호되게’ 당했던 시간들. 그나마 취업 스트레스를 날린다고 유라임 개발을 했었는데 그마저도 18년에는 3개월 남짓 했던가, 그나마 런칭한 베타버전은 그나마 쓸 수는 있었지만 버그투성이. 지금 사용해주시는 분이 계신다는 것에 그나마 감사할 다름이다.

그렇게 지난 3월 중순 대학원 붙고 반년정도 시간이 남아서 공부는 공부대로, 개발은 개발대로 해보려고 했다. 한 2주정도, 아니 사실은 1월에 원서넣고 영어공부 하면서 틈나는 대로 개발했는데 이건 뭐 개발이 일정한 방향성이 없다보니 잘 안된다. todo list는 꽤나 많은데 그것도 사실 보면 17년부터 미뤄진 것들이다. 결국 내 결론은, 일단 어느정도 프로덕을 만들기 위해서는 내가 다른 개발자나 디자이너가 있지 않는 이상은 정말 온전히 그것만 집중할 수 있는 시간이 최소 몇 개월은 필요하다는 것이다. 다른 뭐 취업준비던, 공부던 그런것이 절대 있어서는 안된다는 것. 풀타임으로 적어도 몇 개월은 할 수 있는 시간이 필요하다는 것. 그게 내 결론이다. 

그나마 대학원이 PM과정이라 다행이다. 내가 언제나 생각하던 그 프로젝트 개발 방법론에 대한 공부라서, 적어도 하드웨어 만지는 그런 내딴에서는 미친짓은 하지 않겠지.. 일단 그래서 다행이다. 그래서 일차적으로 유라임이 개발이 완료가 그전까지는 되야한다. 올해 9월. 그래도 정말 그 전까지 시간이 있어서 다행이다. 그 시간동안 솔직히 공부 외에는 할 것이 없다. 그래서 온전히 시간을 사용할 수 있어서 너무 기쁘다.

그래도 문제는 지금 복합적으로 문제점에 도달한 설계력에 대해서. 이놈의 개발 수칙부터 난 좀 바꿔야 할 필요가 있는 것 같다. 철저한 설계와 플래닝 먼저, 그리고 TDD위주의 개발. 처음에는 나도 유라임 설계 열심히 했다. 16년도에는 특히나 그랬던 것 같은데 대학원 등의 상황이 설계에 집중하지 못하게 하였고, 점차 유라임을 삶의 우선순위에서 내려오게 만들었다. 지금은 유라임가지고 막 일확천금 벌자! 스타트업 대박나자! 이런 생각은 아에 1도 없다. 지금은 프로덕이나 만들고싶다. 내가 생각하는 대로 돌아가는 프로덕.. 정말 완성된 프로덕 만들기가 이렇게 어렵구나. 결국엔 설계밖에 답이 없다.

그나마 도메인과 ERD설계는 어느정도 해둬서 다행이다. 전에는 욕심부린다고 nosql로 포팅하는 작업을 작년 말에 했었는데 이게 뭔짓인가 싶더라. 유라임에 과연 SNS 성 기능을 넣는다고 사람들이 미친듯 커뮤니케이션 할까? 물론 그런다면 graphql과 nosql 가져다 붙여야겠지. 그런데 그게 아니라는 것이다. 왜 rdb가 어때서? 특히나 백엔드다. 백엔드는 내가 익숙한 것을 하는게 당연한게 아닌가. 15-17년에 스칼라+play써서 열심히 만들어 놓은 백엔드, 지금도 쓸만하다. 16-18년에 열심히 만든 리엑트, 이건 리펙토링 할 필요가 너무너무너무나도 많다. 코드최적화도 모듈화도 안되있고 무엇보다, 2년이 지난 지금 내가 보는 소스는 너무나도 형편없다. 정말 내가 저렇게 데이터를 다뤘다고? 말도안되..

그렇게 부끄러운 코드를 리펙토링 하고있자니 그냥 설계부터 다시 제대로 들어가자고 생각이 들었다. 그간 나도 유라임에 대해 생각 많이 했다. 머신러닝을 통해서 미래를 예측한다 이런 초기의 생각은 이제 캐글같은 플랫폼을 제공해서 사용자들의 개인 데이터들에 대해 문제를 찾을 수 있는 플랫폼 제작으로 바뀌었다. 가만, 그러면 결국 큰 feature가 다시한번 추가되는 것인데.. 그게 그렇게 쉬울까? 라지만 결국 해야한다. 그게 내가 생각하는 유라임 속에서의 커뮤니티의 목적인 것 같다. 개인데이터계의 kaggle, 이게 결국 유라임이 지향해야 하는 방향인가보다.

결국, 데이터 설계와 수집, 분석, 시각화 에 대한 전체적인 프로세스에 대한 설계가 기본적으로 필요하다. 사실 이건 정말 잘 설계한다면 솔루션화 할 수도 있는데 그것도 사업아이템으로 좀 생각하고는 있어야겠다. 개인데이터이기 때문에 개인화 데이터를 공개하기 싫어하는 사람도 분명 존재할테고.. 그럼에도 데이터 과학 기법이 개인데이터에 쓰이면 그 시너지를 원하는 사람도 있을테고.. 그런 방향으로 설계하고 좀더 생각해서 문서화 해야겠다는 생각이다.

그리고 개발 프로세스. 물론 잘 정립되어 있지만 언제부터인가 나는 이슈트래커를 거의 안쓰고 버전관리도 거의 안했다. 한 2년정도 됬나.. 이것부터 다시 설계해야 한다. 도메인이랑 에픽이랑 다 설계하고 board로 관리하고.. 마침 보니깐 jira도 무료로 풀렸던데, 다시 일정관리 부분부터 해서 철저히 공부할 필요성을 느낀다. 아 꽤나 exciting하지만 실제 개발을 들어가고 싶은 욕심도 미친듯 많은데 어차피 설계없이 들어가면 그건 하나마나다.

설계하면서 공부해야 할 것이 리엑트에 대한 모듈화와 자원관리. 사실 내가 설계의 필요성을 느낀 것이, 정말 싱글 컴포넌트에 냅다 때려박는 식으로 17,18년도에 개발하다보니깐 지금 보면 가독성부터 해서 정말 코드 자체가 시궁창덩어리다. 그래서 stateless component로 모듈화를 하다보니 훨씬 깔끔하지만 데이터 흐름에 있어서는 이것도 설계가 좀 필요하겠다 싶더라. 그래봤자 내가 모듈이 얼마나 되나? 별로 있지도 않은데 이것조차 못한다면 그건 좀 문제가 있다고 본다. 

그리고 UI/UX디자인. 요즘엔 mockup수준이 아니라 정말 디자인요소로 뺄 수 있을 정도로 나와있더라. 와이프를 통해 접한 Figma는 신세계다. 물론 난 아직도 Adobe계열이 좋아서 XD를 좀 쓰고싶은데, 어쨌든 중요한 것은 모든 화면을 UI/UX로 빼버리고 싶다. 사실 전에는 theme를 사다가 그걸 가지고 사용했는데 왠걸, 이거 다 필요없다. UI/UX Component는 정말 “참고”일 뿐이다. 그 이상 이하도 아니다.

그리고 자바스크립트 라이브러리. lodash이런건 많이 사용하긴 하는데 좀 더 통일성을 갖춰야 겠다는 생각이다. 라이브러리도 좀 정리해야 하고, 자주쓰는 lodash와 MomentJS 이외에는 정말 내가 구현 가능한 것들은 좀 만들어둬야겠다. 최근에만 해도 x-editable을 리엑트, 특히 서버사이드에서 쓴다고 그렇게 고생했는데 결국 안되더라. 이것도 결국 내가 하면 될것인들.. 그리고 react-i18next이것도 zeit.co에 올렸는데 결국 serverless지원을 안해서 걍 내 cloud run으로 뺐다. 아직 캐싱이나 CDN은 잘 모르겠지만 뭐 일단 이정도가 내가 할 수 있는 최선의 전략인 것 같다.

그리고 플레이랑 scala 에 대한 공부. 이것도 꽤나 중요하다. 특히 스칼라. 이제 어느정도 함수형 플밍에 대해 익숙할 때가 되지 않았나? 아 결국 또한번 코세라 FP들어야 하나 싶지만 어쩌겠나, 이거 없이 리펙토링을 손댈 수 조차 없다. 또하나는 API 라우팅 설계를 단순 restful이 아니라 좀더 체계화된 문서화가 필요한듯 하다. 이것도 다행히 postman같은데서 지원해서 다행인듯. 다만 문서화는 귀찮다고.. 생각하는 이 스스로의 게으름을 좀 버리고 싶다.

마지막으로 ETL에 대해. 이것도 해야지 해야지 미루고 있지만 위 작업이 얼추 끝날 시점에 설계랑 구현 시작해야한다. 이건 어떻게 보면 클라이언트와 무관하게 배치로 돌아갈 것이므로 따로 프로젝트로 빼서 구현해도 상관없지 않을까. GCP쪽을 사용할 예정인데 또 모르겠다. 어떤 컴포넌트들이 있으련지.. 어쨌든 미루지 말고 빨리 공부&구현이 필요한 시점.

여차저차 해서 잘 되면 내 목표는 producthunt에 올려보는 것이다. 유저 피드백도 받고.. 그리고 내친김에 유라임에 대한 ‘사업화’에 대한 비전을 생각해보면, 일단 나는 remote-based workplace를 만들고 싶다. 꽤 시간이 걸리겠지만, 굳이 거창한 사무실을 가질 필요가 있을까 싶다. 요즘처럼 coworking place가 많이 활성화된 시점에 말이다. 실리콘벨리에 사무실을 한번 사용해 보니깐 더 그건 느껴졌다. 물론 훌륭한 개발자들이 도시에 더 몰리겠지 싶지만 난 굳이 그럴 필요도 없을 것 같고 자기가 원하는 시간에 원하는 장소에서 개발만 잘 되면 되겠지 싶다. 근데 그러려면 또 리더의 업무분담과 커뮤니케이션이 중요할 것 같다. 뭐 요즘 슬랙같은거 많은데 뭐. 

이렇게 글로 써보니깐 좀 정리가 된다. 무엇을 해야 할지에 대해서.. 이게 사실 과부하라면 과부하인데 예전에는 이 작업들을 대학원이나 취준과 동시에 진행했었다. 그러니 당연히 실패할 수 밖에 없지.. 지금은 그렇지 않으니, 어느정도 시간을 둬서 내 목표는 2분기에 설계를 끝내는 것으로 생각하고 있다. 부지런만이 답이다. 조금씩이라도 진척을 보이는 것. 더 체계적으로 무엇을 끝내야 할지를 계획하고, 실천해보자. 그게 유라임을 위한 길일테니깐.