동기

스타트업에서 얼마간 근무를 하다보니, 어느 시점에선가 어떤 문제를 포착하고, 그 문제를 해결 할 수 있는 솔루션이 그려졌을 때, 설령 서버 개발자 할당이 조금 늦어지더라도 간단한 서버 개발 정도는 제가 직접 해버릴 수 있다는 자신감을 갖고 싶어졌습니다. 그래서 그 역량을 쌓기 위해 바닥부터 끝까지, 아주 지루하고 평범한 CRUD앱 하나를 3개월 안에 전부 다 만들어보는 연습을 해보려 합니다.

Goal

Non-Goal

계획

통신은 gRPC

RPC는 HTTP 기반의 전통적인 방식의 통신에서 발생하는 여러 문제점들을 획기적으로 해결합니다. 서버와 클라이언트간 주고받는 데이터에 대한 명세가 서로 맞지 않을 일도 없어지고, 자연스럽게 JSONDecoding Error 같은 것들을 볼 일이 없어집니다. 또 훨씬 빠르고 효율적으로 통신할 수 있고, 특히 클라이언트가 일방적으로 서버에게 데이터를 요청하는 방식이 아니라, 서버가 클라이언트로 데이터를 푸시하는 방식의 통신도 가능합니다. 아마 머지 않은 미래에, 새로 만들어지는 서비스들 대부분은 RPC 기반으로 만들어질 것이라 생각해요. 이 새로운 방식의 통신 방식을 확실히 이해하기 위해, 이번에 연습으로 만드는 서비스도 gRPC 기반으로 만들려 합니다.

이를 위해 https://grpc.io/docs/languages/node/basics/ 등에 나와 있는 예제들을 만들어보고 이를 이해하려 합니다.

서버 개발은 TDD로

모바일개발을 하다보면, 테스트 작성에 대해 핑계를 댈 포인트가 많습니다. 비동기적인 요소들, 그리고 UI관련 요소들은 테스트하기 어렵기 마련인데, 모바일 앱이란 것이 비동기적으로 UI를 그리는 일이니까요. 그래서 자동화 테스트가 중요하다는 것을 알면서도 "모바일 앱은 별 수 없어"라는 핑계를 대며 테스트 작성에 소극적이 되기 일쑤였습니다.

하지만 서버개발은 그런 핑계가 통하지 않죠. 비동기적인 요소들이야 분명 많이 있겠지만, 최소한 UI를 만들지는 않으니 테스트 작성이 훨씬 쉬울 겁니다. 이번 기회에 TDD를 제대로 익혀보고, 그 감각을 바탕으로 모바일 앱에서도 자동화 테스트를 어떻게 작성 할 수 있는지 고민해볼 수 있는 기회로 만들어보고 싶습니다.그리고 여기에 최대한 집중하기 위해 다른 자잘한 것들은 신경쓰지 않아도 되도록 제게 조금은 익숙한 언어인 JavaScript를 메인 언어로 가져가보려 합니다.

마침 딱 TDD방식으로 NodeJS 서버 개발하기 라는 인프런 강의도 있어서, 이것을 수강해보면서 감을 잡아보려 합니다. 아마 다음 턴에는 Node로 짠 서버 Go로 재작성 하는 퀘스트를 수행해볼 수도 있겠네요.

프론트엔드는 React

요새는 웹 기술이 너무 좋아져서, 육안으로 웹과 네이티브를 도저히 구분 할 수 없더라고요. 네이티브 개발자인 제 입장에서는 아쉬운 마음도 크지만, 앞으로 JSON을 예쁘게 보여주는 역할은 전적으로 웹이 담당하게 될 것이라는 생각에 점점 확신이 들고 있습니다. 저도 아마 제 서비스를 만들게 된다면, 네이티브 기반보다는 웹 기반으로 만들게 될 것 같아요. 네이티브 개발자의 역할은 아마 시리 지원과 같은 OS특화 기능들을 얼마나 잘 지원하는지 정도가 될 것으로 생각합니다.