프로젝트를 진행하기 전 도구와 기술들에 대해 정리한다.

백엔드

배경 및 요구사항

배경과 요구사항은 다음과 같다.

  • 최대한 강타입 언어를 사용하고자 한다.
  • 테스트 코드, 문서화가 잘 되어야 한다.
  • 예전에 Java와 Spring을 자주 썼었고, 현재는 NestJS도 가끔씩 쓰는 상황이다.
  • Kotlin은 아직 배우는 단계이다.

선택지

  • NestJS/TypeScript
  • Java/Spring Boot
  • Kotlin/Spring Boot

의사결정

Kotlin/Spring Boot를 사용하겠다. 그 이유는,

  • NestJS의 경우 웹 쪽은 Spring Web MVC처럼 잘 작성할 수 있으나, 아직은 Spring 생태계에 비하면 많이 부족하다고 생각한다. NodeJS쪽에서 마이그레이션하는 것이 아니라면 현재로서는 고려하지 않는다.
  • Java의 경우 보일러 플레이트 코드가 굉장히 많고, 이를 감추기 위해 롬복 등을 사용하면 코드가 되게 지저분해지는 경향이 있었다. 신규 프로젝트라면, Kotlin으로 해도 괜찮다고 생각한다.
  • Kotlin은 간결하면서도 Java와 다르게 여러 null 안정성을 잘 보장해 준다.
  • Kotlin이 서버 사이드에 적용한 사례를 매체를 통해 자주 접했다. 예전부터 공부해 보고 싶은 생각이 많았는데, 같이 공부하는 겸 적용해 보고자 한다.

배경 및 요구사항

  • GPS같이 네이티브 만의 기능이 꼭 필요하지 않다.
  • 앱을 최대한 공수를 줄여야 한다.

선택지

  • Flutter
  • React Native

의사결정

Flutter를 사용하겠다. 그 이유는

  • Flutter는 최근에 많은 스타트업에서 사용하고 있다. 예전에는 RN과 경쟁하던 시대였지만, 현재 시점에서 Flutter가 많은 기능과 최적화를 통해 더 많이 사용되고 있다고 생각한다.
  • Flutter가 이제는 Material UI를 기본적으로 제공한다.

메신저

배경 및 요구사항

메신저 요구사항은 다음과 같다.

  • 웹훅 등 외부 시스템과 연계가 잘 되어야 한다.
  • 돈을 최대한 쓰지 않는 방향으로 하고 싶다.

선택지

  • Discord
  • Slack
  • MS Teams

의사결정

Slack 무료 버전을 사용하겠다. 그 이유는,

  • Slack은 3개월 지난 메시지는 삭제되는 것이 아쉽긴 하다. 하지만 외부 시스템과의 연결 등의 레퍼런스가 많다.
  • Discord는 협업 툴 보다는 메신저 느낌에 가깝다. 다만 메신저 기록이 무제한 남는다는 이점이 있다.
  • MS Teams는 사용해 본 경험이 없지만, 외부 시스템 연결이 잘 된다면 이쪽도 사용해 볼 만 하다고 생각된다.

이슈 트래킹 도구

배경 및 요구사항

  • 담당자 할당 등이 잘 되어야 한다.
  • 마찬가지로 외부 시스템과 연결이 잘 되어야 한다.

선택지

  • GitHub Issue / Projects
  • Jira

의사결정

Jira를 사용하겠다. 그 이유는,

  • automation 기능이 GitHub와 궁합이 좋다.
  • 현재는 무료 요금제에서도 충분한 기능을 사용할 수 있다.