Kotlin All in One

지금 우리 팀이 개발하고 있는 서비스에 iOS를 제외한 백엔드, 백오피스 프론트, 안드로이드를 전부 Kotlin으로 개발하고 있다. Kotlin을 선택한 이유는 2가지인데 첫째는 개인 선호고 두 번째는 적은 리소스로 빠르게 개발하기 위한 전략적 이유였다. 정말 빨랐는가? 묻는다면 처음은 빠르지 않았다. 지금은 Spring Boot와 Kotlin은 어느 정도 성숙한 조합이지만 KotlinJS와 Kotlin Multiplatform은 아직 알파버전에 실험적인 스펙이라 프론트를 KotlinJS로 개발하는데 많은 삽질이 있었다. 이미 Wrapping된 UI Component(MUI나 RingUI)를 사용해도 되지만 Ant를 사용하기 위해 모든 컴포넌트를 Kotlin으로 정의하기도 하고 Gradle과 씨름 한판을 하며 많은 우여곡절이 있었다.

그리고 서비스를 런칭하고 작은 업데이트를 진행하며 느낀 점은 단단하단 느낌이었다. 이 감정의 시작은 Kotlin의 Null-Safety다. !! 와 같은 operator를 최대한 사용하지 않고 Nullable을 고려하니 NullPointException은 보지 못했고 프론트엔드에서도 자바스크립트를 사용했다면 느슨한 null check로 버그가 발생할 위험이 있지만 KotlinJS를 사용하니 서버 Response가 NotNull에서 Nullable로 바뀌는 특수한 경우가 아니면 자주 발생하는 위험 요소가 사라진 것이 단단한 느낌을 주었다.

Spring, KotlinJS(React), Android 코드 스타일이 다르다. Spring은 블로킹, KotlinJS는 { } 로 마크업 언어와 같이 표현하고 Android의 경우 Extension, Listener와 Courutine으로 논블로킹 방식으로 개발하게 되는데 이에 익숙해진다면 각 코드 스타일에 영감을 주는 형태로 발전한다. 플랫폼을 넘나들며 개발하는데 혼란스러움이 없고 긍정적인 효과를 주는 것은 단단해진다는 느낌을 느끼게 해준다.

KMM 또한 시도하였지만 일정상 문제로 우선은 Draft 시켜두었다. 앞으로 틈틈이 준비해서 최소한 DTO와 같은 것들은 iOS포함해서 모든 플랫폼에서 공유할 수 있게 설정하는 것이 목표다. 이에 장점은 생략하겠다. 슬슬 채용도 해야 해서 이 글을 작성하며 떠올린 우리가 원하는 개발자를 간략하게 적어둘 필요가 있겠다.

  • Gradle/Maven과 씨름해도 절대 지지 않는 사람.
  • Kotlin 코드를 아름답고 이해하기 쉽게 작성할 수 있는 사람.
  • 아직 도전자가 적은 이 환경에서 살아남을 수 있는 강인한 모험가.
우대조건 : iOS, Android, React, Spring 전부 가능한 자