위시캣 후기 – 종합
기획자와 개발자를 연결해주는 아웃소싱 플랫폼은 위시캣과 프리모아, 이랜서 등 많이 있는데, 가입하고 자기 포트폴리오 등록을 각 사이트마다 하는게 너무 귀찮아서 첫번째 등록한 위시캣에서만 활동했습니다. 기획자는 기업보다 거의 1/2도 안되는 비용에 개발을 의뢰해서 좋고 개발자는 (물론 전업으로 하시는 분도 계시겠지만) 저처럼 부업을 할 수 있다는 점이 장점이라서 하게 되었습니다. 요즘은 상주와 도급이라고 카테고리가 아예 나눠져있더군요. 상주 프로젝트는 보통 이랜서가 주류였고 위시캣은 외주 도급이 주류였는데 상주도 취급을 하더군요. 물론 저는 상주는 이미 하고 있으므로 비상주로 할 수 있는 외주 도급 계약만 하였습니다.
전체 프로세스를 한번 보겠습니다. 보통 기획자를 클라이언트라고 하고 개발자를 파트너라고 부르는데 저는 그냥 알아보기 쉽게 기획자, 개발자라고 부르겠습니다. 기획자가 프로젝트를 등록하고 개발자가 지원하게 됩니다. 지원시에 개발금액을 명시해야 하는데 저는 보통 기획자가 제시한 금액에 수수료 10%를 더한 금액을 적습니다. 지원후에 기획자가 개발자를 선정하게 되면 기획자와 미팅을 하게 됩니다. 초창기에는 위시캣에서 카페를 잡아주고 카페에 기획자, 개발자 위시켓 담당자 이렇게 미팅을 진행합니다. 아마 위시캣에서 참석하는 이유는 직접 계약으로 이어지는 것을 방지하기 위한 목적이 아닌가 추측합니다. 기획자가 개발자 2-3명을 면접후에 개발자를 선정하면 계약이 이루어 집니다. 계약은 온라인으로 이루어 지는데 계약서에 반드시 요청사항 그리고 개발 후에 검수가 어떻게 이루어지는지 이 두가지는 반드시 체크해야 합니다. 그렇지 않으면 나중에 분쟁의 소지가 생기게 됩니다. 계약은 전자계약으로 진행이 되므로 계약서를 검토후에 클라이언트와 파트너가 각각 모두 서명을 하게 되면 개발이 시작됩니다. 개발이 시작되면 기획자는 에스크로로 계약금을 위시켓에 입금하게 됩니다. 개발 완료후에 검수를 완료하면 개발자에게 개발 금액이 입금되는 프로세스입니다.
2018년 8월부터 지금까지 위시캣 프로젝트는 총 6건을 완료하였고 총 금액은 합산해보니 3970만입니다. 초반에는 지원을 해도 되지가 않아서 빈익빈부익부 같다고 생각했습니다. 프로젝트를 해 본 사람은 계속하고 안 해본 사람은 계속 못하는. 그래서 한 건이라도 시작을 한 번 해보자는 생각에 지원자가 없고 난이도가 어려운 프로젝트를 주로 지원했습니다.
총 프로젝트 지원한 건수는 102건이고 계약한 건수는 6건이고 누적 완료 금액이라는 통계는 위시캣에 명확히 나오네요. 미팅 건수는 안나오는데 미팅한 온라인/오프라인 모두 합쳐서 약 20건 정도 되지 않았나 생각됩니다. 계약이 성사되지는 않았어도 보람있었던 미팅도 많았습니다. 예를 들자면 실리콘밸리에서 AWS 아키텍처로 일하시다가 오는 분이랑 미팅을 한적이 있는데 AWS로 구성된 시스템 구성도를 보고 많이 배운적도 있고 그리고 mTurk 이라는 우리나라에는 개방되지 않는 플랫폼 같은 것도 보면서 새로운 시야도 넓힌적도 있고. 반대로 시간만 낭비하고 지식만 낭비한 미팅도 몇 건 있었습니다. 대체적으로 기획자와 미팅 그 자체도 새로운 지식과 시야를 넓히는데 모두 도움이 되었습니다.
공공기관과 대기업에서 일하면 사용하는 기술만 사용하게 됩니다. 위시켓에 프로젝트가 머가 있는지 읽어 보는것만도 시야를 넓히는데 도움이 됩니다. 시간될 때 마다 한번 읽어보시고 할만하다고 생각되면 한번 도전해보세요. 아마 첫 프로젝트 시작하는게 어려울텐데 어떻게든 첫 프로젝트를 하도록 노력해보세요.
가장 최근에 했던 프로젝트부터 한번 간단히 리뷰해볼게요.
WebRTC 기반 내부용 화상회의 PC 웹 및 앱 개발
공고 내용에 올라온 내용은 다음과 같습니다.
필요요소 | – WebRTC 기반 내부용 화상회의 PC웹 및 앱 개발 – 서버 개발 |
개발환경/언어/방식 | – WebRTC |
주요기능 | 1) 내부에서 테스트하는 목적으로 파일럿 웹 및 앱을 개발하고자 합니다. – PC웹 및 Android, iOS에서 모두 동작하는지 테스트하는 것이 목적입니다. 2) 주요 기능 – 화상회의 개설 – 화상회의 리스트 – 멀티 사용자 참가 화상회의 : 약 30명 정도 참가자 화면이 보여주면 좋겠음. – 스크린 공유 – RestAPI : 타 시스템에서 연동해서 사용 3) 소스 이전 및 적용 기술 설명 |
기타 | – 상주 개발은 필요 없으며 중간중간 필요시 협의하면 됩니다. – Jitsi Meet 오픈소스 기반 구축해보신 경험이 있으신 분을 우대합니다. |
zoom 같은 화상미팅 프로그램을 만드는 프로젝트입니다. webRTC라는 프로토콜을 알아야 개발할 수 있기 때문에 지원자도 제한적이고 비대면 시대에 많이 사용될 거 같아서 개발하게 되었습니다. zoom에 있는 기본 기능들은 거의 포함되었습니다. 화면 공유, 비디오 꺼기 및 켜기, 오디오 켜기 및 끄기, 선택된 화면 크게 보기 등등.
기술스택에는 제한이 없어서프런트는 React + Ant design +Redux 로 개발하였고 백엔드는 NodeJS + MariaDB + typescript + typeORM 을 사용하였습니다. WebRTC 를 Web API로 개발한거는 아니고 Jitsi 라는 오픈 소스를 사용해서 개발하였습니다. 이 프로젝트는 기획부터 설계, 개발 과 배포 및 설치까지 저 혼자서 모두 하였습니다.
화면은 많지 않아서 개발 기간이 많이 걸리지는 않았지만 WebRTC라는 프로토콜과 오픈소스 라이브러리를 사용하면서 여러가지 어려움을 많이 만났습니다. 예를 들어 화상미팅중 이어폰을 장착시 소리가 안나온다던가 등.
WebRTC는 원래 P2P 목적으로 나온 프로토콜 이였지만 다중 화상 형태가 많이 사용되면서 MCU, SNU와 같은 형태의 프로토콜을 지원하는 서버가 필요하게 되었습니다. 가장 많이 사용되는 서버는 Janus 서버이고 이 프로젝트에서는 Jitsi 서버를 사용하게 되었습니다.
IOT 디바이스 모니터링 웹 개발
공고 내용에 올라온 내용은 다음과 같습니다.
개요 | 2종류의 디바이스로 부터 수집된 데이터 (프로토콜)를 시각화 하는 웹 개발 |
개발환경 | – angular(7버전), Node.js 사용 – MongoDB, MariaDB – AWS |
요구사항 | 1) 웹 기반 대시보드 제공, 데이터 수집 그래프 등의 시각화 작업 – 데이터 시각화 라이브러리 : amCharts – 데이터 갱신 주기 : 10분 2) 데이터 수집 및 간단한 DB 설계 및 백단의 작업 필요 |
필요요소 | – 화면 퍼블리싱 – 웹 프런트엔드 개발/데이터 연동 – DB 설계/개발 |
기타 | DB데이터를 바로 출력해주는 기능이며, 복잡한 로직은 구현하지 않을 예정입니다. |
오프라인 미팅을 하러 갔는데, 오히려 제가 컨설팅을 많이 해준 기억이 나네요. 제가 LGU+ 홈IOT 프로젝트를 하면서 oneM2M 프로토콜을 많이 사용했었는데, 이 회사에서 구축할려는 솔루션이 oneM2M 프로토콜을 연동해서 NB-IOT 같은 센서 데이터를 연동하는 걸 필요로 해서 였습니다.
프로젝트는 서버의 데이터를 화면에 보여주는 건데 프런트가 angular 여서 지원자가 거의 없어서 제가 하게 되었습니다. 어려운 난이도는 없었는데, 권한별 사이트가 존재한다는 전제 조건이 하나 있었습니다.
프런트는 angular 7 으로 이미 개발되어 있었는데 안되어있는 부분을 제가 채우는 일이였습니다. 또한 특이한 점은 amCharts라는 차트 라이브러리를 사용했는데 지도 관련 데이터 시각화에 최적화된 라이브러리 였습니다. 주로 프런트만 작업하였고 SASS 그리고 Material Design 과 flexbox 라이브러리를 사용했습니다. 프런트만 작업하였고 기존에 작업된 소스가 있어서 기존 소스에 약 50% 정도 더 채운거 같습니다.
Vue.js 기반 홈페이지 디버깅 및 플랫폼 마무리 개발 작업
공공기관 프로젝트였는데 벤처 기업이 초급 개발자 한명을 뽑아서 개발 진행을 하다가 에러가 너무 많이 발생해서 발견된 버그에 대한 디버깅과 플랫폼 마무리 개발작업을 하는 것이였습니다.
프런트는 Vue였고 백엔드는 파이썬 장고로 이미 개발된 상태였습니다. 지금까지 한 위시캣 프로젝트 중 가장 후회되는 프로젝트였습니다. 중간에 그만할려고 했지만 대표가 또 제 학교 후배이고 해서 부탁하고 해서 어쩔수 없이 끝까지 하게 되었습니다.
아무것도 개발되지 않는 상태에서 개발하는게 차라리 편한 프로젝트입니다. 남이 한 프로젝트를 디버깅하는게 난이도가 더 높은 프로젝트이고 이런 프로젝트는 필히 피해야 합니다.
이 프로젝트의 문제점 몇가지를 짚어 볼께요. 차트를 보여줘야 하는 곳에 차트 라이브러리를 사용하면 되는데 D3 라이브러리로 차트를 그리고 있었습니다. 제가 왜 그렇게 했냐고 물어보니까 잘몰라서 그렇게 했다고 하네요. 그리고 초급 개발자가 처음부터 개발하다 보니 구조가 설계가 잘못되었습니다. 또한 Vue 인데도 불구하고 토큰 인증을 하지 않고 세션인증을 사용하고 있어서 매번 세션 정보를 가져오고 있어서 퍼포먼스가 떨어지고 있었습니다. 결정적으로 원래는 제가 프런트만 하기로 되어있었는데 웹 사이트가 한시간만 되면 죽는다고 서버를 좀 봐달라고 부탁해서 파이썬으로 된 장고 소스를 보게 되었는데 장고 ORM 설계시 many to many 관계를 너무 많이 사용해서 화면 하나를 보게 되면 쿼리가 백개 이상 실행되는 현상이 있었습니다.
결론적으로 개고생한 프로젝트였습니다. 개발 금액은 고작 400이였습니다.
mturk를 이용한 데이터 수집 웹 페이지 유지보수
이 프로젝트는 서울대 컴퓨터공학과 연구소에서 의뢰한 건데 약간의 개발과 유지보수 정도였습니다. 제가 이 프로젝트를 하게 된 것은 mturk이라는 플랫폼에 관심이 있어서 였습니다. mturk은 우리나라 croudworks 와 유사한 플랫폼입니다. 예를 들어 어떤 job을 건당 삼천원으로 올려 놓으면 사람들이 job을 수행하고 천원을 받아가는 형태인데 주로 빅데이터를 모으기 위한 job 들입니다.
프런트는 Vue로 되어있었고 제가 기존 소스에 약 30% 정도 추가한 정도였습니다.
서비스 소개 및 데이터 제공 웹 사이트 제작
공고 내용에 올라온 내용은 다음과 같습니다.
개요 | 개발중인 서비스는 유전자 분석 서비스 입니다. 필요한 기능은 기본적인 웹사이트 기능이며 특별한 기술이 들어가는 부분은 없습니다. 핵심 서비스는 마이크로 서비스형태로 저희가 나중에 붙일 예정입니다. |
필요요소 | + 상세 화면 및 기능 기획 + 시스템 설계 + PC 웹 디자인 및 개발 + 서버 구축 및 관리자 페이지 개발 |
사용 프레임워크 | 저희 팀에서는 기존에 frontend에서는 nuxtjs, vuejs, vuetify를 사용했고 backend는 golang의 echo를 사용했습니다. 데이터베이스는 postgresql을 사용했습니다. |
업무범위 | 회원가입, 제품 소개 페이지, 게시판 기능, 특정한 데이터를 잘 보여줄 수 있는 테이블, 별점을 통한 데이터 평가 시스템 등 |
기타 | 서비스 제작이 끝난다고 해도 실제 제품 출시까지는 오랜 기간이 걸릴 것으로 예상되기 때문에 외주 내용은 비밀에 부쳤으면 합니다. 또한 저희 제품 개요에 대해서 어느정도 설명을 드려야하기 때문에 비밀유지계약서를 작성하길 원합니다. 관련 기술 |
서울대 유전공학 연구소에서 의뢰한 프로젝트인데 비밀유지협약(NDA) 계약을 맺고 진행하였습니다. 클라이언트가 요구한 사용자 사이트와 관리자 사이트 두 개의 사이트를 만들었습니다.
프런트는 Vue + Vuetify 로 만들었고 백엔드는 Spring Boot으로 진행하였습니다. 서버는 AWS에 포팅하였고 설계, 개발, 배포 까지 혼자서 모두 개발하였습니다. 개발 기간이 25일로 촉박해서 밤새서 개발한 기억이 나네요.
웹 기반 딥러닝 프로그램 프로토타입 제작
제가 위시캣에서 한 첫 프로젝트이면서 지금까지 생각해봐도 가장 난이도가 어려웠던 프로젝트 였습니다. 이 프로젝트도 NDS 계약을 체결하고 진행했습니다. 요구사항은 대용량 이미지 업로드/다운로드 및 그리기 도구 구현, 업로드된 이미지 리스트의 정보 변경 및 필터 기능 구현, 추가되는 정보에 따른 visibility 옵션 구현 등 윈도우 WPF 응용 프로그램을 웹으로 개발하는 프로젝트였습니다.
프런트는 Vue + typescript + vuetify 로 개발하였고 백엔드는 Spring Boot + JNI 연동을 하였습니다. OS는 openCV를 연동해야 해서 윈도우 2000으로 포팅했습니다.
이미지를 불러와서 그 위에 그림을 그리는 부분 그리고 이미지 확대 축소시도 동일하게 위에 그려진 도형이 동기화가 되어야 하는 부분 등 그리기 구현이 좀 쉽지는 않았습니다. 이 프로젝트도 제가 설계부터 개발과 포팅까지 모두 혼자 하였습니다.